Kubernetes'e Giriş ve Kubernetes'in Çalışma Prensipleri

Kubernetes'e Giriş

Virtualization 1.0 hipervizor ile sanal makineler ortaya çıkmıştır.

Container teknolojisi 2.0 olarak biliniyor. Container teknolojisi hipervizor teknolojisinden daha verimlidir. Çünkü işletim sistemi yerine çok daha küçük olan container üzerinde çalışır. Minimum olması gereken processler den oluşur.

Docker condainer dünyasının VMWare’i oluyor.

Docker imajları Container olarak çalışıyor.

Docker kerneldan bağımsız olarak uygulamalar çalıştırıyor. Küçük yazılımlar container halinde host docker engine üzerinde deploy edip kompakt ve ölçeklenebiliyor.

 


 

Container kalabalıklığını yönetebilmek için orkestrasyon araçları ortaya çıkmıştır. En popüler olan kubernetes dir. Çoklu instance yapılarak bunların yönetilmesini sağlar. Bu teknoloji Google tarafından ortaya çıkan open source bir teknolojidir.

 

Kubernetes’de Master (Kontrol paneli) ve Node (Worker) var. İdealde 1 master 1 den fazla node kullanılır.

  1. Önce uygulama geliştirilip container haline dönüştürülür.
  2. Daha sonra YAML veya JSON manifest dosyası (Deployment) objesi oluşturulur.
  3. Oluşturulan deployment dosyası k8s api-server’a gönderilir ve böylece uygulama ayağa kalkmış olur.

 

Master Komponentleri:

kube-api-server: k8s’in beynidir.

cluster store (etcd): k8s’in hafızası (key-value)’dır.

kube-controller-manager: Kontrolördür. Kontroler işlerini yapar.

kube-scheduler: Organizasyon (operasyon işleri) yapar.

 

Node Komponentleri:

kubelet: Kubernetes master üzerinden node’a erişilmesini sağlayan agent dır.

container-engine: Konteyner yöneticisi (docker)’dir.

kube-proxy: Load balancing ve diğer network işlerini yapar.

 

 

Pod Nedir?

Docker için container ne ise kubernetes için de pod aynı şeydir. Podların içinde container çalışır.

Pod ölçekleme birimidir. (instance sayısı)

1 Pod 1 Node üzerinde çalışır. 1 den fazla Node üzerinde çalışamaz.

 

Deployment Nedir?

Bir yaml veya json olarak tanımlanabilir.

Rest objeleridir.

Versiyonlanabilir.

2 angular 3 mysql ayağa kaldır şu versiyonda olsun gibi.

Bir kere hazırlanıp birden fazla ortama deploy edilebilir.

Master üzerindeki api-server üzerinden oluşturulur.

 

Service Nedir?

Kubernetesin kendi bir networkü var.

Podların kendilerine has IP adresleri olabilir. Sabit IP ve DNS özelliği ..

Örneğin 4 nodelu database instance var ve front end bunlara erişmek istiyorsa bu servis load balancing yaparak bunlardan birine yönlendirebilir. Sadece sağlıklı podlara yönlendirme yapılır. Default TCP protokolü üzerinde çalışır.

 

 

Master’a Genel Bakış

Fiziksel, VM veya Cloud gibi herhangi bir host üzerinde çalışabilir.

Cluster’a göz kulak olur. (Nelerin çalışması gerekiyor vs)

Workload (yük) ayarlamaları, yaşam döngüsü, ölçekleme ve upgrade işlemlerinden sorumludur.

4 komponentten oluşur.

Kube-api-server:

En çok kullanacağımız komponenttir. Kuebernetes için beyin görevi görür. Api (Rest) üzerinden fonksiyonları expose eder yani dış dünyaya açar. Json veya yaml dosyaları vasıtasıyla kullanılır. 443 https üzerinden çalışır.

$kubectl komut satırı (tool) ile komutlar gönderilir.

 

Cluster store (etcd):

Kubernetes’in hafızasızıdr. Açık kaynak teknolojisidir. Key-value veri çiflerini saklar.

Kalıcı saklama alanıdır. Cluster’a ait state ve config bilgilerini barındırır.

Master üzerindeki tek statefull kısımdır.

 

Kube controller manager:

Kontrolör görevi görür. Koordinasyonu sağlar.

Hemen hemen her fonksiyon/işlem için bir kontroller olabilir. (endpoints, namespace, replication vb)

Arzulanan hal (desired state) denilen pozisyonu kontrol eder. Örneğin: 3 tane mysql db olsun dersek bu stateden biri giderse hemen 3. makinenin oluşturulmasını sağlar.

 

Kube scheduler:

Operasyonel işleri yürüten organizatördür.

Api-server’dan gelen yeni pod yaratma görevleri için hazırda bekler.

Örneğin Pod yaratılacak bunun gidip hangi node üzerinde yaratılmasını vs yapar.

Nodelara workload yük atamasından sorumludur.

 

 

Node’a Genel Bakış

Master yönetim amaçlı çalışırken Node Cluster’ın çalışan (work) gücüdür.

Fiziksel, sanal veya cloud makine olabilir.

Master tarafından nodeların yönetilmesi ve nodeların kendi üzerindeki podları yönetebilmek için bazı servisleri barındırırlar.

Nodeun en önemli şeyi container runtimedır.

3 komponentten oluşur.

 

kubelet: Node agent için kullanılır.

Node üzerinde çalışan kubernetes ajan programıdır.

Node’u cluster’a register etmeye yarar.

Master ile sürekli iletişim halindedir. Api-server’dan gelen direktifleri bekler ve yerine getirir.

Pod oluşturmak için kullanılır.

Node üzerinde pod çalışabilmesi için sağlıklı (healthy) durumda olmalıdır.

 

container-engine: Konteynerları yönetmek için kullanılır.

Pluggable (kaldırılıp, değiştirilebilir) yapıdadır.

Genelde docker container kullanılır.

Containerları start-stop etmek için kullanılır.

 

kube-proxy: Load balancer gibi network işleri için kullanılır.

Node üzerindeki her bir pod bir IP adresine sahiptir.

Node içinde overlay network mimarisi var.

Load balance üzerinden gelen yük dengelemeyi podlar üzerinde yapar.

Örneğin 3 front-end angular ve 4 back-end database olsun. Ön yüz ile arka araftaki db arasında yük dengeleme network yönetimi gibi işler için bir servis tanımlanması gerekir.

 

Master - Node Arasındaki İletişim

Master ve Node arasındaki iletişim api-server ve kubelet işbirliği ile sağlanır.

Api-server masterdaki beyin görevini görüyordu. Kubelet node üzerinde api-serverdan gelen işleri yerine getirir.

Api-server podlardaki loglara erişmek, port yönlendirmek ve podlara erişmek için kubelet’i kullanır.

Api-server ile node, pod ve servisler arasındaki iletişim secure (https) değildir.

 


Kubernetes’in Çalışma Prensipleri

Kubernetes’in Faydaları:

Örneğin önyüzde 3 angular arkada 4 database’in sürekli ayakta kalması isteniyor. Sistem yöneticisinin bunu sürekli manuel veya başka bazı toollar ile kontrol etmesini sağlaması yerine tüm bu görevleri yürütmek için kubernetes görevi devralır. Örneğin bir db çöktü otomatik olarak node üzerinde yeniden db oluşturulmasını ayağa kalkmasını ve arzu edilen 4 database nodeunun sürekli ayakta olmasını sağlar.

 

Bir Deployment Nasıl Yapılır?




Öncelikle bir deployment için kubectl komutu kullanılır. Bu komut aracılığıyla kubernetes’in beyni olan api-server ile konuşulur.

$kubectl create –f deployment.yaml

Deployment.yaml veya json ile api-server’a deployment talebi iletilir. Deployment kontroller (kontroller manager üzerinde) devreye girer. Yaml dosyasında kaç tane replica belirtilmişse bu replica set’e göre replication kontroller çalıştırılır. Replication control tarafından podların kaç tane olması gerektiği bilgileri cluster-store (etcd) üzerinde saklanır. Daha sonra kube-scheduler devreye girer. Buraya kadar olan tüm işlemler master üzerinden yapılır.

Daha sonra kube-scheduler ile node üzerindeki agent olan kubelet ile iletişime geçilir. Kubelet container-engine devreye alır ve container engine üzerinden kaç tane container gerekiyorsa bu containerler ayağa kaldırılır. Son olarak kube-proxy devreye girer ve endpointler IP table’a kaydedilir.

Ayağa kalkan her bir pod/container için bir ip adresi atanır. 3 angular 4 db için bu IPlerin bilgileri vs kube-proxy tarafından yönetilir.

Share:
spacer

Hiç yorum yok:

Yorum Gönder