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.





Monolitik ve Mikroservis

Kubernetes Komponentleri


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.

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.

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

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.


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

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.

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 Cluster Çalışma Mantığı

Kubernetes Yayın Döngüsü


Minikube Kurulumu
curl -LO https://github.com/kubernetes/minikube/releases/latest/download/minikube-linux-amd64
sudo install minikube-linux-amd64 /usr/local/bin/minikube && rm minikube-linux-amd64Kubectl Config

#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 nameKubernetes Objeleri

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.

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 ilkpodYAML 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 ilkpodPod Yaşam Döngüsü






#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





Init Container

Label ve Selector

