Kubernetes Master Nedir?

Kubernetes containerların popülerleşmesi ile beraber teknoloji dünyasında containerlar için bir çok hizmet çıkıyor. Bunun en önemli sebeplerinden bir tanesi Docker ekosisteminin kendisinin de microservice yapısında olmasından kaynaklanıyor. Yani siz containların çalışması için docker engine kullanabilirsiniz ama onların loglanması ve monitor edilmesi için başka bir framework kullanabilirsiniz. Bu hizmetlerin bir çoğu Docker ekosisteminde bulunuyor fakat açık kaynak kod topluluğu birbirinden farklı yeni hizmetler sunmaya devam ediyor.

ilk olarak Google tarafından geliştirilen bir hizmettir. Daha sonrasında open source olarak herkesin kullanımına açılmıştır. Kubernetes servisi temel olarak container ekosisteminde microservice uygulamalarının orkestrasyonu için geliştirilmiş bir üründür. Günümüzün en önemli ve meşhur container yönetim ve orkestrasyon araçlarından bir tanesidir.

kubernetes cluster
kubernetes cluster

Kubernetes cluster’ ın özet görüntüsü yukarıda ki gibidir. Docker swarm da olduğu gibi master ve node şeklinde önemli iki bileşeni vardır.

Masterları clusterının kontrol merkezi olarak düşünebilirsiniz. Tüm cluster’ I yönetmekten, izlemekten, değişiklikler yapmaktan ve oluşan olaylara cevap vermekten sorumludur. Nodelar ise esas işi yapan bileşenlerdir. Yaptıkları işleri, durumlarını masterlara sürekli olarak iletirler.

Kubernetes altyapı olarak sadece çalışan işletim sisteminin Linux olmasını ister, onun haricinde Linux’ un hangi platformda çalıştığı ile ilgilenmez. Kubernetes clusterlarını VMWare, Azure, Amazon, Openstack, Google Cloud vs. gibi istediğiniz birçok platformda çalıştırabilirsiniz.

Kubernetes Masters Nedir?

Kubernetes Master içerisinde bir çok bileşen vardır fakat bunların hepsi tek sunucu da çalışırlar. Bunları bir den fazla Master kurarak High Available hale getirebilirsiniz.Genel olarak Master Nodelar üzerinde herhangi bir iş yükü çalıştırılması tercih edilmez. Çalıştırılacak iş yükleri nodular üzerinde çalıştırılırlar.

Kubernetes ile api server (kube-apiserver) ile haberleşiriz. Restful API JSON ile manifest(konfigurasyon) dosyaları kubernetes master’a iletilir. Docker da olduğu gibi Kubernetes de bir cluster store’ a sahiptir(KV). Cluster store da cluster durumu ve configurasyonu saklanır. Veritabanı olarak NoSQL bir yapı olan etcd kullanılır.

İçerisinde ki bir diper bileşen Controller Managerdır (kube-controller-manager). Bu bileşen sistemine verilen manifest dosyası ile desired state dediğimiz istenilen durumu korumak ve tüm konfigurasyonu istenilen durumda tutmaktan sorumludur (node sayıları, Enpointler, dns vs.)

Bir diğer bileşen ise scheduler servisidir(kube-scheduler). Bu servis işlemlerin zamanlaması için kullanılır ve nodelara görevler atar.

Tüm bu bileşenlere işlemleri daha önce de bahsettiğimiz gibi apiserver üzerinden erişiriz. Master ile tek iletişim aracımız apiserver’ımızdır. Biz JSON dosyaları hazırlayarak istediğimiz işlemleri kubectl komutları ile apiserver’ a iletiriz api server master içerisinde yukarıda bahsettiğimiz bileşenlere ilgili görevleri kendisi dağıtır.

Kubernetes Nodes Nedir?

Nodelar kubernetes ekosisteminde iş yüklerinin çalıştığı yerlerdir. Nodelar da Kubernetes Master da olduğu gibi bir çok bileşenden oluşturlar.Bu bileşenlerin en önemlisi kubelet‘ dir. Kubelet bir anlamda node’ un kendisidir. Node’ u bir agent olarak da düşünebiliriz. Node cluster’a kubelet ile üye olur. Podların başlatılmasından kubelet sorumludur. Ve node içerisinde ki olaylar için master’a bilgilerin iletilmesinden sorumludur.

Bir diğer bileşen ise container engine dir. Container engine container yönetiminden sorumludur. Containerların başlatılması, durdurulması, container imajlarının alınması vs. Kubernetes içerisinde iki container engine desteklenir, rkt ve Docker. Genellikle docker tercih edilir.

Bir diğer bileşen ise kube-proxy bileşenidir. Bu bileşen kubernetes network’ünden sorumludur. Pod IP adreslerini yönetir, load balancingden sorumludur. Pod içerisinde ki tüm kontainerlar tek IP yi paylaşırlar.

Kubernetes Pods Nedir?

Kubernetes sisteminde ki en atomik computing birimi Podlardır. Bunları sanallaştırma ekosisteminde ki sanal makinalar, docker ekosisteminde ki containerlar olarak düşünebilirsiniz. Nodelar ve Masterlar podları host etmek ve organize etmek için vardır.

Kubernetes’I tanımlarken container orkestrasyon servisi olarak tanımlamıştırk. Ekosisteminde containerlar podların içerisinde çalışırlar. Her container bir pod içerisinde çalışmak zorundadır. Bir pod içerisinde birden fazla container da çalışabilir fakat bu çok tercih edilen bir senaryo değildir. Çok özel bir ihtiyaç olamadığı zaman her pod bir container olarak düşünülebilir.

Pod pratikte herhangi bir şey çalıştırmaz. Podlar sadece container orkestrasyonunu kolaylaştırmak için bazı servisleri barındırır. Bunların tamamı containerların daha esnek, performanslı ve high available çalışması içindir.

Yukarıda bahsettiğimiz gibi her pod bir container olarak düşünülebilir. Çünkü dediğimiz gibi en atomic işlem birimlerimiz podlardır. Siz bir servisi scale etmek istiyorsanız yani fazla yükten dolayı gelen istekleri karşılamak için kaynak sayısını arttırmak istiyorsanız pod sayısını arttırırsınız. Pod içerisinde ki container sayısını değil. Unutmayalım bir pod içerisinde bir den fazla container özel mimariler için kullanılıyor.

kubernetes cluster
kubernetes cluster

Podlar yaşam süresi olan bileşenlerdir. Bir Pod da sorun olduğu zaman, replication controller bileşeni manifest dosyasında belirtilen tanıma göre aynı özelliklerde uygun bir node üzerinde bir pod oluşturulur. Bu oluşturulan pod tamamen yeni bir poddur. Dolayısı ile mevcut pod’un yeniden kullanılması söz konusu değildir.

kubernetes cluster
kubernetes cluster

Yukarıda ki resimde anlatıldığı gibi, veritabanı barındıran bir podda sorun oluyor ve pod cluster durumuna göre farklı bir node’da yeniden açılıyor. Bu tamamen yeni bir pod’dur.

Yukarıda anlattığımız resmi incelediğimiz zaman hemen bir sorun gözümüze çarpıyor, yeni oluşturulan pod’un IP adresi farklı. Aynı zamanda bu sadece sorun olduğu durumlarda geçerli bir durumda değildir. Container imaj da bir güncelleme yaptığınızda da bu güncelleme yeni bir pod ile devreye alınr. Veya scale-out ve scale-in durumlarında da aynı durum geçerlidir. Yeni oluşan podlar sürekli yeni IP ler ile oluşacaktır. Bu çok dinamik bir şekilde değişen microservis yapıları için ciddi bir sorun. Bu sorun kubernates sisteminde çok güzel ve esnek bir servis ile çözüm buluyor.

Kubernetes Services Nedir?

Yukarıda anlatılan ve yeni pod oluşumlarında sorun yaratan network problem orkestrasyon işlerimizi çok kolaylaştıran servis objeleri ile yapılır. Manifest dosyasında bir servis tanımı yapılır.

kubernetes cluster
kubernetes cluster

Bu load balancing kubernetes de çok kolay, esnek ve hızlı uygulanabilirşekilde çözülmüştür.

Kubernetes Labels Nedir?

Servisleri kendi ile eşleşen ve podlara koyulan etiketler ile load balancing mekanizmasını çalıştırır. Servis ve podlara birden fazla etiket koyulabildiği için dev/test ortamlarında prod ortamına geçişte oldukça basitleştirilmiştir.

kubernetes cluster
kubernetes cluster
Kubernetes cluster
Kubernetes cluster

Yukarıda gördüğünüz gibi servis kendi etiketleri ile eşleşen podlar arasında load balancing yapmaktadır. Bu etiketleme işlemi versiyonlar arası geçişlerde oldukça esnek bir yapı sunmaktadır.

Kubernetes Management, Images, Services, Pods Nedir?

Kubernates orkestrasyon ve pod yönetiminde manifest dosyaları aracılığı ile declarative bir şekilde yönetilir. Manifest dosyları JSON veya YAML dosyalarıdır. Kubernates üzerinde kuracağınız ortamın tüm konfigurasyonunu bu dosyalarda belirtirsiniz. Replication controller bu dosyaya göre ortamınızı düzenler.

Bu şekilde ortam sürekli istenilen configürasyon da çalışır(desired state).

kubernetes config
kubernetes config

Yukarıda görüldüğü gibi YAML dosyamızda kubernates üzerinde yapmak istediğimiz konfigürasyon declarative bir şekilde belirtilmiştir. Kubernates ortamımız bu şekilde kurulacak ve bu şekilde çalışması için gerekli controller sağlanacak. Yukarıda bahsettiğimiz kubernates bileşenleri bu konfigürasyonun bu şekilde çalışmasını sağlayacaklar.

Gördüğünüz gibi Kubernetes Container ekosistemine bir çok yenilik, kolaylık ve esneklik getirmekte. Bu anlamda kubernates şimdiden container ortamları için vazgeçilmez bir yönetim aracı olmuş durumdadır.

İyi çalışmalar dilerim..

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir