Kubernetes, kapsayıcılı uygulamaları bir makine kümesi üzerinde çalıştırır ve onları tanımladığınız durumda tutar. Bunu, işleri doğru makinelere yerleştirerek, trafiği doğru yerlere yönlendirerek ve hatalarla değişiklikleri izleyerek yapar.
Temel akış
1. Ne çalıştırmak istediğinizi siz tanımlarsınız
Çoğu Kubernetes iş yükü, belirtilen bir “istenen durum” ile başlar (nelerin çalışması gerektiği, kaç kopya olacağı ve nasıl kullanıma sunulacakları). Kubernetes, bildirim temelli yapılandırma ve otomasyon üzerine kuruludur.
2. Kubernetes bunun nerede çalışması gerektiğine karar verir
Kubernetes, kapsayıcıları kullanılabilir işlem kaynaklarına ve her kapsayıcının gereksinimlerine göre kümedeki makinelere zamanlar. Kapsayıcılar, Kubernetes’in bir makineye yerleştirdiği birim olan Pod’larda çalışır.
3. Kubernetes, gerçek durumu istenen durumunuzla sürekli karşılaştırır
Denetleyiciler kümeyi izler ve değişiklikleri yapmak için API sunucusunu kullanarak geçerli durumu istenen duruma yaklaştırmak için çalışır.
Kapsayıcı zamanlama ve günlük yönetim
Zamanlama, “bu nerede çalışmalı?” kararıdır.
1. Tek tek kapsayıcılar değil, Pod'lar zamanlanır
Kubernetes, kapsayıcıları Pod’lar halinde gruplandırır ve ardından bu Pod’ları makinelere yerleştirir.
2. Zamanlayıcı, Pod'ları uygun bir düğüme atar
kube-scheduler henüz atanmış Pod’ları arar ve onlar için bir düğüm seçer.
3. Düğüm aracıları Pod'ların çalışır durumda kalmasını sağlar
Her düğümde kubelet, Pod’ların çalıştığından emin olur (kapsayıcıları da buna dahildir).
Yük dengeleme ve hizmet bulma
Kapsayıcılar ve Pod’lar oluşturulabilir, taşınabilir veya değiştirilebilir. Bu yüzden uygulamaların birbirini bulmak için kararlı yöntemlere ihtiyacı vardır.
Hizmet bulma ve yük dengeleme yerleşik davranışlardır
Kubernetes, hizmet bulmayı yönetir ve yük dengeleme kullanır, böylece Pod’lar zaman içinde değişse bile trafik yönlendirilebilir.
Hizmetler, değişen bir Pod kümesi için kararlı bir adres sağlar
Hizmet API'si, bir veya daha fazla Pod tarafından desteklenen bir hizmet için kararlı bir IP adresi veya ana bilgisayar adı sağlar ve Kubernetes, destekleyen Pod’ları EndpointSlice nesneleri üzerinden izler.
Pod'lar değiştikçe trafik yönlendirmesi güncellenir
Bir hizmetin arkasındaki Pod’lar değiştiğinde, hizmet yönlendirmesi buna uyum sağlar. Böylece trafik geçerli arka uçlara ulaşmaya devam eder.
Uygulamaları ölçeklendirme (ve “istenen durum” neden önemlidir?)
Kubernetes, işlem kullanımına göre ölçeklendirme dahil olmak üzere iş yüklerini belirlediğiniz duruma doğru ölçeklendirebilir.
Yaygın ölçeklendirme fikirleri şunlardır:
Daha yüksek talebi karşılamak için daha fazla çoğaltma (daha fazla Pod).
Talep düştüğünde daha az çoğaltma.
Yerleştirme kararlarının CPU ve bellek ihtiyaçlarını yansıtması için kaynak izleme.
Bu, “istenen durum” modeline geri döner: Hedefi siz belirtirsiniz ve denetleyiciler buna ulaşmak için çalışmaya devam eder.
Kendi kendini onarma: Bir şey bozulduğunda ne olur?
Kubernetes, iş yükü durumunu ve kullanılabilirliğini korumayı amaçlayan kendi kendini onaran davranışları içerir. Bunlar:
Başarısız kapsayıcıların yeniden başlatılması (kapsayıcı düzeyinde yeniden başlatmalar).
İstenen çoğaltma sayısını korumak (kopya değişimi) için başarısız Pod’ların değiştirilmesi.
Düğümler kullanılamaz hale geldiğinde iş yüklerinin yeniden zamanlanması.
Trafiğin yalnızca iyi durumda olan Pod'lara gitmesi için başarısız Pod’ların hizmet uç noktalarından kaldırılması (hizmetler için yük dengeleme).
Kendi kendini onarma, kapsayıcı durumunu denetler ve sorun oluştuğunda onları yeniden başlatır veya çoğaltır.
Kubernetes KPI’larının rolü
Temel performans göstergeleri (KPI’lar veya ölçümler), küme durumunu ve iş yükü davranışını anlamak için kullanılır.
KPI’ların kaynağı
Kubernetes sistem bileşenleri, panolar ve uyarılar için yararlı olan ölçümler (Prometheus biçimi) üretir.
Ölçümler genellikle kube-apiserver, kube-scheduler, kubelet, kube-proxy ve kube-controller-manager gibi bileşenlerin /ölçüm HTTP uç noktasında kullanılabilir.
KPI’ların tespit etmenize yardımcı olduğu durumlara örnekler
Küme durumu sinyalleri (bileşen düzeyinde ölçümler ve hata desenleri)
İş yükü kararlılığı (örneğin, sık yeniden başlatmalar veya değişimler)
Kapasite baskısı (kaynak ayırma ile talep arasındaki ilişki ve bunun ölçeklendirme kararlarıyla bağlantısı)
Bunun günlük işlemlerde neden önemli olduğu
İzleme, ekiplerin küme kaynakları, Kubernetes API’si, kapsayıcılar ve günlükler hakkında daha eksiksiz bir görünüm elde etmesini sağlar. Bu da sorunlar ile düzeltmeler arasındaki geri besleme döngüsünü kısaltır.