Kubernetes nasıl çalışır?

Tamamlandı

Başarıyla yapılandırılmış bir Kubernetes yüklemesi, Kubernetes sistem mimarisinin iyi bir şekilde anlaşılmasına bağlıdır. Burada Kubernetes yüklemesini oluşturan tüm bileşenlere bakacaksınız.

Bilgisayar kümesi nedir?

Küme, birlikte çalışmak ve tek bir sistem olarak görüntülemek için yapılandırdığınız bir bilgisayar kümesidir. Kümede yapılandırılan bilgisayarlar aynı tür görevleri işler. Örneğin hepsi web sitelerini, API’leri barındırır veya işlem bakımından yoğun işleri çalıştırır.

Bir küme, bu görevleri zamanlayıp denetlemekten sorumlu olan merkezi bir yazılım kullanır. Görevleri çalıştıran bir kümedeki bilgisayarlara düğüm, zamanlama yazılımlarını çalıştıran bilgisayarlara kontrol düzlemi adı verilir.

Diagram of a computer cluster that shows how a task is distributed via the control plane to three nodes and the interaction between the nodes.

Kubernetes mimarisi

Önceden hatırlayacağınız gibi düzenleyici, uygulamaları dağıtıp yöneten bir sistemdir. Ayrıca kümenin birlikte çalışan ve tek bir sistem olarak görüntülenen bir bilgisayar kümesi olduğunu da öğrendinsiniz. Uygulamalarınızı dağıtıp işlem kaynağı ihtiyaçlarıyla ilgili değişikliklere yanıt vermek için düzenleyici ve küme yazılımı olarak Kubernetes’i kullanırsınız.

Diagram of a Kubernetes cluster architecture that shows the components installed on the control plane and the worker nodes.

Bir Kubernetes kümesi en az bir ana düzlem ve bir veya daha çok düğüm içerir. Hem kontrol düzlemleri hem de düğüm örnekleri fiziksel cihazlar, sanal makineler veya buluttaki örnekler olabilir. Kubernetes’teki varsayılan konak işletim sistemi, Linux tabanlı iş yüklerine yönelik varsayılan destek içeren Linux’tur.

Küme düğümlerinde Windows Server 2019 veya üzerini kullanarak Microsoft iş yüklerini de çalıştırabilirsiniz. Örneğin, insansız hava aracı izleme uygulamasındaki veri işleme hizmetinin belirli Windows işletim sistemi API çağrılarını kullanan bir .NET 4.5 uygulaması olarak yazıldığını varsayalım. Bu hizmet, yalnızca Windows Server işletim sistemi çalıştıran düğümler üzerinde çalıştırılabilir.

Şimdi hem kontrol düzlemlerine hem de çalışan düğümlerine ve her birinde çalışan yazılıma daha ayrıntılı bir şekilde bakın. Her bileşenin rolünü ve kümede bileşenlerin çalıştırıldıkları yerleri anlamak, Kubernetes’i yükleme söz konusu olduğunda size yardımcı olur.

Kubernetes kontrol düzlemi

Kubernetes kümesindeki kontrol düzlemi, Kubernetes’teki işlevsellik düzenlemesini yöneten hizmetlerden oluşan bir koleksiyonu çalıştırır.

Öğrenme perspektifinden baktığımızda, Kubernetes işlevselliğini keşfettiğinizden test ortamınızda tek bir kontrol düzlemi çalıştırmanız mantıklıdır. Ancak Azure Kubernetes Service (AKS) gibi üretim ve bulut dağıtımlarında tercih edilen yapılandırmanın üç ile beş arası çoğaltılmış denetim düzlemi içeren yüksek kullanılabilirlikli bir dağıtım olduğunu fark edebilirsiniz.

Dekont

Kümenin durumunu sürdürmek için kontrol düzleminin belirli yazılımları çalıştırması onu diğer işlem iş yüklerinden dışlamaz. Ancak genellikle kritik olmayan ve kullanıcı uygulaması iş yüklerinde kontrol düzlemini dışlamak istersiniz.

Kubernetes düğümü

Kubernetes kümesindeki bir düğüm, işlem iş yüklerinizi çalıştırdığınız yerdir. Her düğüm, API sunucusu aracılığıyla kontrol düzlemiyle iletişim kurarak düğümdeki durum değişikliklerini bildirir.

Kontrol düzlemi üzerinde çalışan hizmetler

Kubernetes, kontrol düzlemi üzerinde çalışan birden çok yönetim hizmetine sahiptir. Bu hizmetler küme bileşeni iletişimi, iş yükü zamanlaması ve küme durumu kalıcılığı gibi özellikleri yönetir.

Diagram of a Kubernetes cluster architecture that shows the components installed on the control plane.

Aşağıdaki hizmetler bir Kubernetes kümesinin denetim düzlemini oluşturur:

  • API sunucusu
  • Yedekleme deposu
  • Scheduler
  • Denetleyici yöneticisi
  • Bulut denetleyici yöneticisi

API sunucusu nedir?

API sunucusunu Kubernetes kümenizin denetim düzleminin ön ucu olarak düşünebilirsiniz. Kubernetes’teki bileşenler arasındaki tüm iletişim bu API üzerinden yapılır.

Örneğin, kullanıcı olarak Kubernetes kümenizin API sunucusunda komut çalıştırmanıza olanak tanıyan adlı kubectl bir komut satırı uygulaması kullanırsınız. Bu API’yi sağlayan bileşene kube-apiserver adı verilir ve kümenizdeki ölçeklendirmeyi desteklemek için bu bileşenin birkaç örneğini dağıtabilirsiniz.

Bu API, komutları ve YAML tabanlı yapılandırma dosyalarını gönderebileceğiniz RESTful API’yi kullanıma sunar. YAML, programlama dilleri için insan tarafından okunabilen bir veri serileştirme standardıdır. Bir Kubernetes kümesi içindeki tüm nesnelerin amaçlanan durumunu tanımlamak için YAML dosyalarını kullanırsınız.

Örneğin, kümedeki uygulamanızın örnek sayısını artırmak istediğinizi varsayalım. Yeni durumu YAML tabanlı bir dosyayla tanımlar ve bu dosyayı API sunucusuna gönderirsiniz. API sunucusu yapılandırmayı doğrular, kümeye kaydeder ve son olarak uygulama dağıtımlarında yapılandırılan artışı uygular.

Yedekleme deposu nedir?

Yedekleme deposu, Kubernetes kümenizin tamamlanmış yapılandırmasını kaydettiği kalıcı bir depolama alanıdır. Kubernetes, etcd adlı yüksek kullanılabilirliğe sahip, dağıtılmış ve güvenilir bir anahtar-değer deposu kullanır. Bu anahtar-değer deposu, geçerli durumu ve kümenizin içindeki tüm nesnelerin istenen durumunu depolar.

Resmi Kubernetes kılavuzuna göre, bir üretim Kubernetes kümesinde yüksek kullanılabilirlik için etcd veritabanının üç ila beş örneği olması gerekir.

Dekont

etcd işlevi veri yedeklemesinden sorumlu değildir. etcd verilerini yedeklemek için etkili bir yedekleme planının yapılmasını sağlamak sizin sorumluluğunuzdadır.

Zamanlayıcı nedir?

Zamanlayıcı, tüm düğümler arasında iş yüklerinin atamasından sorumlu bileşendir. Zamanlayıcı, kümeyi yeni oluşturulan kapsayıcılar için izler ve bunları düğümlere atar.

Denetleyici yöneticisi nedir?

Denetleyici yöneticisi, API sunucusu üzerinden bir küme için yapılandırılmış denetleyicileri başlatıp izler.

Kubernetes, kümedeki nesne durumlarını izlemek için denetleyicileri kullanır. Her denetleyici, kümedeki olayları izlerken ve yanıtlarken sonlandırıcı olmayan bir döngüde çalışır. Örneğin düğümleri, kapsayıcıları ve uç noktaları izleyen denetleyiciler vardır.

Denetleyici, nesnenin durumunu belirlemek için API sunucusuyla iletişim kurar. Geçerli durum nesnenin istenen durumundan farklıysa, denetleyici istenen durumdan emin olmak için eylemde bulunur.

Kümenizde çalışan üç kapsayıcıdan birinin yanıt vermeyi durdurduğunu ve başarısız olduğunu varsayalım. Bu durumda denetleyici, uygulamalarınızın her zaman kullanılabilir olmasını sağlamak için yeni kapsayıcılar başlatıp başlatmaması gerektiğine karar verir. İstenen durum her zaman üç kapsayıcı çalıştırmaksa yeni bir kapsayıcı çalıştırılmak üzere zamanlanır.

Bulut denetleyici yöneticisi nedir?

Bulut denetleyici yöneticisi, küme bir bulut ortamında çalışırken kümenizin temelindeki bulut teknolojileriyle tümleşir. Bu hizmetler yük dengeleyiciler, kuyruklar, depolama vb. olabilir.

Düğüm üzerinde çalışan hizmetler

İş yüklerinin nasıl çalıştığını denetlemek için Kubernetes düğümünde çalışan birkaç hizmet vardır.

Diagram of a Kubernetes cluster architecture that shows the components installed on a Kubernetes node.

Aşağıdaki hizmetler Kubernetes düğümü üzerinde çalışır:

  • Kubelet
  • Kube-proxy
  • Kapsayıcı çalışma zamanı

Kubelet nedir?

Kubelet, kümedeki her düğümde çalışan ve API sunucusundan gelen iş isteklerini izleyen bir aracıdır. İstenen iş biriminin çalışır ve sağlıklı durumda olduğundan emin olur.

Kubelet, düğümleri izler ve düğümler üzerinde zamanlanan kapsayıcıların beklendiği şekilde çalıştığından emin olur. kubelet yalnızca Kubernetes'in oluşturduğu kapsayıcıları yönetir. Geçerli düğüm işi çalıştıramıyorsa işi diğer düğümlerde çalıştırmak üzere yeniden zamanlamaktan sorumlu değildir.

Kube-proxy nedir?

Kube-proxy bileşeni yerel küme ağından sorumludur ve her düğümde çalışır. Her düğümün benzersiz bir IP adresine sahip olmasını sağlar. Ayrıca, trafik yönlendirmesini ve yük dengelemesini işlemek için iptables ve IPVS kullanarak kuralları uygular.

Bu ara sunucunun kendisi DNS hizmetleri sunmaz. CoreDNS tabanlı bir DNS kümesi eklentisi önerilir ve varsayılan olarak yüklenir.

Kapsayıcı çalışma zamanı nedir?

Kapsayıcı çalışma zamanı, bir Kubernetes kümesinde kapsayıcıları çalıştıran temel yazılımdır. Çalışma zamanı kapsayıcı görüntülerini getirmekten, başlatmaktan ve durdurmaktan sorumludur. Kubernetes; Docker, containerd, rkt, CRI-O ve frakti dahil ancak bunlarla sınırlı olmamak üzere çeşitli kapsayıcı çalışma zamanlarını destekler. Çok sayıda kapsayıcı çalışma zamanı türüne yönelik destek, Kapsayıcı Çalışma Zamanı Arabirimi (CRI) temellidir. CRI, kubelet’in kullanılabilir kapsayıcı çalışma zamanıyla iletişim kurmasına olanak veren bir eklenti tasarımıdır.

AKS'deki varsayılan kapsayıcı çalışma zamanı, endüstri standardı bir kapsayıcı çalışma zamanı olan kapsayıcıdır.

Kubernetes kümesiyle etkileşim kurma

Kubernetes, kümenizi yönetmeye yarayan kubectl adlı bir komut satırı aracı sağlar. Kümenin kontrol düzlemine komut göndermek veya API sunucusu aracılığıyla tüm Kubernetes nesneleri hakkındaki bilgileri getirmek için kubectl kullanırsınız.

kubectl, aşağıdaki yapılandırma bilgilerini içeren bir yapılandırma dosyası kullanır:

  • Küme yapılandırması, kümeyle ilişkilendirilmiş bir küme adı, sertifika bilgisi ve hizmet API uç noktası belirtir. Bu tanım, tek bir iş istasyonundan birden çok kümeye bağlanmanızı sağlar.
  • Kullanıcı yapılandırması, yapılandırılmış kümelere erişirken kullanıcıları ve bu kullanıcıların izin düzeylerini belirtir.
  • Bağlam yapılandırması, kümeleri ve kullanıcıları kolay bir ad kullanarak gruplandırıyor. Örneğin, geliştirme ve üretim kümelerinizi tanımlamak için bir “dev-cluster” ile “prod-cluster” adlarını kullanabilirsiniz.

Komut satırı söz diziminin bir parçası olarak doğru bağlamı sağlayarak birden çok kümeye bağlanmak için kubectl hizmetini yapılandırabilirsiniz.

Kubernetes podları

Pod, Kubernetes’te çalışan bir uygulamanın tek bir örneğini temsil eder. Kubernetes üzerinde çalıştırdığınız iş yükleri kapsayıcılı uygulamalardır. Docker ortamının aksine, kapsayıcıları doğrudan Kubernetes üzerinde çalıştıramazsınız. Kapsayıcıyı pod adı verilen bir Kubernetes nesnesine paketlersiniz. Pod, Kubernetes’te oluşturabileceğiniz en küçük nesnedir.

Diagram of a pod with a website as the primary container.

Tek bir pod, bir veya daha çok kapsayıcı grubunu tutabilir. Ancak, pod genelde aynı uygulamadan birkaç tane içermez.

Pod, paylaşılan depolama ve ağ yapılandırması hakkında bilgiler ve paketlenmiş kapsayıcılarının nasıl çalıştırıldığı hakkında bir belirtim içerir. Kümenizde çalışan podların bilgilerini tanımlamak için pod şablonları kullanırsınız. Pod şablonları, pod dağıtımlarını yönetmek için yeniden kullandığınız ve diğer nesnelere dahil ettiğiniz YAML ile kodlanmış dosyalardır.

Diagram of pod with a website as the primary container and a supporting container. The node has both an assigned IP address and a localhost host address.

Örneğin, kubernetes kümesine bir web sitesi dağıtmak istediğinizi varsayalım. Uygulamanın kapsayıcı görüntülerini ve yapılandırmasını belirten bir pod tanım dosyası oluşturursunuz. Ardından, pod tanım dosyasını Kubernetes’e dağıtırsınız.

Çözümdeki tek bileşen olarak web sitesi içeren bir web uygulaması olması ihtimali düşüktür. Bir web uygulaması genellikle bazı veri deposu türlerini ve diğer destekleyici öğeleri içerir. Kubernetes podları, birden çok kapsayıcı içerebilir.

Sitenizin bir veritabanı kullandığını varsayalım. Web sitesi ana kapsayıcıya, veritabanı ise destekleyici kapsayıcıya paketlenmiştir. Birden çok kapsayıcı bir ortam üzerinden birbirleriyle iletişim kurar. Kapsayıcılar bir konak işletim sistemi, ağ yığını, çekirdek ad alanı, paylaşılan bellek ve depolama birimi için hizmetleri içerir. Pod, bu hizmetlerin türünü uygulamanıza sağlayan korumalı alan ortamıdır. Pod, kapsayıcıların atanmış IP adreslerini paylaşmalarına olanak verir.

Çok sayıda düğüm üzerinde çalışan pek çok pod oluşturabileceğinizden, bunları tanımlamak zor olabilir. Pod tanımlarken belirttiğiniz dize etiketlerini kullanarak podları tanıyabilir ve gruplandırabilirsiniz.

Kubernetes podunun yaşam döngüsü

Kubernetes podları dağıtma, çalıştırma ve podları güncelleştirme yöntemlerinizi etkileyen ayrı bir yaşam döngüsüne sahiptir. Kümeye pod YAML bildirisini göndererek başlarsınız. Bildirim dosyası kümeye gönderilip kalıcı hale getirildikten sonra, podun istenen durumunu tanımlar. Zamanlayıcı, podu çalıştırmak için yeterli sayıda kaynakla sağlıklı bir düğüme zamanlar.

Diagram that shows the lifecycle of a pod.

Podun yaşam döngüsündeki aşamalar şunlardır:

Aşama Açıklama
Beklemede Pod kümeyi kabul eder, ancak kümedeki tüm kapsayıcılar ayarlanmaz veya çalıştırılmaya hazır değildir. Beklemede durumu, bir pod'un zamanlanmayı beklediği zamanı ve kapsayıcı görüntülerini indirmek için harcanan zamanı gösterir.
Çalışıyor Podun içindeki tüm kaynaklar hazır olduktan sonra pod çalışır duruma geçer.
Başarılı Oldu Pod, amaçladığı görevi tamamlayıp başarıyla çalıştıktan sonra başarılı duruma geçer.
Başarısız oldu Podlar çeşitli nedenlerden dolayı başarısız olabilir. Poddaki bir kapsayıcı başarısız olabilir ve diğer tüm kapsayıcıların sonlandırılmasına neden olabilir veya pod kapsayıcıları hazırlanırken bir görüntü bulunamadı. Bu tür durumlarda pod Başarısız durumuna geçebilir. Podlar, Bekleme durumundan veya Çalışıyor durumundan başarısız duruma geçebilir. Belirli bir hata, bir podu tekrar beklemede durumuna taşıyabilir.
Bilinmiyor Podun durumu belirlenemezse, pod Bilinmeyen durumdadır.

Podlar bir denetleyici, kontrol düzlemi veya kullanıcı onları açık bir şekilde kaldırana kadar kümede tutulur. Bir pod silindiğinde, hemen ardından yeni bir pod oluşturulur. Yeni pod, pod bildirimine göre tamamen yeni bir örnek olarak kabul edilir, tam bir kopya değildir, bu nedenle silinen poddan farklıdır.

Küme podun durumunu veya dinamik olarak atanmış yapılandırmayı kaydetmez. Örneğin podun kimliğini veya IP adresini kaydetmez. Bu boyut, podları nasıl dağıtacağınızı ve uygulamalarınızı nasıl tasarlayacağınızı etkiler. Örneğin, podlarınız için önceden atanmış IP adreslerine güvenemezsiniz.

Kapsayıcı durumları

Aşamaların, podun yaşam döngüsünde bulundukları yerin bir özeti olduğunu unutmayın. Podları araştırırken, podun içindeki kapsayıcılarınızı izlemek için kümenin kullandığı üç durum vardır:

Durum Açıklama
Bekleniyor Çalışmadığında veya sonlandırıldığında bir kapsayıcının varsayılan durumu ve kapsayıcının içinde bulunduğu durumdur.
Çalışıyor Kapsayıcı, sorun olmadan beklendiği şekilde çalışıyor.
Sonlandırıldı Kapsayıcı artık çalışmıyor. Bunun nedeni, tüm görevlerin bitmiş olması veya kapsayıcının bir nedenden dolayı başarısız olmasıdır. Her iki durumda da hata ayıklamaya yönelik bir neden ve çıkış kodu bulunur.