Kubernetes Nedir ve Nasıl Çalışır?☸️
Benim bir mikro hizmet uygulamam var. Uygulamanın geliştirme ve dağıtım sürecini kolaylaştırmak için uygulamayı konteynerize ettim. Uygulamanın boyutu arttıkça, konteyner sayısı da arttı. Konteynerleri yönetmek sorun haline geldi. Bu sorunu çözmek için araştırma yaptım.
Orkestrasyon araçları olarak adlandırılan araçlar, çoklu konteyner uygulamalarının geliştirme ve yönetim sürecini otomatikleştiren araçlardır. Kubernetes, bir orkestrasyon aracının bir örneğidir. Bu yazımda, Kubernetes’in temel bileşenlerini açıklayacağım.
Kubernetes Nedir?
Kubernetes, Yunanca kökenli bir kelime olup “dümenci”(helmsman) veya “pilot” anlamına gelir. K8s olarak da kısaltılarak kullanıldığını görebilirsiniz. Bu kısaltmanın nedeni, “k” ve “s” harfleri arasında 8 harf bulunmasıdır.
Kubernetes, Google tarafından Go programlama dili kullanılarak geliştirilmiş ve Cloud Native Computing Foundation (CNCF) tarafından desteklenen bir konteyner kümeleme (container cluster) aracıdır.
Kubernetes, çoklu konteyner uygulamalarını yönetmeye ve ölçeklendirmeye yardımcı olan bir orkestrasyon aracıdır. Kubernetes konteynerlerinizi podlara gruplar ve ardından bu podları farklı sunuculara dağıtır. Böylece uygulamalarınızın yüksek performanslı ve güvenilir bir şekilde çalışmasını sağlar.
Kubernetes (K8s) ile çalışmak beş ana adımdan oluşur:
- Bir uygulama geliştirin .
- Uygulamanızı kapsayıcı hale getirin .
- Bir kubernetes kümesi oluşturun .
- Kapsayıcınızı kümeye dağıtın .
- Kümeyi açığa çıkarın ve ölçeklendirin .
Temel bir Kubernetes Kümesi: İşçi Düğümler ve Yönetici Düğüm
- Düğüm, uygulamaların (podların) çalıştırıldığı fiziksel bir sunucu veya sanal makinedir. Bir Kubernetes kümesi, birbirine bağlı düğümlerin bir koleksiyonudur.
- Bir Kubernetes kümesi en az bir ana düğüm (master node) ve birkaç çalışma düğümünden (worker node) oluşur.
- İşçi düğümleri, konteynerlerin çalıştığı fiziksel veya sanal makinelerdir ve uygulama yükünü taşırlar ve yönetirler.
- Yönetici düğüm, Kubernetes kümesinin kontrolünü sağlar, podları planlar ve dağıtır, kaynakları tahsis eder ve uygulama durumunu yönetir.Yönetici düğüm, Kubernetes API sunucusunu çalıştırır ve kümedeki tüm işlemlerin yönetilmesinden sorumludur.
Her çalışma düğümünde bir “kubelet” bulunur. Kubelet, düğümler arasında iletişimi sağlar ve podların yönetiminden sorumludur.
Ana düğüm, çalışma düğümlerini kontrol eder ve yönetir. Bir ana düğümün bileşenleri şunlardır:
- API sunucusu: Kümeyle dış iletişim için bir giriş noktasıdır. Kümeyle yapılan tüm harici iletişim API sunucusu üzerinden gerçekleştirilir.
- Kontrolcü yöneticisi: Kümenin performansını izler ve düğümlerin sürekli çalışır durumda olmasını sağlar.
- Planlayıcı: Kümedeki podları ve düğümleri izler. Düğümlerin kapasitesine bağlı olarak podları farklı düğümlere atar.
- etcd: Bir depolama birimidir ve kümenin yapılandırma ayrıntılarını tutar.
Çalışma düğümleri ve ana düğümler, birbirleriyle sanal ağ üzerinden iletişim kurarlar.
Kubernetes Pod
- Pod, bir veya daha fazla konteynerin bir araya getirilmesidir. Bir pod genellikle sadece bir konteyner içerir, ancak sıkıca bağlı konteynerler olduğunda birden fazla konteyner içerebilir.
- Her bir podun bir sabit IP adresi vardır ve podlar, birbirleriyle iletişim için IP adreslerini kullanır.Bir Kubernetes servisi, podlara sabit bir IP adresi sağlar.
- Podlar geçicidir ve ölebilir/crash olabilir. Bu nedenle, bir podun bir kopyasını oluşturmak önemlidir. Bir pod kopyasını oluşturmak için bir taslak belirtilir, bu taslak bir dağıtım olarak adlandırılır.
- Kubernetes, podun ölmesi veya aşırı yüklenmesi durumunda replika eder ve yeniden dağıtır. Bu, uygulama süresinin azaltılmasına yardımcı olur.
Podlar bir sunucu veya sanal makinede çalışır. Bir Kubernetes mimarisinde, bu sunucular veya sanal makineler düğüm olarak adlandırılır.
Konteyner Gruplama: Kubelet,Pod’lar,Pod Yönetimi ve İletişim
- Kubelet: Her çalışma düğümünde bulunan kubelet, Kubernetes kümesindeki podların yönetiminden sorumlu olan bir bileşendir.
Pod Yönetimi: Kubelet, çalışma düğümlerinde çalışan podları yönetir. Podların oluşturulması, başlatılması, durumlarının izlenmesi, yeniden başlatılması gibi işlemleri kubelet gerçekleştirir.
İletişim: Kubelet, düğümler arasında iletişimi sağlar. Diğer kubeletlerle, ana düğümle ve Kubernetes API sunucusuyla iletişim kurarak küme üzerindeki podları senkronize eder.
Kaynak İzleme: Kubelet, çalışma düğümlerindeki kaynak kullanımını izler. CPU, bellek, ağ trafiği gibi kaynakları takip eder ve gerektiğinde podların kaynak taleplerini karşılamak için düğümdeki kaynakları ayarlar.
Sistem Durumu: Kubelet, düğümlerin sağlığını izler. Çalışma düğümlerinin durumunu sürekli kontrol eder ve düğümdeki sorunları tespit eder. Hatalı düğümlerle iletişimi keser ve küme performansını etkileyen sorunları önlemeye çalışır.
Pod Güvenliği (Secret): Kubelet, podların güvenliğinden sorumludur. Podların çalışma düğümleri üzerinde izole bir şekilde çalışmasını sağlar ve podlara yetki vermeden önce doğrulama ve yetkilendirme işlemlerini gerçekleştirir. Parola, kullanıcı, token gibi gizli bilgilerin güvenli bir şekilde depolanmasını sağlar. Bu bilgilere verilen isimlerle uygulama içinde kullanılabilir.
Bir poddan kaç tane olacağını belirlemek için ReplicaSet kullanılır. ReplicaSet, podların istenilen sayıda kopyasını sağlar ve scale etme veya azaltma işlemlerini gerçekleştirir.
Namespace, ortamları birbirinden izole etmek için kullanılır. Her bir namespace içinde pod’lar, servisler ve diğer Kubernetes kaynakları gruplandırılabilir.
Service, pod’ların ön tarafında konumlanır ve gelen istekleri karşılayıp arkaya pod’lara yönlendirir. Service, blue-green deployment, pod scaling gibi işlemleri kesintisiz olarak yapmayı sağlar.bu şekilde şifre veya diğer hassas bilgileri uygulamalarınızda yönetebilirsiniz.
Pekala, şimdi kapsayıcıyı oluşturalım!
Not: Bir Docker hesabına ve çalışan bir Docker kurulumuna ihtiyacınız olacak.
Kubernetes Çalışma Şekli
- Kubectl(kubernetes client) isteği API server ‘a iletir.
- API Server isteği kontrol eder etcd ‘ye yazar.
- etcd yazdığına dair bilgilendirmeyi API Server’a iletir.
- API Server ,yeni pod yaratılacağına dair isteği Scheduler ‘a iletir.
- Scheduler, pod ‘un hangi server’da çalışacağına karar verir ve bunun bilgisini API Server’a iletir.
- API Server bunu etcd ye yazar
- etcd yazdığına dair bilgiyi API Server’a iletir.
- API Server ilgili node’daki kubelet’i bilgilendirir
- Kubelet,Docker servisi ile ilgili docker soketi üzerindeki API’yi kullanarak konuşur ve konteyner’ı yaratır.
- Kubelet ,pod’un yaratıldığını ve pod durumunu API Server’a iletir.
- API Server pod’un yeni durumunu etcd’ye yazar.
Sonuç
Umarım Kubernetes hakkında yeterli fikir edinmişsinizdir. GitHub🐈⬛ veya LinkedIn üzerinden bağlantı kurabiliriz ve geri bildirimlerinizi, önerilerinizi gönderirseniz veya sorularınızı sorarsanız çok mutlu olurum, bana bir e-posta göndermeniz yeterli :) Faydalarını hızlı bir şekilde görecek ve aynı zamanda bir programcı olarak değerinizi artırmış olacaksınız.
Herhangi bir sorunuz veya öneriniz varsa, lütfen yorumlarınızı aşağıya bırakın. Okuduğunuz için teşekkürler!
İyi çalışmalar.
Referanslar
- Kubernetes Resmi Websitesi: https://kubernetes.io/
- Kubernetes Github Sayfası: https://github.com/kubernetes/kubernetes
- Kubernetes Dokümantasyonu: https://kubernetes.io/docs/home/
- Kubernetes: The Future of Deployment (Google Cloud): https://cloud.google.com/kubernetes-engine/kubernetes-comic/
- Kubernetes 101: Pods, Nodes, Containers, and Clusters (Red Hat): https://www.redhat.com/en/topics/containers/what-is-kubernetes
- Kubernetes Basics (Kubernetes.io): https://kubernetes.io/docs/tutorials/kubernetes-basics/