Windows 10 Üzerinde Docker Kurulumu

 Windows 10 üzerinde docker kurulabilmesi için sistem gereksinimleri:

Windows 10 64 bit işletim sistemi; Professional, Enterprise yada Education sürümü destekleniyor. Kurulum öncesinde Windows 10’un 2004 ve üzeri sürümü olmalı. Windows sürümünüz güncel değilse kurulum öncesi güncelleyin. Docker, Microsoft’un Windows 10 işletim sistemi için destek yaşam döngüsüne dayalı olarak Docker Desktop’ı destekliyor. Destek yaşam döngüsü (support lifecycle) erişimi için; https://support.microsoft.com/en-us/help/13853/windows-lifecycle-fact-sheet Windows 10 işletim sisteminde Hyper-V ve Containers özellikleri etkinleştirilmeli. Bilgisayarınızdaki işlemcinizin 64 bit ve SLAT (Second Level Address Translation) desteği olmalı. En az 4 GB RAM'e sahip olmalı. BIOS ayarlarında “Hardware Assisted Virtualization” ve “Data Execution Protection” seçenekleri etkinleştirilmiş olmalı. “Windows Subsystem for Linux” uygulaması kurulum öncesinde hazır olmalı. WSL2 kurulumu ve yapılandırılması Windows’a herhangi bir Linux dağıtımını yüklemeden önce, ilk olarak “Windows Subsystem for Linux” özelliğini etkin olmalı. Bu işlem için önce PowerShell’i yönetici olarak açın ve aşağıdaki komutu çalıştırın. dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart Kurulum işlemi tamamlandıktan sonra “Virtual Machine Platform” kurulumu için Powerhell’de aşağıdaki komut çalıştırılır. Kurulum işlemi başarılı olarak tamamlandıktan sonra işletim sistemini yeniden başlatın. dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart WSL2 Linux Kernel güncellemesi için “wsl_update_x64.msi” paketi kurulur. Bu paketi indirmek için adres: https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi WSL 2’yi varsayılan sürüm olarak ayarlayın bu işlem için: PowerShell’i yönetici olarak açın ve yeni bir Linux dağıtımı yüklerken WSL 2’yi varsayılan sürüm olarak ayarlanması için “wsl –set-default-version 2” komutunu çalıştırın. Docker kurmak için docker sitesindeki https://www.docker.com/get-docker adresinden docker windows kurulumu indirmek gerekiyor. Başlangıçta, Docker Desktop yükleyicisi bazı paketleri indirmeye başlıyor. “Configuration” sayfasında WSL 2 Özelliklerini etkinleştirilmesi ve masaüstüne kısa yol eklenmesi için ilgili seçenekler seçilir ve kurulum işlemini başlatmak için “OK” butonu seçilir. Kurulum işlemi tamamlandıktan sonra işletim sisteminizi yeniden başlatmak için “Close and log out” butonuna basın. Kurulum bittikten sonra bizden mevcut oturumumuzu kapatmamızı istiyor. Oturumumuzu kapatıp Windowsta yeniden oturum açıyoruz. Eğer Windows makinanızda Hyper-V özelliği kurulu değilse. Docker sizin yerinize kurulumu yapmak için aşağıdaki ekranı açıyor. “Ok” seçeneğini seçtikten sonra Docker Hyper-V kurulumuna başlıyor. Hyper-V kurulumu için Windows yeniden başlatılacak. Eğer donanımsal olarak sanallaştırma makinanızda açık değilse sanallaştırma hatası alacaksınız. Bu hatayı düzeltmek için BIOS ayarlarınızdan “Hardware Assisted Virtualization” ve Data Execution Protection” özelliklerini açmanız gerekir. Makinayı yeniden başlatıp bu ayarları yapabilirsiniz. Eğer bu özellikler zaten açık ise hatasız kurulum tamamlanacak. İşletim sistemi açıldıktan sonra Docker servislerinin açılması için kısa bir süre bekleyin. Docker çalıştıktan sonra karşımıza docker hub “Login” ekranı gelir. Burda sizden Docker ID’ niz ile oturum açmanız istenir. Eğer bir ID’niz yoksa cloud.docker.com adresinden oluşturabilirsiniz. Bu ID sizin Docker Hub’ a erişmenizi sağlar. Docker Hub’dan Repository, container imajlarınıza erişebilirsiniz. Eğer bu işlemleri yapmayacaksanız hesaba giriş yapmanıza gerek yok. Docker kurulumu test etmek için bir komut satırı veya Powershell ekranı açıyoruz. “Docker version” komutunu çalıştırdığımızda bize Docker kurulumumuz ile ilgili bilgileri gösteriyor. Docker hub üzerinden hello-world image çekip bir container üzerinde çalıştığını test edebilirsiniz. --docker versiyonuna bakılıyor docker --version --hello-world imajı docker hub üzerinden indiriliyor docker run hello-world --local ortama indirilen docker imajlar listeleniyor docker image ls --hello-world containerı listeleniyor docker container ls --all https://docker-docs.netlify.app/docker-for-windows/




spacer

Pod Yaşam Döngüsü ve Probe Kavramı

Pod Statüleri:

Podlar oluşturulurlar ve sonlandırılırlar. Bu yaşam döngüsü boyunca 5 çeşit Pod statüsü vardır.

Pending:             Kubernetes tarafından pod kabul edildi anlamına gelir. İlk statüdür.

Running:             Pod ile Node ilişkilendirildi anlamına gelir. Containerler yaratılmıştır.

Succeeded:         Tüm containerler sonlandırıldı ve yeniden başlatılmayacak.

Failed:                 Tüm containerler sonlandırıldı ve sonlandırılırken en az 1 tanesi hata verdi.

Unknown:          Pod’un durumu alınamıyor anlamına gelir. Pod’un çalıştığı Node bilgisi okunamıyor.

 

Probe Statüleri:

Kubernetes Pod’un durumunu öğrenmek için probe denilen kavramı kullanır.

Probe periyodik olarak cluster üzerinde tarama (diagnostic) işlemidir.

Probelar Success, Failure ve Unknown olarak 3 şekilde dönüş değeri alırlar.

3 çeşit Probe statüsü vardır.

Liveness Probe:                 Sağlıklı çalışıyor mu? Beklendiği gibi çalışıyor mu?

Readiness Probe:             Pod request kabul edebilir mi?

Startup Probe:                  Container içindeki uygulama başarılı olarak çalışıyor mu?

 

Probe Yöntemleri:

ExecAction:                        Container içinde bir execution yapma yöntemi

TCPSocketAction:            Container’ın IP adresi ve portu kullanılarak TCP kontrolü yapma yöntemi

HTTPGetAction:               Container’a http request gönderme yöntemi








spacer

Imperative ve Declarative Yöntemler

Imperative Yöntem:      Özel komutlar aracılığıyla süreçleri yürütme

Declarative Yöntem:      Yapılacak işi bir veya birden fazla script içinde tanımlayıp çalıştırma


Imperative Pod Yaratma



kubectl run demo-pod –image=nginx:alphine

nginx container ile bir Pod oluşturmak için bir deployment yaratılır

Master üzerindeki api-server ve kube-scheduler ile uygun bir node üzerinde pod’un yaratılması schedule edilir.

Pod’a Cluster IP adresi atanır. Cluster IP sadece cluster içinden erişildiği dışarıya kapalı olduğu için dışarıdan erişim isteniyorsa port forwarding yapılmalıdır.

 

Declarative Pod Yaratma

Yaml veya json dosyaları kullanılarak yapılır.

Bu dosyalar maplar ve list’lerden oluşur.

Yaml validate için online siteler üzerinden validation yapılabilir. Indent önemli.

Map:

Name:value ikilileri bulunur.

İç içe maplar olabilir.

List:

Sıralı eleman listeleridir.

Liste elemanları tire (-) ile başlar.

Liste içinde eleman olarak mapler olabilir.

 



Komutlar:

#imperative yöntemle bir namespace oluşturalım

kubectl create ns logging-ns

 

#namespaceleri görelim

kubectl get ns

 

#namespace’i silelim

kubectl delete ns logging-ns

 

#declarative yöntemle namespace oluşturalım

Logging-ns.yaml: indir

kubectl create -f logging-ns.yaml

kubectl get ns

 

 

#imperative yöntemle 8080 portu üzerinden Google’ın echoserver container’ı kullanılarak bir deployment oluşturalım.

kubectl run hello-k8s --image=gcr.io/google_containers/echoserver:1.4 --port=8080

kubectl get deployment

kubectl get pods

Burada replica belirtilemediği için 1 tane pod oluşturuldu.

 

#declarative yöntemle 8080 portu üzerinden Google’ın echoserver container’ı kullanılarak bir deployment oluşturalım.

gcr-deployment.yaml: indir

kubectl create -f gcr-deployment.yaml

kubectl get deployments

kubectl get pods


spacer

Daemonset ve Kullanımı

 

Daemonset Nedir?

Cluster’da her Node üzerinde belirlediğimiz bir Pod’u çalıştırma yöntemidir.

Genellikle loglama, monitör etme işlemleri için kullanılan default Podların oluşturuması için kullanılır.

Örneğin; Cluster’ı ölçeklendirmek için node eklendiği zaman her node’a default olarak log toplamak için Fluentd gibi bir uygulamanın otomatik kurulması için (imaj ile pod’un oluşturulması) kullanılır.

Aşağıdaki mimaride yeni bir Node (Node-4 10.0.0.5) eklendiği zaman bu Node üzerinde default Fluend Pod’unun hali hazırda kurulması sağlanır.

Bunun gibi özel gereksinimler ve özel işler için Node’lara deploy edilebilirler.

Asıl uygulamaların çalıştırılacağı Pod’ları oluşturmadan önce Node’larda ön hazırlık olması gereken durumlarda kullanılabilir.

Genellikle dışarıya data push etmek için DaemonSetler kullanılıyor.

Aslında DaemonSet Node üzerinde bir agent gibi çalışıyor.

 

Daemonset’e Nasıl Erişilir?

-          Daemonset oluşturulduğunda port numarası verilip NodeIP-Port bilgisi üzerinden erişilebilir.

-          Daemonset podları bir service objesine bind edilip service üzerinden erişilebilir.









Komutlar:


#cluster kontrol edelim
kubectl get nodes
kubectl describe node node1

#daemonset oluşturalım
kubectl create -f fluentd.yaml

#daemonsetlere bakalım desired ve current 0 olarak görülecek çünkü henüz pod oluşturulmadı
kubectl get ds

#daemonset üzerinde çalışan podlara bakalım
kubectl get pods

Dikkat:
Daemonset'in podları oluşturması için fluentd.yaml olan dosyada nodeSelector altında app:collector-node alanındaki label'a göre pod oluşturulur.

#elimizdeki node'a label atayacağız
kubectl label node node1 app=collector-node
#bu node içindeki labelları görmek için
kubectl decribe node node1

#daha önce bu label oluşturulduysa zaten var diye hata verir. Bu durumda label overwrite edilmelidir.
kubectl label node node1 app=collector-node --overwrite

#daemonsetlere bakalım desired ve current 0 olarak görülmüştü artık 1 olacak çünkü label eşleşti ve pod oluşturuldu
kubectl get ds

Böylece ilk başta kubernetes'de başlatılan daemonset label eşleşmediği için herhangi bir node bulamadı. Daha sonra label eşleşince pod ayağa kalktı.
#podları görelim
kubectl get pods

#bu node içindeki labelları görelim
kubectl decribe node node1

#daemonset'i silelim
kubectl delete ds data-collector-ds
# ds olmadığını görelim
kubectl get ds 

#daemonset silindiği için pod'un state'i artık Terminating olacak ve deamonsetle ilişkili olan podlar da siliecek
#pod'un terminating olduğunu görelim
kubectl get pods


spacer

Centos 7 Kurulumu ve Ayarları

CentOS Linux dağıtımı, Red Hat Enterprise Linux (RHEL) açık kaynaklarından elde edilen kararlı, öngörülebilir, yönetilebilir ve tekrarlanabilir bir platformdur. Kurumsal sınıfta bir işletim sistemi kararlılığına ihtiyaç duyan kişiler için ideal bir Linux dağıtımıdır. https://www.centos.org/download adresinden indirebilirsiniz. Hızlı kurulum adımına geçmek için Install CentOS 7’i seçerek Enter’a basınız. İngilizce kuruluma devam etmek için Continue’a basınız. Eğer farklı bir dil yapılandırmak istiyorsanız ilgili dili seçebilirsiniz. Kurulumu başlatabilmemiz için "INSTALLATION SUMMARY" erkanında kurulum için gerekli yapılandırmaları tamamlamamız gerekmektedir. Kurulumun en önemli başlığı "SYSTEM" olduğu için isteğe bağlı olarak buradan başlayabilirsiniz. Dosya sistemi yapılandırması için eğer otomatik olarak tüm diskin kullanılmasını istiyorsanız "Automatically configure partitioning." seçerek Done’a basınız. Kablolu ağ Ethernet (enp0s3) aktif etmek için anahtarı OFF konumundan ON konumuna getiriniz. DHCP üzerinden otomatik IP alarak yapılanacaktır. IP ayarlarını kabul edilip devam etmek için Done’a basınız. Eğer kendi ağ topolojinize göre elle düzenlemek istiyorsanız "Configure" Tıklayıp ilgili yapılandırma ayarlarını girerek kaydediniz. "KDUMP" ekranında kdump özelliğini aktif olarak kullanmak istiyorsanız "Enable kdump" seçip Done’a basınız. Kdump; Sistem çökmesi durumunda, sisteminizin çökme nedenini belirlemede çok değerli olabilecek bilgileri yakalayabilir. "SECURITY POLICY" ekranında Red Hat Enterprise Linux tarafından özellikle Amerika’da kullanılan güvenlik politikalarına uyumlu olarak kullanılabilmektedir. Bu adımı deaktif etmek için ON anahtarını OFF konumuna getirip Done’a basınız. Eğer kurumunuzun tabi olduğu bir güvenlik politikası var ise listeden ilgili politikayı seçip "Select profile" tıklayarak Done’a basınız. "SOFTWARE SELECTION" ekranında sisteminize kurulmasını istediğiniz yazılımlar ve ortamların yapılandırılması yapılmaktadır. Biz Postgresql kuracağımız için onu seçtik siz de kendinize göre seçim yapabilirsiniz. Eğer Türkçe klavye kullanmak istiyorsanız + tıklayıp Turkish seçerek Add’i tıklayınız ve Done Enter’a basınız. Eğer English (US) kaldırmak istiyorsanız seçiliyken – tıklayınız. "LANGUEAGE SUPPORT" ekranında İngilizce / İngilizce (A.B.D) dışında bir yapılandırma yapmak isterseniz ilgili dili seçip Done’a basınız. Yaptığımız yapılandırmalardan sonra kurulumun başlaması için "Begin Installation"’a basınız. Kurulum işlemi gerçekleştirilirken karışımıza root kullanıcı parola belirleme ve kullanıcı oluşturma ekranı gelmektedir. Root kullanıcı parola belirleme işlemini tamamlayıp Done’a basınız. "CREATE USER" ekranında kullanıcı tanımla işlemini tamamlayıp Done’a basınız. Tanımladığınız kullanıcının sistem yönetici haklarına sahip olmasını için "Make this user administrator" seçeneğini aktif etmeyi unutmayanız. Tüm yapılandırmalardan sonra kurulum tamamlandı. Kurulum sonrası ilk sistem açılışı için "Reboot"’a basınız. Kurulum sırasında belirtiğiniz kullanıcı bilgileriyle sisteme giriş yapabilirsiniz. Sisteminize ssh servisi üzerinden erişim sağlamak için ilgili servisi başlatmanız gerekmektedir. Servis durum kontrolü için sudo systemctl status sshd kullanabilirsiniz. Eğer ssh servisi çalışmıyorsa ve sistem önyükleme süresinde etkinleştirilmemiş ise; sudo systemctl enable sshd ile ssh servisi sistem önyükleme süresinde etkinleştirilir. sudo systemctl start sshd ile ssh servisi başlatılır. sudo systemctl status sshd ile ssh servis durum bilgileri görüntülenebilir.




spacer

 Kubernetes Trafik Yönetimi

Kubernetes’te Pod üzerine trafik yönetmenin amaçları:

-Podları tüm cluster üzerinden erişilebilir hale getirme (expose)

-Service üzerinden Podları erişilebilir hale getirme

Kubernetes DNS özelliği ile servicelere DNS atanabilir.

 

Bir poddan veya dış dünyadan poda erişmek için Pod IP adresi kullanılır. Ancak bu çok etkili olmaz. Etkili bir kullanım için service nesnesine ihtiyaç vardır. Kubernetes nimetlerinden faydalanmak için servisin arkasına bağlanan (bind edilen) birden çok ölçeklenebilir pod sayesinde front-end veya back-end üzerinden gelen istekler bir service üzerinden dağıtılabilir ve ölçeklenebilir.

Kube-dns üzerinden servislere otomatik olarak dns ataması yapılır.




Nodeport Nedir?

Dış dünyadan gelen trafiği clustera dahil etmenin en temel yoludur.

Node üzerinde bir port erişim için açılır. Default olarak 30000-32767 aralığında port numaraları kullanılır.

Cluster dışından NodeIp:NodePort şeklinde erişilir.

Porta gelen istekler ilişkilendirilen Service’e yönlendirilir.





ClusterIP Nedir?

Service için cluster genelinde geçerli br IP verme yöntemidir.

Default olarak dış dünyaya erişime açılmaz. Ancak proxy (kube-proxy) ile dışarıdan erişilebilir.


 

 


Load Balancer Nedir?

Kubernetes’te serviceleri dışarıy açmak için başka bir yöntemdir.

Servicelerin yük dağılımı NodePort üzerinden Service yönlendirme ile sağlanır.

LoadBalancer bir service tipidir. Loadbalancer servisi de bir IP’ye sahiptir.

 



 

Ingress Nedir?

Asd Ingress bir service değil bir object’tir.

Serviceler arası yük dağıtan bir router gibi çalışır.

Çalışabilmesi için cluster üzerinde bir Ingress Controller bulunması gerekir.

Ingress bir yönlendirme objesi olduğu için bir IP’sinin olmasına gerek yok.


 






spacer

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.

spacer