Kubernetes’in Mimarisi Nasıldır?
Merhaba,
Bu içeriğimizde, bir önceki Kubernetes Nedir? Temel Kavramları Nelerdir? başlıklı makalemizde konu edindiğimiz Kubernetes teknolojisinin mimarisel yapısını değerlendirecek ve bu minvalde Kubernetes’in kritik bileşenlerini de masaya yatırıyor olacağız.
Kubernetes Mimarisi
Kubernetes, Master Node (Control Plane) ve Worker Node‘lardan oluşan client-server mimarisiyle birlikte gelen bir teknolojidir. Bu iki yapı arasındaki etkileşim, sistemin hem merkezi olarak yönetilmesini hem de distributed bir şekilde çalışmasını sağlamaktadır.
Control Plane; API Server, controller management, scheduler ve etcd database gibi sistemin yönetim bileşenlerini barındıran ve tüm karar verme, orkestrasyon ve durum yönetimi gibi süreçlerden sorumlu olan cluster’ın beynidir.
Worker Node‘lar ise uygulamaların konteyner’larının çalıştığı fiziksel ya da sanal makinelerdir. Master Node ile iletişimi sağlayan kubelet aracılığıyla yönetilmekte ve ağ trafiğini düzenleyen kube-proxy bileşenini içererek, Docker gibi bir container runtime’ı kullanıp konteyner’leri yürütmektedir.
Kubernetes Component’leri
Kubernetes mimarisini derinden anlamak ve sistem yönetiminde ilerleyebilmek için sistemin hem merkezi olarak yönetilmesini hem de dağıtık bir şekilde çalışmasını sağlayan Control Plane Component ve Worker Node Component yapılarını hususi olarak incelemekte fayda görmekteyim.
Control Plane Component
Control Plane, temel olarak bir cluster’ın genel sağlığını yönetmemize yardımcı olan çeşitli bileşenlerin bir koleksiyonudur. Misal olarak; yeni Pod’lar oluşturmak, var olanları yok etmek ya da Pod’ları ölçeklendirmek vs. gibi işlevler bu component üzerinden cereyan etmektedir. Bu component içerisindeki alt bileşenler ise aşağıdaki gibidir;
- kube-apiserver (Kube-API Server)
API Server, tüm Kubernetes isteklerinin geçtiği ana giriş noktasıdır. Bir başka deyişle Kubernetes API’sini dışa açan bir tür gateway işlevi gören bileşendir diyebiliriz. Çünkü, tüm sistemde Control Plane ile kullanıcılar, diğer bileşenler ve dış client’lar arasındaki köprüyü kurmakta ve iletişimi sağlamaktadır.API Server’ın ana görevi, gelen istekleri doğrulamak, yetkilendirmek, geçerli hale getirmek ve durumu etcd veri deposuna yazmak veya okumaktır. Misal olarak; bir kullanıcının Kubernetes’e
kubectlCLI komutu ile bir talimat gönderdiğini varsayalım. Bu talimat süreçte şu seyirde ilerleyecektir;kubectltalimatı, http/https üzerinden API Server’a REST çağrısı yapacaktır.- API Server, client’ın kim olduğunu doğrulayacaktır. (Authentication)
- Kullanıcının bu talimat doğrultusunda istenilen işlemi yapmaya yetkisinin olup olmadığı denetlenecektir. (Authorization)
- Özellikle bu istek ‘Admission Controllers’ tarafından politika ihlali var mı yok mu kontrol edilecektir.
- Devamında istek şemaya uygun mu, gerekli alanlar eksiksiz mi diye kontrol edilecektir.
- API Server geçerli bulduğu taktirde etcd’ye yeni nesne durumunu yazacaktır.
- Nihai olarak tüm süreç başarılıysa client’a işlem sonucu JSON formatında döndürülecektir.
Bu süreçten de anlaşılacağı üzere, gelen istekleri doğrulaması ve geçerli olduğu taktirde uygun süreçlere iletmesinden dolayı API Server, bir gatekeeper (kapı bekçisi) olarak çalışma sergilemektedir. Çünkü, Kubernetes’te hiçbir istek doğrudan cluster’a iletilmemekte, mutlaka API Server üzerinden geçmektedir.
- kube-scheduler
API Server, bir Pod’un zamanlanması (scheduling) için bir istek aldığında bu isteği Scheduler’a iletecektir. Scheduler, cluster’ın verimliliğini artırmak amacıyla Pod’un hangi Node üzerinde çalışacağına CPU, RAM vs. gibi kaynak durumlarını ve toleration gibi faktörleri dikkate alarak ‘akıllı’ biçimde karar verecektir. - controller-manager
controller-manager, cluster’ın kontrol döngüsünün farklı yönlerini yöneten controller’ları çalıştırmaktan sorumlu bir alt bileşenidir. Bu controller’lar arasında, belirli bir uygulamanın istenen sayıda kopyasının (replica) çalıştığından emin olan Replication Controller ve Node’ların mevcut durumlarına göre ‘ready’ ya da ‘not ready’ olarak işaretlenmesini sağlayan Node Controller yer almaktadır. - etcd
Kubernetes’in key-value veri deposudur. Cluster’ın state’inde meydana gelen değişiklikler burada saklanmaktadır. Scheduler ve diğer süreçlere, mevcut kaynaklar ile cluster’ın genel durumu hakkında bilgi vererek adeta cluster’ın ‘beyni’ gibi işlev görmektedir.
Worker Node Components
Bu component’ler ise Kubernetes cluster’ının asıl yükünü çeken Node’lardır. Her bir Node, birden fazla Pod barındırabilir ve her Pod’un içinde bir veya birden fazla konteyner çalışabilmektedir. Her Node üzerinde, içindeki Pod’ların zamanlanması ve yönetimi için kullanılan aşağıdaki üç temel süreç bulunmaktadır;
- Container Runtime
Pod’ların içindeki konteyner’leri çalıştıran alt sistemdir. Docker, containerd veya CRI-O gibi runtime’lar kullanılabilir.Yani kısaca, konteyner’lerin fiilen çalıştırılmasından sorumlu bileşendir.
- Kubelet
Kubelet, hem container runtime ile hem de Node’un kendisiyle etkileşime giren bir süreçtir. API Server’dan aldığı talimatlara göre Pod’ları oluşturmaktan, yönetmekten, durumlarını denetlemekten ve bir konteyner içeren Pod’un başlatılmasından sorumludur.Kubelet için Node üzerinde Pod’ların yaşam döngüsünü yöneten bir agent’tır diyebiliriz.
- Kube-Proxy
Kube-Proxy ise servislerden ve diğer bileşenlerden gelen isteklerin uygun Pod’lara yönlendirilmesinden sorumlu bir işleve sahip bileşendir.
Addons Plug-in
Kubernetes eklentileri, cluster’ın işlevselliğini artıran ve genellikle DaemonSet, Deployment gibi Kubernetes kaynakları biçiminde kurulan eklenti bileşenleridir. Bu eklentiler genellikle kube-system namespace’i içinde konuşlandırılır ve cluster düzeyinde yetenekler sağlayarak Kubernetes’in local özelliklerini genişletir ya da bir başka deyişle Kubernetes çekirdeğini tamamlar.
Aşağıda bazı temel Kubernetes eklentileri ve işlevleri izah edilmektedir;
- CoreDNS
Kubernetes cluster’ında ad çözümleme (name resolution) hizmeti sunan esnek ve genişletilebilir bir DNS sunucusudur. Service discovery ve network routing’in verimli bir şekilde gerçekleşmesini sağlamaktadır. - KubeVirt
Konteyner’lerin yanı sıra sanal makinelerinde Kubernetes ortamında çalıştırılmasına olanak sağlamaktadır. Böylece hem sanallaştırılmış uygulamaların hem de konteyner tabanlı uygulamaların tek bir birleşik yönetim platformu üzerinden kontrol edilmesine imkan tanımaktadır. - ACI (Application Containerization Interface)
ACI, farklı ortamlar arasında konteyner’lerin entegrasyonunu ve yönetimini kolaylaştırır. Bu sayede uygulamaların taşınabilirliği (portability) ve ölçeklenebilirliği (scalability) artırılmış olur. - Calico
Kubernetes cluster’ları için güvenli ve yüksek performanslı ağ iletişimi sağlayan bir ağ politika motorudur (network policy engine) Hem ağ politikalarının uygulanmasını (policy enforcement) destekler hem de gelişmiş yönlendirme yetenekleri sunar.
Yaygın Kubectl Talimatları
Son olarak, Kubernetes cluster’ıyla etkileşim kurabilmek için ileriye dönük bazı yaygın talimatları inceleyerek içeriğimizi noktalayabiliriz.
- Node’ları Görüntüleme
- Pod Yönetimi
- Service İşlemleri
- Kaynak İşlemleri
Nihai olarak;
Böylece, Kubernetes teknolojisinin mimarisel anatomisini incelemiş ve özellikle yapısındaki Control Plane ve Worker Node bileşenlerini detaylıca değerlendirerek Kubernetes’in altyapısına dair teorik bilgi edinmiş bulunuyoruz. Bir sonraki içeriğimizde Kubernetes aracılığıyla konteynerleştirme süreçlerini inceleyecek ve az da olsa pratiksel olarak deneyimlerde bulunuyor olacağız.
İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…








