Tek bir konteyner çalıştırmak kolaydır. Onlarca konteyneri birden çok sunucuda, çökünce yeniden başlatarak, yük arttıkça çoğaltarak ve kesintisiz güncelleyerek çalıştırmak zordur. Kubernetes bu ikinci işi yapan sistemdir.
Temel fikir: bildirim kipi
Kubernetes’e adım adım ne yapacağını söylemezsiniz; ne istediğinizi söylersiniz.
“Bu uygulamadan üç kopya çalışsın” dersiniz. Kubernetes mevcut durumu sürekli izler ve istenen duruma yaklaştırır. Bir kopya çökerse yenisini başlatır. Bir sunucu düşerse üzerindeki iş yükünü başka sunuculara taşır.
Bu döngüye uzlaşma denir ve sistemin tamamının çalışma mantığıdır. Siz hedefi yazarsınız, o farkı kapatır.
Aynı yaklaşımın altyapı tarafındaki karşılığı kod olarak altyapıya nereden başlanır rehberinde ele alınıyor.
Küme neyden oluşur
İki tür makine vardır.
Denetim düzlemi kararları verir: hangi iş yükü nerede çalışacak, mevcut durum ne, ne değişmeli. Küme durumunu tutan veri deposu da buradadır ve kümenin tek gerçek kaynağıdır — yedeklenmesi kritik olan şey de odur.
Çalışan düğümler asıl iş yükünü taşır. Her düğümde bir aracı çalışır; denetim düzleminden aldığı talimatla konteynerleri başlatır ve durumlarını geri bildirir.
Yönetilen bulut hizmetlerinde denetim düzlemi sağlayıcı tarafından işletilir; siz yalnızca düğümlerle ilgilenirsiniz. Kendi kümesini kuranlar için denetim düzleminin erişilebilirliği ayrı bir tasarım işidir.
Pod: en küçük birim
Kubernetes konteynerleri doğrudan çalıştırmaz; pod içinde çalıştırır.
Pod, birlikte yaşayan bir ya da birkaç konteynerin sarmalıdır. Aynı poddaki konteynerler ağ ad alanını ve depolama birimlerini paylaşır; birbirlerine yerel adresten ulaşırlar.
Çoğu podda tek konteyner bulunur. Birden çok konteyner, ancak gerçekten ayrılamaz olduklarında bir araya konur — günlük toplayıcı ya da vekil gibi yardımcı bileşenler.
Pod geçicidir: silinir, yeniden oluşturulur ve IP adresi değişir. Bu yüzden pod’lara doğrudan bağlanılmaz.
Bir pod başlamadığında teşhis sırası pod başlamıyor rehberinde.
Dağıtım ve ölçekleme
Pod’ları elle oluşturmazsınız; bir Deployment tanımlarsınız. O da istenen kopya sayısını korur ve güncellemeleri yönetir.
Yeni bir sürüm yayımladığınızda Deployment kopyaları kademeli değiştirir: birkaç yeni pod başlatır, sağlıklı olduklarını doğrular, sonra eskileri kapatır. Kesintisiz güncelleme budur.
Sağlık doğrulaması burada belirleyicidir. Hazırlık yoklaması tanımlı değilse Kubernetes henüz hazır olmayan bir pod’a trafik gönderir ve güncelleme sırasında hata görülür.
Yatay ölçekleyici, kaynak kullanımına göre kopya sayısını otomatik ayarlar — ve bunu isteğin yüzdesi üzerinden hesaplar. Sınır ve istek değerlerinin nasıl seçileceği istek ve sınır rehberinde.
Servis: kalıcı adres
Pod’ların IP’si değiştiği için araya bir Service girer. Service sabit bir ad ve adres sunar, arkasındaki sağlıklı pod’lara trafiği dağıtır.
Küme içinden erişim için ClusterIP yeterlidir. Dışarıya açmak için LoadBalancer ya da bir Ingress denetleyicisi kullanılır; ikincisi tek bir giriş noktası arkasında çok sayıda servisi toplar ve daha ucuzdur.
Erişim sorunlarının katman katman elenmesi Service, Ingress ve NetworkPolicy rehberinde.
Yapılandırma ve sırlar
Uygulama ayarları imaja gömülmez; ConfigMap ile dışarıdan verilir. Böylece aynı imaj her ortamda çalışır.
Sırlar için ayrı bir nesne türü vardır, ama öntanımlı olarak yalnızca base64 ile kodlanır — şifrelenmez. Gerçek koruma için depodaki şifrelemenin açılması ve erişimin daraltılması gerekir.
Manifest yazarken atlanan alanları görmek için Kubernetes manifest üreteci aracı, YAML’ın kendi tuzakları için YAML doğrulayıcı aracı var.
Ad alanları ve kotalar
Tek bir küme genelde birden çok ekip ya da ortam tarafından paylaşılır. Ad alanı, kaynakları mantıksal olarak ayıran sınırdır: aynı isimli iki nesne farklı ad alanlarında yan yana yaşayabilir.
Ama ad alanı tek başına bir güvenlik sınırı değildir. Gerçek ayrım için üç şey daha gerekir: rol tabanlı erişim ile kimin neye dokunabileceğini belirlemek, kaynak kotası ile bir ekibin kümenin tamamını tüketmesini engellemek, ve ağ politikası ile ad alanları arası trafiği kısıtlamak.
Üçü kurulmadan açılan bir ad alanı, yalnızca isim düzeninden ibarettir. Kotanın nasıl hesaplanacağı Kubernetes kaynak planlayıcı aracında görülebilir.
Ne zaman gerekmez
Kubernetes karmaşıklık getirir ve bu karmaşıklığın bir bakım maliyeti vardır. Her ortam bunu hak etmez.
Tek bir uygulamayı iki sunucuda çalıştıran bir ekip için basit bir konteyner çalıştırıcısı ya da yönetilen bir uygulama platformu genelde yeterlidir ve çok daha az bilgi gerektirir.
Kubernetes’in karşılığını verdiği yer şudur: çok sayıda hizmet, sık dağıtım, değişken yük ve birden çok ekip. Bu koşullar yoksa getirdiği yük, çözdüğü sorundan büyük olabilir.
Konteyner ile sanal makine arasındaki temel ayrım sanal makine mi konteyner mi yazısında.
Kısaca
Kubernetes, istenen durumu tarif ettiğiniz ve farkı onun kapattığı bir küme işletim sistemidir. Pod en küçük birimdir, Deployment kopyaları ve güncellemeleri yönetir, Service kalıcı adres sağlar.
Gücü ölçek ve otomasyondadır; bedeli öğrenme ve işletme yüküdür. Küçük ve durağan ortamlarda bu takas genelde işe yaramaz.