Konu Köprü

Tartışmaların buluşma noktası

Elasticsearch Node Kaynaklarını Kubernetes Üzerinde Sınırlama

10-27-2026, 06:19 PM

ResourceQuota Kullanımında Temel Adımlar



Kubernetes kümelerinde kaynak limitleri, bir konteynerin CPU ve bellek gibi kaynaklardan en fazla ne kadar yararlanabileceğini tanımlayan temel mekanizmalardır. Kaynak isteği (request) ile üst sınır (limit) arasındaki fark, Kubernetes planlayıcısının bir pod'u hangi düğüme yerleştireceğini belirlerken kritik bir rol oynar. İstek değeri, konteynerin ayakta kalabilmesi için ayrılması gereken minimum kaynağı ifade ederken, limit değeri ise bu kaynağın aşılamayacağı üst sınırı belirtir. CPU birimleri genellikle millicore olarak ifade edilirken, bellek miktarları mebibyte veya gibi ikili birimlerle tanımlanır. Bu kavramları iyi kavramak, kümenin kararlılığı için vazgeçilmezdir. Limitsiz bırakılan konteynerler, bir düğümün tüm kaynaklarını tüketerek diğer iş yüklerini aksatabilir ve komşu uygulamalarda beklenmedik yavaşlamalara yol açabilir. Bu nedenle her geliştirici kaynak tanımlarını ciddiye almalı ve yapılandırmanın baştan itibaren planlanmasına özen göstermelidir.


Kaynak limitlerinin doğru ayarlanması, bir kümenin hem verimliliği hem de dayanıklılığı açısından belirgin faydalar getirir. Doğru yapılandırılmış istekler sayesinde zamanlayıcı pod'ları daha dengeli yerleştirir ve düğümler aşırı yüklenmeden çalışır. Limitler ise bir uygulamanın bellek sızıntısı yaşaması durumunda, tüm düğümün çökmesini engelleyerek hasarı tek bir pod'la sınırlar. Bellek limiti aşıldığında düğüm ajanı konteyneri OOMKilled durumuyla sonlandırır ve yeniden başlatma politikası devreye girer. Böylece operasyon ekipleri sorunu hızlıca fark edip müdahale edebilir. Ayrıca kaynak israfı azalır, bulut maliyetleri düşer ve kapasite planlaması daha net hale gelir. Kaynak tüketiminin izlenebilir olması, scaling kararlarını veriye dayalı almayı da mümkün kılar. Sonuç olarak doğru ayarlanmış limitler, hem teknik açıdan tasarruf sağlayan vazgeçilmez bir disiplindir.


Kaynak limitlerini adım adım uygulamak için önce mevcut iş yükünün davranışını gözlemlemek gerekir. Uygulamayı önce limitsiz veya gevşek bir yapılandırmayla çalıştırıp tipik ve zirve dönemlerdeki kullanımı ölçmek en sağlıklı yoldur. Metrics Server ya da Prometheus gibi araçlarla CPU ve bellek değerleri birkaç gün süresince toplanmalıdır. Elde edilen veriler üzerinden request değeri, ortalama kullanımın biraz hafifçe yukarısında seçilirken, limit değeri zirve kullanımın makul bir payla ötesinde belirlenebilir. Bellek için üst sınır ile istek arasındaki farkın çok açılmaması, ani OOM olaylarını azaltır. CPU tarafında ise sıkı limitler gecikmeye yol açabileceğinden temkinli davranılmalıdır. Ayarlar YAML dosyalarında resources bölümü altına yazılır ve Kustomize gibi yönetim araçlarıyla ortam bazında düzenlenir. Son olarak ResourceQuota nesneleriyle ad alanı düzeyinde varsayılanlar tanımlanarak standart sağlanır.


Kaynak limitlerini verimli biçimde yönetmek için çeşitli araç ve kaynak mevcut bulundurulmalıdır. kubectl ile top komutları pod düzeyinde güncel bilgi verir, metrik toplayıcı ise bellek kullanımını kümeye entegre şekilde takip etmeyi sağlar. izleme sistemi ve görselleştirme aracı ile geçmişe dönük eğilimler incelenebilir ve uyarı kuralları oluşturulabilir. Goldilocks gibi araçlar Vertical Pod Autoscaler önerilerini görselleştirerek uygun değerleri tespit etmeye yardımcı olur. Kubernetes dokümantasyonu, Resource Management kılavuzu başvuru kaynak olarak önemlidir. Ekipte standart bir etiketleme politikası ve namespace bazlı kota planı hazırlanmalı. Bu hazırlık yapılmadan uygulanan limitler çoğu zaman tahmine dayalı kalır.


Kubernetes'e yeni başlayanlar için ilk öncelikli tavsiye, kaynak tanımlarını hiçbir zaman boş bırakmamaktır. Her bir deployment için en azından temel bir istek ve limit değeri yazılmalı, ilk değerler muhafazakâr tutularak izleme sonuçlarına göre güncellenmelidir. Bellek limitlerini çok sıkı tutmak, uygulamanın sürekli yeniden başlamasına neden olabileceğinden dikkatli olunmalıdır. CPU limitlerinde ise throttling etkisini takip etmek için container_cpu_cfs_throttled metrikleri izlenebilir. Başlangıçta Burstable veya Guaranteed QoS sınıflarının ayrımını anlamak, hangi iş yükünün ne tür önceliğe sahip olduğunu kararlaştırmaya yardımcı olur. sınırlı bir ortamda deneysel çalışmalar yapmak, kalıcı sisteme geçmeden evvel önemli deneyimler kazandırır. Ekip içinde ayarların neden seçildiğine dair dokümantasyon tutmak, gelecekte yapılacak güncellemeleri kolaylaştırır. Unutulmamalıdır ki limit ayarları sabit değildir ve periyodik gözden geçirme gerektirir.


Kubernetes kümelerinde resource limit değerlerini belirlerken en kritik noktalardan biri, requests kavramlarının birbirinden farklı düşünülmesidir. Gereğinden düşük bir CPU veya bellek limiti, uygulamanın beklenmedik biçimde kesintiye uğramasına yol açabilir. Öte yandan çok yüksek tanımlanmış limitler, düğüm kapasitesinin verimsiz kullanılmasına neden olur. Bellek limiti aşıldığında kapsayıcının OOMKilled durumuna düşmesi özellikle dikkat gerektiren bir senaryodur. Bu nedenle ekipler her servis için bağımsız ölçümler yapmalı ve değerleri varsayım yerine gözlemlenen verilere dayandırmalıdır. Ayrıca CPU limitlerinin kısıtlama etkisi, yanıt sürelerini sessizce artırabilir. Bu etki, izleme araçları kurulmadan tespit edilmesi zor bir sorundur. Limit değerleri günceller ken trafik desenlerindeki değişimler de göz önünde bulundurulmalıdır. Bir diğer risk, namespace düzeyinde toplu kotaların yanlış yapılandırılması durumudur. Bu durumda yeni dağıtımlar anlaşılmaz biçimde reddedilebilir. Son olarak, test ortamındaki değerlerin doğrudan üretime taşınması ciddi sorunlara yol açabilir.


Kaynak yönetiminde farklı yaklaşımlar arasında seçim yapmak, ekibin gereksinimlerine göre değişir. Sabit değerlerle çalışan klasik yöntem, anlaşılır olmasına rağmen trafik dalgalanmalarına karşı esnek değildir. Dikey Pod Otomatik Ölçekleyici (VPA), geçmiş kullanım verilerine bakarak önerilerde bulunur ve manuel düzenleme yükünü azaltır. Yatay Pod Otomatik Ölçekleyici (HPA) ise replika sayısını ayarlayarak yükü dağıtır ve genellikle CPU ile özel metrikler üzerinden tetiklenir. Her iki yöntemin birlikte kullanılması dikkatli bir planlama gerektirir, çünkü birbirlerinin kararlarını değiştirebilirler. Limit Range ve ResourceQuota gibi politika nesneleri ise merkezi denetimi mümkün kılar. QoS sınıfları (Guaranteed, Burstable, BestEffort) da öncelik açısından farklı davranışlar sergiler. Hangi yöntemin tercih edileceği ise iş yükünün niteliğine ve kritiklik düzeyine bağlıdır.


Gerçek hayatta bir e-ticaret şirketinde kampanya dönemlerinde yaşanan tek olay, bu konunun ehemmiyetini açık biçimde göstermektedir. Ekip, ödeme servisinin bellek limitini olağan trafik ölçümlerine göre belirlemişti ve kampanya sırasında pod'lar sürekli yeniden başlatılmaya başladı. Sorunun kaynağı incelendiğinde, ani artan istek sayısının bellek tüketimini öngörülenin üzerine çıkardığı anlaşıldı. Ekip, HPA yapılandırmasını gözden geçirerek hızlıca ek replikalar oluşturulabilecek şekilde düzenledi. Bir diğer örnekte, veri işleme yapan bir iş kümesi gece saatlerinde devreye giriyordu ve gündüz kullanılmayan kaynaklar israf gidiyordu. VPA önerileri temel alınarak limitler düşürüldü ve maliyetlerde belirgin bir azalma sağlandı. Bu tür deneyimler, teorik bilginin pratikte nasıl uygulandığını ortaya koyan değerli örneklerdir.


Kaynak limitlerinin uzun vadeli etkileri, sadece anlık performansla kısıtlı kalmaz. Doğru yapılandırılmış limitler, kümenin kararlılığını artırır ve operasyon ekibinin gece çağrılarını azaltır. Diğer yandan sürekli değiştirilmeyen değerler zamanla teknik borç oluşturur. Uygulamalar geliştikçe kaynak profilleri de evrilir, bu nedenle periyodik gözden geçirme süreçleri kurumsal bir alışkanlık haline getirilmelidir. Sürdürülebilirlik açısından değerlendirildiğinde, gereksiz kaynak tüketimi hem maliyeti hem de karbon ayak izini artırır. Bu sebeple kaynak verimliliği, yalnızca mühendislik olmayıp aynı zamanda çevresel bir sorumluluk olarak görülmelidir. Ekiplerin bilgi paylaşımını destekleyen kültürler, bu alanda daha istikrarlı sonuçlar elde eder.


İleri seviye uygulamalarda kaynak yönetimi, kendiliğinden işleyen sistemler ve gözlemlenebilirlik araçlarıyla birlikte değerlendirilmelidir. Prometheus ve Grafana gibi çözümler ile kullanım eğrilerinin analizi, limit kararlarını veri odaklı hale getirir. Yük testleri, canlıya çıkmadan önce limitlerin uygunluğunu doğrulamak için kritik bir aşamadır. Bazı ekipler kaynak talebi ile gerçek kullanım arasındaki farkı takip eden özel raporlar oluşturur. Politika motorları, örneğin OPA Gatekeeper, limit tanımı eksik dağıtımları engelleyerek standardı sağlar. Sonuç olarak, kaynak limitleri sabit bir yapılandırma değil, sürekli izlenen ve geliştirilen dinamik bir yapıdır. Bu kapsamlı yaklaşımı benimseyen kurumlar, hem verimlilik hem de bütçe açısından kalıcı kazanımlar elde eder.


Kubernetes kaynak limitlerinin çekirdek mantığı


Kubernetes kümelerinde her pod için işlemci ve bellek rezervasyonu ile üst sınırı ayrı ayrı tanımlanır. Request değeri zamanlayıcının (scheduler) düğüm seçimini belirleyen temel değerdir. Limit ise konteynerin çalışma anında aşabileceği en yüksek kullanımı sabitler. Bu iki değer doğru kurgulanmadığında küme genelinde kaynak israfı veya beklenmedik kesintiler görülebilir. Özellikle prod ortamlarında her bir servisin gerçek ihtiyacını test etmeden değer atamak ciddi sorunlara yol açar. Bu nedenle önce metrik toplama araçlarıyla gerçek kullanım verisi alınmalı. Ayrıca hizmet kalitesi sınıfları (Guaranteed, Burstable, BestEffort) request ve limit eşitliğine göre atanır, bu da tahliye (eviction) önceliğini açıkça etkiler.


Request ve limitlerde sık yapılan yanlışlar


Çok rastlanan hata, limit değerini hiç girmemek veya tüm servislere aynı tek tip değeri kopyalayıp geçmektir. Bu durumda bir pod, düğümün bütün belleğini tüketerek diğer podları olumsuz etkileyebilir. Bir diğer sık görülen problem, bellek limitini çok düşük tutmak ve uygulamanın sürekli OOMKilled olarak tekrar başlamasına yol olmaktır. CPU limitini ihtiyaçtan düşük tutmak ise gecikme (latency) artışına ve fark edilmesi zor performans düşüşlerine yol açabilir. Ayrıca talep değerini doğru tutmadan düğüm kapasitesinin verimsiz harcanmasına yol vermek, küme maliyetlerini fazla yükseltir.


Tecrübeli pratik yönergeler ile sınırları optimize etmek

Uzmanlar genellikle ilk aşamada Vertical Pod Autoscaler ile öneri modunda çalışarak gerçek kullanım dağılımını çıkarmayı tercih eder. Elde edilen değerler ışığında request değerleri, normal yük seviyesinin ufak üzerine, limit değerleri ise pik yük anlarını tolere edecek şekilde ayarlanır. Bellek için limit ile request arasındaki farkın dar tutulması, OOM riskini azaltır. CPU için ise limit koymadan yalnızca request tanımlamak, çeşitli ekip tarafından benimsenen bir yaklaşımdır, zira CPU throttling gecikmelerinin önüne geçer. LimitRange ve ResourceQuota nesneleriyle namespace bazında standart değerler ve üst sınırlar kural hâline getirilerek tutarlılık güvence altına alınabilir.


Limit değerlerinin bütçe boyutu ve bütçe planlaması


Kaynak limitleri doğrudan bulut faturasını yönlendiren etkenlerdir. Bir düğümün içinde gereksiz yere geniş request tanımlanmış podlar konuşlandığında, scheduler yeni düğüm açmaya zorlanır ve küme maliyeti artar. Maliyet planlaması yapılırken bütün namespace için toplam request değerlerinin ayrıca izlenmesi kaçınılmazdır. Bunun için kubecost kullanılarak servis bazında harcama dağılımı çıkarılabilir. Böylece hangi iş yükünün gerçekten ne kadar kaynak tükettiği somut şekilde görülerek bütçe kararları daha doğru alınır.


Zamanlama ve sezonluk yük dalgalanmalarına göre limit ayarı


Çok sayıda işletmede trafik tahmin edilebilir dönemlerde ciddi biçimde tırmanır; kampanya haftaları, yılbaşı sipariş yoğunluğu veya öğretim dönemleri bu yoğunlukların başlıca örneklerindendir. Bu zamanlar için request ve limit değerlerini zamanında gözden geçirmek, beklenmedik kesintilerin önüne geçer. Planlı ölçeklendirme için KEDA gibi araçlarla cron tabanlı artırım tanımlanabilir, yoğunluk geçtikten değerlerin yeniden çekilmesi temin edilerek maliyet kontrolü devam eder. Böylece kapasite ihtiyacı yalnızca gerektiği kadar kullanılır.


Çokça sorulan sorular ve pratik yanıtlar

Ekiplerin en çok sorduğu konulardan biri, limitlerin hangi periyotla gözden geçirilmesi gerektiğidir. Yaygın öneri, her büyük sürüm değişikliği ve her üç ayda bir metriklere dönülerek değerlerin düzeltilmesidir. Bir bir başka yaygın soru ise limit koymanın zorunlu olup olmadığıdır; değerlendirme iş yükünün doğasına göre çeşitlenir, ancak bellek tarafında limit genellikle önerilirken CPU tarafında ihtilaflı bir görüş söz konusudur. Sonuç olarak ölçüm doğruluğu için en az birkaç hafta boyunca kayıt toplamak, anlık bir ölçüme dayanarak karar vermekten kat kat güvenilir sonuçlar verir.

Yanıtla
Member
10-27-2026, 06:26 PM
Elasticsearch Node Kaynaklarını Kubernetes ile ilgili aciklayici bir memo olmus, eline saglik.
Yanıtla
Member
10-27-2026, 07:30 PM
Bu konuda daha once hic bu kadar ise yarar bir sentez okumamistim.
Yanıtla
Sosyal Uye
10-27-2026, 07:32 PM
Farkli bir perspektif. Benim de bu konuda deneyimim oldu.
Yanıtla

Forumdan Konular