Kubernetes Nedir?Kubernetes Komponentleri Nelerdir?
Kubernetes hem beyan temelli yapılandırmayı hem de otomasyonu kolaylaştıran, container iş yüklerini ve hizmetleri yönetmek için oluşturulmuş,taşınabilir ve genişletilebilir açık kaynaklı bir platformdur. Kubernetes Google tarafından GO dilinde geliştirilmiş Cloud Native Computing Foundation(CNCF) tarafından desteklenen mevcut konteyner haline getirilmiş uygulamalarınızı otomatik deploy etmek, sayılarını arttırıp azaltmak gibi işlemler ile birlikte yönetmenizi sağlayan bir Konteyner kümeleme (container cluster) aracıdır.
Kubernetes Modüler Yapısı:
- Kubernetes tamamen modüler bir yapıda tasarlanmış olup bu şekilde kurgulanmıştır. Kubernetes bütün özelliklerinin içinde olduğu her işi yapan tek bir uygulamadan oluşmuyor.Bunun yerine mümkün olan her koşulda major özellikleri ayrı ayrı komponentlere bölünmüş olup bu sayede her modül sadece kendi işine odaklanıyor.
Kubernetis’de önemli özelliklerinden bir tanesi ise biz kubernetise istediğimiz yapıyı söylüyoruz ve kubernetes bunu bizim için oluşturuyor.Sonrasında da bu yapıyı gözlemliyor eğer yapı bizim beyan ettiğimiz yani deklare ettiğimiz durumun dışına çıkarsa da Kubernetes otomatik olarak bunu düzenliyor ve bizim istediğimiz konfigürasyona geri döndürüyor. Bu özelliği bir örnekle açıklamak istiyorum.
Biz kubernetise nginx:latest imajından bir yapı oluşturmasını isteyelim ve sistem genelinde’de 10 tane container çalışacak diyelim dış dünyaya’da 80 portundan yayınlanacağını deklare edelim.(Desired State yani istenilen durum).Kubernetes bizim istediğimiz bu yapıyı oluşturduktan belli bir süre sonra containerlardan birisi bir şekildi indi diyelim kubernetes bu durumu hemen fark edip belirttiğimiz özelliklerde bir container oluşturup istenilen durum ile mevcut durumu birbirine eşitleyecektir.
Kısacası Kubernetes açık kaynak,modüler yapı,beyan temelli çalışma ve otomatizasyon özelliklerine sahip popüler bir container orchestration aracıdır.
Kubernetes Komponentleri Nelerdir?
Bu bölüme geçmeden önce bu bölümün daha iyi anlaşılması için sizlere bir örnek vermek istiyorum.
- Bir şirketimizin olduğunu düşünelim.Şirketimizin bir yönetim departmanı olsun bir de üretim departmanı.Yani fabrikanın yönetimi ile ilgilenenler yönetim departmanında, işçiler,üretim araçları,makineler yani canlı veya cansız her obje üretim departmanında çalışıyor olsun.Öncelikle üretim departmanına bir göz atalım.Bu departmanda ürünlerimizi ürettiğimiz makinelerimiz var her makinenin başında ise bir ustabaşı duruyor ve o makinenin kontrolünden sorumlu o makinede ne üretilecekse yönetim kısmından ustabaşına bildiriliyor ustabaşı ise bu üretilecek ürünü üretecek işçiyi getirip bu makinede çalıştırmaya başlıyor.Yani ustabaşının tüm görevi işçileri ilgili makinelerle yerleştirmek ve durumlarını gözlemek.Ustabaşının hemen yanında ise lojistikten sorumlu bir görevli duruyor.Bu görevlinin görevi ise o makinelere dışarıdan erişilmesini işçilerin birbirleriyle haberleşmesini sağlıyor.Şimdi şirketimizin yönetim kısmına geçelim.Şirkete adım attığımız an bizleri kapıda bir güvenlik ve danışma karşılıyor olsun.Şirket içinden veya şirket dışından gelen tüm iletişim bu danışmadan geçmek zorundaymış gibi hayal edelim.Danışmanın ana görevi gelen tüm istekleri almak isteği yapan birimin istediği şeye yetkisinin olup olmadığını kontrol etmek ve eğer yetkisi varsa isteği kayıt altına almak yani danışma şirket içi iletişimin kalbi konumunda.Tekrar ediyorum şirket içerisinden veya dışarıdan her türlü iletişim buradan geçmek zorunda. Danışmanın tam arkasında ise bir arşiv panosu durduğunu hayal edelim.Danışma gelen bütün istekleri kontrol ettikten sonra bu panoda kayıt altına alıyor kısacası şirketle alakalı tüm bilgiler mevcutta ne kadar üretim yapıldığı kaç kişinin çalıştığı kaç makinenin olduğu aklımıza şirketle alakalı gelebilecek tüm bilgiler burada saklanıyor.Şirketimizde bir diğer birimde üretim planlama birimi az önce bahsettiğim panoyu danışma ve güvenliğin izniyle sürekli izliyor eğer kayıtlarda yeni bir ürünün üretilmesine yönelik bir talimat görürse hemen bu talimatı alıyor sonrasında tüm makinelere bakıyor içlerinden bu talimattaki ürünü üretebilecek özellikte olanı seçiyor bunlardan en uygununu belirliyor ve o işe uygun işçinin o makinede üretilmesini sağlıyor.Şirketimizde bulunan son birim ise vardiya amirliği.Burada 4 farklı insan çalışıyor bunların her biri aynı işi yapıyor ama hepsinin sorumlu olduğu ayrı bir yer var.Bir kişi sürekli panoyu gözlerken diğer bir kişi ise sorumlu olduğu yapıları kontrol ediyor.Yani şöyle anlatayım işçilerden sorumlu olan kişi sürekli panoyu gözlüyor bir makinede 10 işçi çalışacak bilgisi panoda yazıyor ise üretim kısmını gözlüyor ve 10 işçinin çalışıp çalışmadığını kontrol ediyor eğer işçilerden birisi bir nedenle makinenin başından ayrılırsa hemen bunu tespit ediyor ve hemen bunu düzeltmek için devreye giriyor ve o makinenin başına bir işçi gönderiyor yani 10 işçi çalışacak hale getiriyor.Yani her birinin bir görevi var kimi makineleri gözlerken bir diğeri panoyu gözlüyor ama aslında hepsinin yaptığı iş aynı hepsi temelde panoda yazılanla mevcut durum örtüşüyor mu bunu kontrol ediyor ve aynı değilse aynı olması için gerekli düzenlemeleri yapıyorlar.Şimdi bu anlattıklarımı bir bütün halinde ele alalım.Şirketimizin bağlı olduğu bir genel merkez olduğunu düşünelim ve bu genel merkezden şirkete yeni bir üründen 2 adet üretilmesi için talimat geldiğini varsayalım.Şirkete dışarıdan veya içeriden gelen tüm iletişimin güvenlik ve danışmadan geçmesi gerektiğini biliyoruz.Danışma bu talimatı alıyor talimatı gönderen kişinin gerçekten o kişi olup olmadığını kontrol ediyor.Sonrasında talimata bakıyor talimatı gönderen kişinin talimatta yazılanları isteme yetkisi olup olmadığını kontrol ediyor.Eğer bu adımlar başarılıysa danışma bu isteği panoya yazıyor.Üretim planlamanın danışmadan izin alarak panoyu sürekli gözlemlediğini söylemiştik.Panoya yazılan yeni talimatı görüp 2 adet yeni ürün üretilmesi gerektiğini görüyorlar. Hemen bu ürünlerin üretilebileceği makineleri tespit ediyorlar.Ardından bu tespitlerine en uygun makineyi seçip panoya yazıyorlar.5 ve 10 numaralı makinelerde 2 işçi çalışmalı.Danışma bu bilgiyi ilgili makinelerin usta başlarına bildiriyor.Her makinenin ustabaşı belirlenen özelliklerde ürünün üretilebilmesi için işçileri makine başına koyuyor ve çalıştırmaya başlıyor.Ardından işçilerin çalışmaya başladığını ve diğer bilgileri resepsiyona bildiriyor ve panoya ekliyorlar.Bu sırada lojistikten sorumlu görevliler bu işçilerin iletişimlerini ve koordinasyonlarını sağlamaya başlıyorlar.Ardından vardiya amirliği devreye giriyor onlarda resepsiyondan aldıkları izin ile panoyu gözlüyorlar her bir vardiya amirliği görevlisi sorumlu olduğu alanlarla ilgili mevcut durumları ve olması gereken durumları panodan kontrol ediyorlar.Bu ikisi arasında fark oluşursa bu farkı düzeltmek için gerekli işlemleri yapıyorlar.Tüm bunlar belirli düzen içerisinde efektif şekilde çalışıyor.Yani istediğimiz ürünü üreten bir şirket var ama bu şirket dışarıdan tekil bir yapı gibi gözükse de aslında birçok alt komponentin bir arada uyum içerisinde çalışması neticesinde oluşuyorlar.
Yukarıda verdiğim örnekten de tahmin edeceğiniz üzere aslında bütün bunlar bir kubernetes komponentini temsil ediyor.
Yönetim → Control Plane veya Master Nodes
- Danışma → apiserver(APi)
- Pano → etcd (veri deposu)
- Vardiya Amirliği → controller-manager
- Üretim Planlama → scheduler
yönetim komponentlerini temsil ediyor.
Üretim → Worker Nodes
- Makineler →containerlarımızın koştuğu worker nodelarımızı
- Ustabaşı → kubelet
- Lojistik Elemanı → kube-proxy
üretim komponentlerini temsil ediyor.Şimdi bu komponentleri daha yakından tanıyalım.
-
1-) apiserver(Api): Kubernetes control plane’in en önemli bileşeni ve giriş noktasıdır. Diğer tüm komponentlerin ve node bileşenlerinin direkt iletişim kurabildiği tek komponenttir.
-
2-) etcd: Tüm cluster verisi,metadata bilgileri ve Kubernetes’de oluşturulan tüm objelerin bilgilerinin tutulduğu anahtar-değer (key-value) veri deposudur.
-
3-) scheduler: Yeni oluşturulan yada bir node ataması yapılmamış podları izler ve üzerinde çalışacakları bir node seçer.
-
4-) controller-manager: Mantıksal olarak her controller ayrı bir süreçtir ancak karmaşıklığı azaltmak için hepsi tek bir binary olarak derlenmiştir.Tek bir process olarak çalışırlar.Bu contorllerlardan bazıları şunlardır:
- Node Controller
- Job Controller
- Service Account & Token Controller
- Endpoints Controller
Controller-manager altındaki controllerlar kubernetes clusterın mevcut durumuyla ondan istenilen durum arasında fark olup olmadığını denetlerler. Apiserver aracılığıyla etcd’de saklanan cluster durumunu inceler ve eğer mevcut durumla istenilen durum arasında fark varsa bu farkı oluşturan kaynakları oluşturur,günceller gerekirse siler ve bu durumu eşitler.Siz kubernetes uygulamınızın 2 pod olarak çalışmasını istenilen durum olarak bildirdiğiniz ve kubernetes’de bunu gerçekleştirdi. Uygulamanızın koştuğu 3 pod çalışmaya başladı fakat podlardan bir tanesi patladı. Controller-manager bu durumu algılayarak hemen bir pod oluşturulmasını sağlar. Bu sayede istenilen durum ile mevcut durum eşitlenir(desired state=current state).
-- İş yüklerimiz worker node’lar üzerinde çalışır. Worker node dediğimiz containerları üzerinde çalıştırdığımız yani podlarımızı çalıştırdığımız esas yerlerdir.Bunlar üzerlerinde containerd,docker gibi bir container runtime barındıran cluster’a dahil olan sistemlerdir.Her worker node’da 3 temel komponent bulunur.
İlk ve en önemli komponent containerların çalışmasını sağlayacak container runtime dır. Varsayılan olarak bu docker dır fakat kubernetes docker runtime desteğini bazı nedenlerden dolayı bırakıp containerd’ye geçmiştir. Containerd’de aslında docker’dan farklı değildir. Hatta docker’da container oluşturma, çalıştırma altyapısı olarak containerd’yi kullanır. Özetle her kubernetes worker node’unda containerların çalışması için bir container runtime bulunur.
-
1-) Container Runtime: Containerları çalıştırmaktan sorumlu olan yazılımlardır.
-
2-) Kubelet: Clusterdaki her node çalışan bir agenttir. Kubelet, apiserver aracılığıyla etcd’yi kontrol eder ve scheduler tarafından bulunduğu pod üzerinde çalışması gereken bir pod belirtildiyse kubelet bu podu o sistemde yaratır ve containerd’ye haber gönderir. Belirlenen özellikte containerın o sistemde çalışmasını sağlar.
-
3-) Kube-proxy: Oluşturulan podların TCP,UDP ve SCTP trafik akışlarını yönetir. Bu ağ kuralları cluster’ın içindeki veya dışındaki ağ oturumlarından podlarınızla ağ iletişimine izin verir.
Bu yazımda sizlere Kubernetes mimarisini ve komponentlerini en yalın ve sade şekilde anlatmaya çalıştım umarım sizde okurken keyif almışsınızdır bir başka yazımda görüşmek üzere…
Hocam kolay gelsin. WordPress olarak soracam ama diğer tüm uygulamalar için de geçerli sorum. Image indiriliyor container çalışıyor program çalışıyor. Bunların kurulduğu dizine nasıl bakabilirim dosyaları açabilir miyim? Aynı şey Google Cloud örneğin yol olarak neresidir.
Teşekkür ederim.
containerın içerisine girip ilgili dizinlere erişebilirsiniz harici olarakta eğer container oluştururken volume oluşturduysanız localinizdende erişebilirsiniz.