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.
- Önce uygulama
geliştirilip container haline dönüştürülür.
- Daha sonra YAML
veya JSON manifest dosyası (Deployment) objesi oluşturulur.
- 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.
Hiç yorum yok:
Yorum Gönder