Kubernetes Mimarisi

Emir Ayhan
Kariyer.net Tech
Published in
2 min readAug 9, 2021

Sık sık duyduğumuz, makalelerde sürekli karşımıza çıkan ve kullanan kitlesi günden güne büyüyen hatta belli bir zaman sonra da teslim olduğumuz kubernetes hakkında ufak ufak notlar ve trick’ler paylaşıyor olacağım.

Öncelikle nedir bu “kubernetes efsanesi” buradan başlayalım.

Ne yapar; çalışan servisleri monitör eder, yük dengelemesi yaparak podlar üzerinde round robin çalışır, podlar rahatça kapatılabilir hızlıca açılabilir, podlar bir hata aldığında veya kill olduğunda kendiliğinden tekrardan başlatabilir ve bu sayede sıfır kesinti ile uygulamalar hayatına devam eder. Aslında tamamen bir container orkestrasyonudur.

Kubernetes Mimarisi

K8S deki bazı terminolojik ifadelerden bahsediceğim. K8S master ve worker dediğimiz nodeların bir bütün halinde çalışması ile görevini sürdürür.

etcd => Key-value şeklinde çalışan bir nosql database diyebiliriz. K8S üzerindeki kalıcı olan main configurationları burada tutar.

kube-apiserver => K8s in beyni diyebiliriz. Master içerisinden veya nodelar üzerinden gelen tüm istekler buradan yönetilir. İstek dediğimiz zaman client side isteklerden bahsetmiyorum. Buradaki istekler bizlerin kubernetes’i configure ederken terminal üzerinden çalıştıracağımız “kubectl” komutundaki isteklerden bahsediyorum.

kube-scheduler => Bir podun hangi nodelar üzerinde koşacağına karar verir. Kubeleti tetikler ve ilgili pod içerisinde istediğimiz container oluşur ve ayağa kalkar.

kube-controller => tamamen uygulamayı izler. Yani nodeları izler ve api server ile herhangi birşey bildirildiğinde nodeun istenilen forma getirilmesini sağlar.

Buraya kadar k8s master node üzerindekileri konuştuk şimdi worker üzerinde bulunan terminolojik ifadelerden bahsedelim.

kubelet => her node üzerinde çalışan bir agenttır. bu agentlar containerın pod içerisinde çalışmasnı sağlar. Api serverden gelen isteklere karşı sürekli api serverı listen eder. Podu ayağa kaldırır ve podun bilgilerini api servera iletir. bir podun ayakta olup olmadığını da kontrol eder. Yani bir nebze healtcheck yapıyor da diyebiliriz. Node içindeki metrikleri api servere iletir.

kube-proxy => k8s servis ile endpointler arasındaki erişebilirliği sağlamak için nodelar üzerinde network kurallarını ayarlar. Ayrıcada tüm servisin altındaki podlara load balance özelliği kazandırır.

pod => k8s in yönettiği en küçük birimdir. Bir pod içerisinde birden fazla container çalışabilir. ama bu önerilmemektedir. Neden diye soracaksınızdır. Mesela bir pod içerisinde iki tane uygulama çalıştırdık. biri X olsun, biri de Y uygulaması olsun.

Herhangi bir yük geldi ve X uygulamasını scale etmen gerekiyor. Podu scale ettiğimizde pod sayısını arttırıyoruz. Bu sırada pod içinde çalışan Y uygulaması da aynı şekilde gereksiz yere memory allocate edecek gereksiz yere scale etmiş olacağız.

Pod öldüğünde ise aynı pod tekrardan ayağa kalkmaz. Onun yerine aynı imajdan yeni bir pod ayağa kalkar. O yüzden podlar üzerinde static bir IP olmaz.

Stay tuned! :)

--

--