Kubernetes Bölüm 2: Mimari

Kubernetes cluster’ında iki tür node vardır: Kubernetes Master ve Kubernetes Node.

Kubernetes Node

Kubernetes Node worker, yani container’lar ile ilgili işler bunların üzerinde gerçekleştirilir. Cluster’ın iş yükü Node’lar üzerinde gerçekleşir.

Kubernetes Node üzerindeki bileşenler:

  • Kubelet
  • Kube-Proxy
  • Container Runtime

Container Runtime

Container Yönetiminden sorumludur. Container’ların durdurulması, başlatılması, container image’llerinin indirilmesi gibi tüm container işlemleri bu bileşenin sorumluluğundadır.

Kubernetes içinde birden fazla container engine desteklenmektedir. Docker bunlardan biridir ve genellikle Docker kullanılır; ama yanında rkt’de istenirse kullanılabilir.

Pod

Container Runtime içerisinde bulunur. Container’ların çalışma alanıdır. Sözlük anlamı balina sürüsüdür. Her bir container, bir Pod içerisinde çalışmak zorundadır; fakat bir Pod, birden fazla container barındırabilir.

Pod’lar normal şartlar altında herhangi bir işlem yapmazlar. Container yöeticisinin daha esnek, yedekli ve performanslı bir şekilde çalışması için bazı servisleri Pod’lar üzerinde barındırırlar.

Scale etme işlemi de yine Pod’lar ile olur. Kaynaklar yetersiz geliyor ise Swarm’da container artırıyorduk; ama Kubernetes üzerinde bu Pod sayısının artırılması ile oluyor.

Bir Pod, belirli bir yaşam süresine sahiptir, işleri bittiğinde sonlanırlar. Yine bir Pod’da sorun olması durumunda, aynı özellikteki bir başka Pod, uygun olan bir Kubernetes Node üzerinde ayağa kaldırılır. Bu sebeple bir Pod içerisinde birden fazla container varsa tümü bundan etkileneceğinde tavsiye edilen 1 Pod içerisinde 1 tane container çalıştırılmasıdır.

Kubelet

Kubernetes Node’lar üzerinde çalışan agent’tır. Kubernetes Node’ları, Kubelet sayesinde cluster’a dahil olabilmektedirler.

Pod’ların başlatılmasından sorumludur. Docker Engine ile konuşarak Pod’un ayağa kalkmasını sağlar ve bununla ilgili bilgileri Kubernetes Master’a iletir. Kubernetes Node üzerindeki tüm olayları da Kubernetes Master’a iletirler.

Kube-Proxy

Kubernetes networkünden sorumludur. Podlara verilecek ip adresleri Kube-Proxy üzerinden atanmaktadır. Aynı zamanda load balancing işlemlerini de gerçekleştirir. Ayrıca her bir Pod, 1 tane paylaşımlı ip’ye de sahiptir ve bu da Kube-Proxy aracılığı ile sağlanır.

Kubernetes Master (Control Plane)

Kubernetes Master, tüm cluster’ı yönetmek için kullanılır. Cloud, sanal sunucu veya fiziksel sunucu üzerinde barındırılabilir. Cluster üzerinde nelerin çalışacağına karar verir. Workload, objelerin yaşam döngüsü, ölçeklendirme ve upgrade işlemlerinden sorumludur.

Şimdi gelelim Kubernetes Master bileşenlerine.

Etcd (Store)

Kubernetes üzerinde kalıcı olarak saklanmak istenen tüm konfigürasyon, cluster durumu ve verilerinin tutulduğu depolama alanıdır. Open source, distrbuted, High Availibility modunda çalışabilir, key – value şekinde de verileri saklayan bir databasedir. Yönetim kısmındaki tek stateful kısımdır.

Scheduler

Yeni oluşturulan Pod’ların hangi node üzerinde çalışacağına karar veren bileşendir. Cluster içerisindeki Kurbernetes Node’Larının kaynak durumu, çalışma yoğunluğu gibi bilgileri takip etmektedir ve bu sebeple de uygun olan Kuberetes Node’una karar verebilmektedir.

Controller Manager

Controller sınıflarını çalıştıran, denetleyen bileşendir. Kubernetes sistemine verilern manifest dosyası içerisindeki veriler ile Desired State adı verilen istenilen durumu kontrol altına almakta ve korumaktadır. Böylece tüm konfigürasyon istenen seviyede tutulmaktadır. Kısacası geçerli durumu, istenen duruma çekmek için gerekli işlemleri yapar.

Bu işlemler için birçok controller kullanmaktadır:

  • Node Controller: Kubernetes Node’ları ayakta mı diye kontrol eder.
  • Replication Controller: Pod’ların olması gereken replica sayısında olup olmadığını kontrol eder ve gerekli sayıya çeker.
  • End Point Controller: Pod ve servislerin Endpointlerini oluşturmak için kullanılır.
  • Service Account &Token Controller: Yeni namespace’ler için standart hesapları ve API Access token’ları oluşturmaktadır.

API Server

Cluster’ın beyni olarak nitelendirilir. Uygulamaların birbirleriyle iletişim sağlamasına olanak vermektedir. Cluster içerisinden ve cluster dışından gelen tüm isteklerin yönetilmesi işini yapar. HTTPS yani 443 numaralı port üzerinden çalışır.

Kubernetes üzerinde yapılacak tüm işlemler kubectl komutu ile başlar. Bu komut işletildiğinde istek API Server’a iletilir, API Server sonucu işletir ve çıktısını geri döner.

Kubernetes üzerinde yapılacak işlemleri CLI ve GUI üzerinden yapabiliriz. Kubernetes ortamında CLI aracı Kubectl olarak geçmektedir.

Burada da ayağa kaldırılmak istenen proje (Deployment) YAML dosyası olarak verilir.

Şimdi Kubernetes üzerinde bir servis ayağa kaldırmak istediğimizde işlemler nasıl gerçekleşiyor ona bakalım:

  • Servis ayağa kaldırma komutu Kubectl ile API Server’a iletilir:
    # kubectl create -f deployment.yaml
  • API Server, talebi kontrol eder ve Etcd’ye kaydedilmesi için gönderir.
  • Etcd, kayıt işlemini gerçekleştirir ve sonucu API Server’a geri döner.
  • API Server, gelen talep için bir Pod oluşturulacağını Scheduler bileşenine iletir.
  • Scheduler, hangi Kubernetes Node’un talep için uygun olduğunu kontrol eder ve uygun olan Kubernetes Node bilgisini API Server’a iletir.
  • API Server, Pod ile ilgili kullanılacak Kubernetes Node bilgisini kaydetmesi için Etcd bileşenine iletir.
  • Etcd, kayıt işlemini yapar ve sonucu API Server’a iletir.
  • API Server, ilgili Kubernetes Node üzerinde çalışan Kubelet ile iletişim kurar.
  • Kubelet, Container Runtime ile iletişime geçer ve Pod ile birlikte container’ın ayağa kaldırılmasını söyler ve Pod ayağa kaldırılır.
  • Kubelet, Pod’un ayağa kaldırıldığını API Server’a iletir.
  • API Server, gelen bilgiyi Etcd bileşenine kayıt altına alması için iletir.
  • Etcd, kayıt oluşturulduğu bilgisini API Server’a iletir.
  • API Server, sonucu Kubectl aracına çıktı olarak iletir.

 

Data Science Earth

Data Science Earth ekibi, üst düzey Veri Bilim çözümleri üretmek amacı ile toplanmış akademisyenler ve uzmanlardan oluşmaktadır. Öncelikli olarak veri bilincini geliştirmeyi ve küreselleşen rekabet ortamında verinin gücünün doğru kullanılmasını sağlamayı amaçlamaktadır.

Sponsor

QuestionPro 35 farklı soru seçim özelliği ile anket çalışmalarımıza güç katmaktadır.