Kubernetes Notlarım

3 minute read

Kubernetes’a giriş notlarım. Bu notlar Özgür Öztürk’ün Kubernetes Eğitiminden aldığım notlarımdır.

Kubernetes, container’ları kurup yönetme işlerini üstlenen sektör standardı bir araçtır. Container’ları, volume’ları, networkleri vs. yönetmeyi kolaylaştırır, işleri tek elden yapmayı sağlar.

Docker Swarm da aynı amaca hizmet eder fakat Kubernetes kadar popüler değildir.

Kubernetes hem beyan temelli yapılandırmayı hem de otomasyonu kolaylaştıran, container iş yüklerini ve hizmetlerini yönetmek için oluşturulmuş, taşınabilir ve genişletilebilir açık kaynaklı bir platformdur.

kubernetes

kubernetes

kubernetes

kubernetes

kubernetes

Monolithic - Microservice:

kubernetes

Kubernetes Komponentleri - 1

kubernetes

kubernetes

kube-apiserver:

kube-apiserver, Kubernetes API’nı ortaya çıkaran Kubernetes control plane’in en önemli bileşeni ve giriş noktasıdır. Tüm diğer komponent ve node bileşenlerinin direkt iletişim kurabildiği tek komponenttir.

kubernetes

etcd:

Etcd tüm cluster verisi, metadata bilgileri ve Kubernetes’de oluşturulan tüm objelerin bilgilerinin tutulduğu anahtar-değer “key-value” veri deposudur.

kubernetes

kube-schduler:

kube-schduler yeni oluşturulan ya da bir node ataması yapılmamış Pod’ları izler ve üzerinde çalışacakları bir node seçer.

kubernetes

kube-controller-manager:

Mantıksal olarak, hem controller ayrı bir süreçtir, ancak karmaşıklığı azaltmak için hepsi tek bir binary olarak derlenmiştir ve tek bir proces olarak çalışır. Bu controllerların bazıları şunlardır:

  • Node controller,
  • Job controller,
  • Service Account & Token controller,
  • Endpoints controller.

kubernetes

kubernetes

Container runtime:

Container runtime, containerları çalıştırmaktan sorumlu olan yazılımdır. Kubernetes birkaç container runtime destekler: Docker, containerd, CRI-O.

kubernetes

kubelet:

Cluster’daki her node çalışan bir agent’tır. od içerisinde tanımlanan containerların çalıştırılmasını sağlar.

Kubelet, çeşikli mekanizmalar aracılığıyla sağlanan bir dizi Pod tanımı alır ve bu Pod tanımında belirtilen containerların çalışır durumda ve sağlıklı olmasını sağlar.

kubernetes

kube-proxy:

kube-proxy, nodelar üstünde ağ kurallarını yönetir. Bu ağ kuralları, cluster’ın içindeki veya dışındaki ağ oturumlarından Pod’larınızla ağ iletişimine izin verir.

kubernetes

Basit bir kubernetes cluster çalışma mantığı:

kubernetes

Kubernetes Yayın Döngüsü:

kubernetes

kubernetes

Minikube Kurulumu:

1curl -LO https://github.com/kubernetes/minikube/releases/latest/download/minikube-linux-amd64
2sudo install minikube-linux-amd64 /usr/local/bin/minikube && rm minikube-linux-amd64

Kubectl config:

kubernetes

#Context'leri listeleme
kubectl config get-contexts
CURRENT   NAME       CLUSTER    AUTHINFO   NAMESPACE
*         minikube   minikube   minikube   default

#Hangi Context'de olduğumuzu görmek için
kubectl config current-context                                                   
minikube

#Context değiştirmek için
kubectl config use-context "docker-desktop"

#Yardım almak için
kubectl get --help

#Belirli bir namespace'daki podları getirme
kubectl get pods -n kube-system

#Tüm namespace'lerdeki podları getirme
kubectl get pods -A

#Output formatlarını değiştirme

#Çıktıyı JSON olarak yazdırma
kubectl get pods -A -o json

#Çıktıyı YAML olarak yazdırma
kubectl get pods -A -o yaml

#Ekstra bilgi yazdırma
kubectl get pods -A -o wide

#Sadece isimleri almak için
kubectl get pods -A -o name

Kubernetes Objeleri:

kubernetes

Pod:

  • Pod’lar, Kubernetes’te oluşturabileceğiniz ve yönetebileceğiniz en küçük birimlerdir.
  • Pod’lar bir ya da daha fazla container barındırabilir. Ama çoğu durumda pod tek container barındırır.
  • Her Pod’un eşsiz bir ID’si “uid” bulunur.
  • Her pod eşsiz bir IP adresine sahiptir.
  • Aynı pod içerisinde containerlar aynı node üstünde çalıştırılır ve bu containerlar birbirleriyle localhost üstünden haberleşebilirler.

kubernetes

Pod oluşturma:

#httpd imajından pod oluşturma
kubectl run "ilkpod" --image="httpd:latest" --restart=Never

#Oluşturduğumuz pod'a bakma
kubectl get pods

#Pod'un tek satırda daha fazla özelliğine bakma
kubectl get pods -o wide

#Pod'un detaylı bilgilerini getirme
kubectl describe pods ilkpod 

#Pod'un loglarına bakma
kubectl logs ilkpod

#Pod içerisinde birden fazla container varsa
kubectl logs ilkpod -c containeradi

#Pod'un loglarını anlık olarak görmek için
kubectl logs -f ilkpod

#Pod'un son loglarını görmek için
kubectl logs --tail 5 ilkpod

#Pod'un üzerinde komut çalıştırmak için
kubectl exec ilkpod -- date                                                     
Wed Feb 12 12:53:19 UTC 2025

#Pod'da birden fazla container varsa her zaman -c parametresiyle ilgili containerin adını vermeliyiz
kubectl exec ilkpod -c containeradi -- pwd

#Pod'a bağlanma
kubectl exec -it ilkpod -- sh

#Pod'u silme
kubectl delete pods ilkpod

YAML ile çalışmak:

Örnek bir YAML dosyası:

apiVersion: v1
kind: Pod
metadata:
    name: ilkpod
    labels:
	    app: osman
spec:
    containers:
    - name: ilkpod
	    image: httpd:latest
	    ports:
	    - containerPort: 80
#YAML dosyasını çalıştırma
kubectl apply -f ./osman.yaml

#Podları getirme
kubectl get pods -o w

#Podları detaylı inceleme
kubectl describe pods ilkpod

Pod yaşam döngüsü:

kubernetes

kubernetes

kubernetes

kubernetes

kubernetes

kubernetes

#Shell'de her 2 sn'de bir podların bilgilerini getirir.
watch kubectl get pods -o wide 
kubectl get pods -o wide -w

Çoklu Container Pod:

kubernetes

kubernetes

kubernetes

kubernetes

kubernetes

Init Container:

kubernetes

Label and Selector:

kubernetes

kubernetes