Azure Kubernetes Services Sistem Node Pool’larında Autoscaling Yapılandırması
0

Kubernetes ortamlarında cluster büyüdükçe yalnızca uygulama pod’larının değil, aynı zamanda CoreDNS, Metrics Server, Azure CNI ve diğer kritik sistem bileşenlerinin de kaynak ihtiyacı artar. Bu bileşenlerin sağlıklı çalışması, cluster’ın kararlılığı ve servis sürekliliği açısından kritik öneme sahiptir. Sabit node sayısıyla çalışan bir system node pool, artan yük karşısında zaman zaman yetersiz kalabilir ve kritik sistem pod’larının Pending durumunda beklemesine neden olabilir.

Bu gibi senaryolarda node sayısının manuel olarak artırılması hem operasyonel yük oluşturur hem de beklenmeyen iş yükü artışlarında gecikmelere yol açabilir. Cluster Autoscaler, cluster üzerindeki kaynak kullanımını ve zamanlanamayan (unschedulable) pod’ları sürekli izleyerek ihtiyaç duyulduğunda system node pool’a otomatik olarak yeni node’lar ekler. Yük azaldığında ise kullanılmayan node’ları güvenli bir şekilde kaldırarak hem yüksek erişilebilirlik sağlar hem de altyapı maliyetlerinin optimize edilmesine katkıda bulunur.

Resim-1

AKS Node Pools ekranında System ve User Node Pool’ların görüntüsünü yukarıdaki resimde görebilirsiniz. System node pool, AKS cluster mimarisinin temelini oluşturan kontrol ve sistem bileşenlerini barındırdığı için autoscaling mekanizmasının bu node pool üzerinde doğru şekilde yapılandırılması büyük önem taşır. Doğru yapılandırılmış bir autoscaling yapısı sayesinde kritik Kubernetes servisleri kesintisiz çalışmaya devam ederken, operasyonel süreklilik ve kaynak verimliliği de önemli ölçüde artırılmış olur. Aşağıda system node pool’u üzerinde çalışan kritik bileşenleri görebilirsiniz.

PodAçıklama
CoreDNSDNS çözümleme
Metrics ServerHPA metrikleri
CNIAğ yönetimi
kube-proxyNetwork
CSI DriverDisk yönetimi

System node pool yapılarında autoscaling kullanılabilmesi için bazı ön koşullar bulunmaktadır.: Cluster’ın Azure Kubernetes Service (AKS) üzerinde çalışıyor olması, ilgili node pool’un System tipinde tanımlanması ve kullanılacak sanal makine boyutlarının autoscaling’i desteklemesi gerekmektedir. Ayrıca, kullanılan Azure CLI sürümünün güncel olması önemlidir.

Peki, bu mekanizma nasıl çalışır? Örneğin CoreDNS gibi kritik sistem pod’ları, kaynak yetersizliği nedeniyle Pending durumunda kalır. Cluster Autoscaler bu durumu algılar ve yeni system node’lar ekler. Yeni eklenen node’lar üzerinde pod’lar başarılı şekilde schedule edilir. Yük azaldığında ise gereksiz hale gelen node’lar otomatik olarak ölçeklendirme dışına alınır.

System node pool cluster autoscaling yapısının kullanılması kubernetes altyapısının daha verimli yönetilebilir olmasını sağlar. İş yükü arttığında kritik sistem pod’ları için gerekli kaynaklar otomatik sağlanmaktadır. Bu işlem aracılığıyla sistem bileşenleri kesintisiz çalışmaya devam eder. İş yükü azaldığında ihtiyaç duyulmayan node’ların ortadan kaldırılması ile kaynak ve maliyet optimizasyonu sağlanır. Cluster Autoscaler işlemleri otomatik gerçekleştirilerek operasyonel yükün azaltılması sağlanır. Ani trafik artışları ya da azalışları ile cluster yapısının otomatik ölçeklenmesi sağlanır. System Node Pool için Autoscaling yapılandırmasına dair ekranı aşağıda görebilirsiniz.

Resim-2

Best practice olarak, system node pool yapısı asla silinmemeli ve autoscaling mutlaka açık tutulmalıdır. User node pool’larda ise autoscaling kararları tamamen workload ihtiyaçlarına göre verilebilir. System node pool için minimum node sayısı en az iki olarak belirlenmeli, maksimum node sayısı ise control plane üzerindeki trafik ve cluster büyüklüğüne göre planlanmalıdır.

Ayrıca, system node pool üzerinde taints kullanılarak user pod’larının bu node’lara schedule edilmesi engellenebilir. Bu node pool içerisinde küçük fakat performanslı sanal makine boyutları (örneğin D2s_v5) tercih edilebilir. Son olarak, system node pool yapısı kesinlikle scale-to-zero yapılmamalıdır.

Mevcut node pool yapısını kontrol etmek için;

az aks nodepool show \

–resource-group <RESOURCE_GROUP> \

–cluster-name <AKS_NAME> \

–name <SYSTEM_POOL_NAME> \

–query “{mode:mode, autoscaling:enableAutoScaling}”

System Node Poll yapısının AutoScaling yapılması için;

az aks nodepool update \

–resource-group <RESOURCE_GROUP> \

–cluster-name <AKS_NAME> \

–name <SYSTEM_POOL_NAME> \

–enable-cluster-autoscaler \

–min-count 2 \

–max-count 5

System node pool yapısı için AutoScaling durumunun doğrulanması için;

kubectl get nodes

veya

az aks nodepool show \

–resource-group <RESOURCE_GROUP> \

–cluster-name <AKS_NAME> \

–name <SYSTEM_POOL_NAME> \

–query enableAutoScaling

sonucu true değeri döndürmesi gerekir. Bu değeri görüyorsanız System node pool yapısı için autoscale konfigürasyonunu sağlamış olursunuz.

Genel olarak kullanıcılar tarafından rastlanan hata mesajları ya da senaryolar olabilmektedir. Autoscaler mekanizmasının çalışmadığı durumlar olabilir. Autoscaler’ın çalışmadığı durumda ilk olarak bu özelliğin etkinleştirilip etkinleştirilmediğine bakabilirsiniz. Pod Pending durumu genel olarak karşılaşılan başka bir durum olabilir. Pod Pending durumunda yapı maksimum count sınırına ulaşmış olabilir. Bu gibi durumlarda max count yapısını arttırmalısınız. Yapınız üzerinde node oluşmayan durumlarda meydana gelebilir. Node oluşmaması durumu genellikle vCPU kotasının yetersiz olduğunu göstermektedir. Bu sorun özelinde ilk olarak Azure kota limitlerini kontrol etmelisiniz. Son olarak cluster yapınızda scale down gerçekleşmeyen durumlarda olabilir. Bu hatanın oluşması durumunda pod distribution budget durumunu kontrol etmelisiniz. PDB yapılandırmasını da gözden geçirerek soruna müdahele edebilirsiniz.

Azure Kubernetes Services ortamlarında system node pool üzerinde Cluster Autoscaler’ın etkinleştirilmesi, yalnızca node sayısının otomatik olarak arttırılıp azaltılmasını sağlamakla kalmaz, aynı zamanda yüksek erişebilirliğin sağlaması, operasyonel sürekliliğin devamı, kaynak ve maliyet optimizasyonun sağlanması, kullanıcı ya da admin müdahelesi olmadan otomasyonun gerçeklemesi gibi olanakları sağlar. Böylelikle üretim ortamlarında daha kararlı Kubernetes yapılarının altyapısını da oluşturmaktadır.

Faydalı Olması Dileğiyle…

Bu konuyla ilgili sorularınızı https://forum.mshowto.org linkini kullanarak ulaşacağınız forum sayfamızda sorabilirsiniz.

Referanslar

www.mshowto.org

TAGs: Azure Policy, Azure Monitor, Activity Log, Action Group, Alert Rule, Alert Name, Subscription, Policy Assignment, Management Group, Azure Portal, Azure Kubernetes Services, Cluster Autoscaler, System node pool, CoreDNS, Metrics Server, Azure CNI, User Node Pool

Bu İçeriğe Tepkin Ne Oldu?
  • 0
    harika_
    Harika!!
  • 0
    be_enmedim
    Beğenmedim
  • 0
    _ok_iyi
    Çok iyi
  • 0
    sevdim_
    Sevdim!
  • 0
    bilemedim_
    Bilemedim!
  • 0
    olmad_
    Olmadı!
  • 0
    k_zd_m_
    Kızdım!

Uluslararası Kıbrıs Üniversitesi Bilişim Sistemleri Mühendisliği bölümü mezunuyum. 2010 yılından beri Bilgi Teknoloji sektörünün içerisindeyim. Şu anda Türkiye'nin önde gelen bankalarından birinde Sistem Uzmanı olarak çalışmaktayım.

Yazarın Profili
İlginizi Çekebilir

Bültenimize Katılın

Tıklayın, üyemiz olun ve yeni güncellemelerden haberdar olan ilk kişi siz olun.

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir