
Kubernetes'e Giris: Pod, Deployment ve Service Kavramları
Kubernetes (k8s), container'ları otomatik olarak dağıtan, ölçeklendiren ve yöneten açık kaynak bir orkestrasyon platformudur. CNCF'in 2025 anketine göre üretim ortamında Kubernetes kullanan kuruluşların oranı %84'e ulaştı. Bu rehberde Kubernetes'in temel yapı taşlarını - Pod, Deployment, Service, Re
Ahmet Yılmaz
Kıdemli Altyapı Mühendisi
Kubernetes (k8s), container'ları otomatik olarak dağıtan, ölçeklendiren ve yöneten açık kaynak bir orkestrasyon platformudur. CNCF'in 2025 anketine göre üretim ortamında Kubernetes kullanan kuruluşların oranı %84'e ulaştı. Bu rehberde Kubernetes'in temel yapı taşlarını - Pod, Deployment, Service, ReplicaSet ve Namespace - gerçek YAML örnekleriyle ele alıyoruz.
Kubernetes Nedir ve Neden Kullanılır?
Kubernetes, Google'ın Borg sisteminden esinlenerek geliştirilmiş ve 2014'te açık kaynak olarak yayınlanmıştır. Temel amacı container'ların yaşam döngüsünü yönetmektir: hangi node'da çalışacağı, kaç kopya olacağı, sağlık durumu, ağ erişimi ve güncelleme stratejisi gibi konuları deklaratif YAML dosyalarıyla tanımlarsınız, Kubernetes geri kalanını halleder.
Docker tek bir makinede container çalıştırır; Kubernetes ise onlarca veya yüzlerce makineyi tek bir cluster olarak yönetir. Uygulamanız çökerse otomatik yeniden başlatır, trafik artarsa yatay ölçekleme yapar, güncelleme sırasında sıfır kesinti sağlar.
💡 Ön Koşul: Bu rehberi takip etmek için Docker temellerini bilmeniz ve kubectl CLI aracının kurulu olması yeterlidir. Yerel ortamda denemek için Minikube veya kind kullanabilirsiniz.
Kubernetes Mimarisi: Control Plane ve Worker Node
Bir Kubernetes cluster'ı iki ana bileşenden oluşur: Control Plane (yönetim katmanı) ve Worker Node'lar (iş yükü katmanı).
| Bileşen | Katman | Görevi |
|---|---|---|
| kube-apiserver | Control Plane | Tüm API isteklerini karşılar, cluster'ın giriş noktası |
| etcd | Control Plane | Cluster durumunu saklayan key-value veritabanı |
| kube-scheduler | Control Plane | Pod'ları uygun node'lara atar |
| kubelet | Worker Node | Pod'ları node üzerinde çalıştırır ve izler |
| kube-proxy | Worker Node | Ağ kurallarını yönetir, Service trafiğini yönlendirir |
Pod: Kubernetes'in En Küçük Birimi
Pod, Kubernetes'te dağıtılabilir en küçük birimdir. Bir Pod içinde bir veya birden fazla container aynı ağ namespace'ini ve depolama alanını paylaşır. Pratikte çoğu Pod tek bir container barındırır; sidecar pattern gibi durumlarda birden fazla container kullanılır.
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:1.25-alpine
ports:
- containerPort: 80
resources:
requests:
memory: "64Mi"
cpu: "100m"
limits:
memory: "128Mi"
cpu: "250m"
⚠️ Önemli: Üretim ortamında Pod'ları doğrudan oluşturmayın. Pod silindiğinde yeniden oluşturulmaz. Bunun yerine Deployment veya StatefulSet kullanın - bu kaynaklar Pod'ların yaşam döngüsünü otomatik yönetir.
Deployment: Uygulama Dağıtımı ve Güncelleme
Deployment, Pod'ların istenen sayıda çalışmasını garanti eder. Bir Pod çökerse otomatik yeniden oluşturur, güncelleme sırasında rolling update stratejisi ile sıfır kesinti sağlar. Arka planda ReplicaSet nesnelerini yönetir.
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
spec:
replicas: 3
selector:
matchLabels:
app: web-app
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
template:
metadata:
labels:
app: web-app
spec:
containers:
- name: web-app
image: myapp:v1.2.0
ports:
- containerPort: 3000
readinessProbe:
httpGet:
path: /health
port: 3000
initialDelaySeconds: 5
periodSeconds: 10
Deployment güncellemesi sırasında maxSurge: 1 aynı anda en fazla 1 fazla Pod oluşturulmasını, maxUnavailable: 0 ise hiçbir Pod'un kullanılamaz hale gelmemesini sağlar. Bu sayede güncelleme sırasında trafik kesintisi yaşanmaz.
# Deployment olustur
kubectl apply -f deployment.yaml
# Deployment durumunu kontrol et
kubectl rollout status deployment/web-app
# Image guncelle (rolling update baslar)
kubectl set image deployment/web-app web-app=myapp:v1.3.0
# Guncellemeyi geri al
kubectl rollout undo deployment/web-app
# Replica sayisini degistir
kubectl scale deployment/web-app --replicas=5
Service: Pod'lara Sabit Ağ Erişimi
Pod'lar geçici IP adresleri alır ve yeniden oluşturulduğunda IP değişir. Service, Pod'ların önüne sabit bir ağ adresi koyarak bu sorunu çözer. Label selector ile eşleşen Pod'lara trafiği otomatik dağıtır.
| Service Türü | Erişim | Kullanım Senaryosu |
|---|---|---|
| ClusterIP | Yalnızca cluster içi | Mikroservisler arası iletişim |
| NodePort | Node IP:Port üzerinden dış erişim | Geliştirme ve test ortamı |
| LoadBalancer | Bulut sağlayıcı load balancer | Üretim ortamı dış trafik |
| ExternalName | DNS CNAME yönlendirme | Dış servislere erişim |
apiVersion: v1
kind: Service
metadata:
name: web-app-service
spec:
type: ClusterIP
selector:
app: web-app
ports:
- protocol: TCP
port: 80
targetPort: 3000
Bu Service tanımı, app: web-app label'ına sahip tüm Pod'lara gelen trafiği port 80'den alıp Pod'ların 3000 portuna yönlendirir. Cluster içindeki diğer Pod'lar web-app-service:80 adresiyle bu servise erişebilir.
Namespace ile Kaynak İzolasyonu
Namespace, tek bir cluster'ı mantıksal bölümlere ayırır. Farklı ekipler, ortamlar (dev/staging/prod) veya projeler için ayrı namespace'ler oluşturarak kaynak kotaları ve erişim kontrolü uygulayabilirsiniz.
# Namespace olustur
kubectl create namespace production
kubectl create namespace staging
# Belirli namespace'e deploy et
kubectl apply -f deployment.yaml -n production
# Namespace'deki kaynaklari listele
kubectl get pods -n production
# Kaynak kotasi tanimla
kubectl apply -f - <<EOF
apiVersion: v1
kind: ResourceQuota
metadata:
name: staging-quota
namespace: staging
spec:
hard:
requests.cpu: "4"
requests.memory: 8Gi
limits.cpu: "8"
limits.memory: 16Gi
pods: "20"
EOF
kubectl Temel Komutları
kubectl, Kubernetes cluster'ıyla etkileşim kurmak için kullanılan CLI aracıdır. Günlük operasyonlarda en sık kullanacağınız komutlar:
# Cluster bilgisi
kubectl cluster-info
kubectl get nodes
# Kaynaklari listeleme
kubectl get pods,svc,deploy -o wide
# Pod detayi ve loglar
kubectl describe pod nginx-pod
kubectl logs -f web-app-7d9f8b6c4-x2k9p
# Pod icine baglanma
kubectl exec -it web-app-7d9f8b6c4-x2k9p -- /bin/sh
# Port forwarding (yerel test)
kubectl port-forward svc/web-app-service 8080:80
# YAML ciktisi alma
kubectl get deploy web-app -o yaml
Üretim Ortamı Kontrol Listesi
-
Resource Limits Tanımlayın Her container için CPU ve memory requests/limits belirleyin. Limitsiz Pod'lar node kaynaklarını tüketebilir.
-
Liveness ve Readiness Probe Ekleyin Liveness probe çökmüş container'ları yeniden başlatır, readiness probe hazır olmayan Pod'lara trafik gitmesini engeller.
-
En Az 2 Replica Kullanın Tek replica ile node arızasında servis kesintisi yaşarsınız. Üretimde minimum 2, kritik servisler için 3+ replica kullanın.
-
Image Tag'lerinde latest Kullanmayın Sabit sürüm tag'leri (v1.2.0) kullanın. latest tag'i hangi sürümün çalıştığını takip etmeyi imkansız kılar.
Kubernetes otomatik ölçekleme için HPA (Horizontal Pod Autoscaling) rehberimizi, uygulama dağıtımını standardize etmek için Helm Chart rehberimizi inceleyin. Container güvenliği için Docker Image Güvenlik rehberimize göz atın. Kubernetes resmi dokümantasyonu ve CNCF yıllık anketi ek kaynak olarak faydalıdır.
Sıkça Sorulan Sorular
Kubernetes öğrenmek için Docker bilmek zorunlu mu?
Evet, Kubernetes container'ları yönetir ve temel birim olan Pod bir veya daha fazla container barındırır. Docker image oluşturma, Dockerfile yazma ve container yaşam döngüsünü anlamak Kubernetes'e geçiş için ön koşuldur.
Küçük projeler için Kubernetes gerekli mi?
Tek bir uygulama ve düşük trafik için Docker Compose yeterlidir. Kubernetes, birden fazla servisin koordinasyonu, otomatik ölçekleme ve yüksek erişilebilirlik gerektiğinde değer katar. 3-5+ mikroservis varsa değerlendirin.
Minikube ile kind arasındaki fark nedir?
Minikube tek node'lu bir VM veya container içinde cluster oluşturur ve dashboard gibi eklentiler sunar. kind (Kubernetes in Docker) Docker container'ları içinde multi-node cluster oluşturur ve CI/CD ortamlarında daha hızlı çalışır.
Pod ile container aynı şey mi?
Hayır. Pod, Kubernetes'in en küçük dağıtım birimidir ve bir veya birden fazla container barındırabilir. Aynı Pod içindeki container'lar aynı IP adresini ve volume'ları paylaşır. Çoğu durumda bir Pod tek container içerir.
Kubernetes cluster'ı için minimum kaç sunucu gerekir?
Üretim ortamı için minimum 3 node önerilir: 1 control plane + 2 worker node. Yüksek erişilebilirlik için 3 control plane + 3 worker node kullanın. Geliştirme ortamında Minikube ile tek node yeterlidir.
Sonuç
Kubernetes'in temel yapı taşları olan Pod, Deployment ve Service kavramlarını öğrendiniz. Pod container'ları barındırır, Deployment Pod'ların yaşam döngüsünü yönetir, Service ise sabit ağ erişimi sağlar. Namespace ile kaynakları izole edebilir, kubectl ile cluster'ınızı yönetebilirsiniz. Bir sonraki adım olarak yerel ortamda Minikube kurarak bu YAML dosyalarını uygulayın.
Kubernetes Altyapınız İçin Güçlü Sunucular
Hosted Cloud bulut sunucuları ile Kubernetes cluster'ınızı yüksek performans ve düşük gecikme ile çalıştırın.
Bulut Sunucu Planlarını İncele →Ahmet Yılmaz
Kıdemli Altyapı Mühendisi
10 yılı aşkın bulut altyapısı ve DevOps deneyimiyle Hosted Cloud'un teknik ekibinde yer almaktadır. Kubernetes, Terraform ve yüksek erişilebilirlik mimarileri üzerine uzmanlaşmıştır.
Yorumlar yakında