Kubernetes Production Ortamları İçin 10 Kritik Best Practice
Kubernetes Production Ortamları İçin 10 Kritik Best Practice
Kubernetes production'a aldığınızda oyun değişiyor. Development'ta çalışan her şey production'da farklı sorunlara yol açabilir. 5+ yıldır enterprise Kubernetes deployment'ları yöneten ekibimizin deneyimlerinden 10 kritik best practice.
1. Resource Limits ve Requests Tanımlayın (Mutlaka!)
Pod'larınıza resource limit tanımlamadan production'a çıkmayın. Bir pod memory leak yaparsa tüm node'u çökertebilir.
resources:
requests:
memory: "256Mi"
cpu: "250m"
limits:
memory: "512Mi"
cpu: "500m"
Neden önemli? Resource requests scheduling için, limits ise runtime protection için. İkisini de tanımlamazsanız "noisy neighbor" sorunu yaşarsınız.
2. Liveness ve Readiness Probe'ları Doğru Yapılandırın
Application başlamadan önce readiness probe fail etmeli. Crash loop backoff'a girmemek için liveness probe'u dikkatli ayarlayın.
livenessProbe:
httpGet:
path: /healthz
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 5
Common hata: initialDelaySeconds çok kısa → Pod sürekli restart. Çok uzun → Slow rollout.
3. Pod Disruption Budget (PDB) Kullanın
Node maintenance sırasında tüm pod'larınız aynı anda gitmesin diye PDB şart.
apiVersion: policy/v1
kind: PodDisruptionBudget
metadata:
name: myapp-pdb
spec:
minAvailable: 2
selector:
matchLabels:
app: myapp
4. Network Policies ile Mikro-Segmentasyon
Default Kubernetes davranışı: Tüm pod'lar birbirine erişebilir. Bu production'da güvenlik riski.
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
name: api-allow-frontend
spec:
podSelector:
matchLabels:
app: api
ingress:
- from:
- podSelector:
matchLabels:
app: frontend
5. Image Tag Olarak "latest" Kullanmayın
latest tag production'da disaster recipe. Her zaman semantic versioning kullanın: myapp:v1.2.3
Neden? Rollback imkansız. Hangi version çalıştığını bilmiyorsunuz. Farklı node'larda farklı image versiyonları olabilir.
6. Secrets Management - External Vault Kullanın
Kubernetes secrets base64 encoding, encryption değil! Production'da HashiCorp Vault, AWS Secrets Manager veya Azure Key Vault entegre edin.
Alternatif: Sealed Secrets (Bitnami), External Secrets Operator
7. Horizontal Pod Autoscaler (HPA) Yapılandırın
Traffic spike'larda manuel scale etmeyin. HPA ile otomatik ölçeklendirme:
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: myapp-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: myapp
minReplicas: 3
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
8. Logging ve Monitoring Stack Kurun
Minimum Stack:
- Logging: Loki + Promtail (lightweight) veya ELK
- Metrics: Prometheus + Grafana
- Tracing: Jaeger veya Tempo
- Alerts: Alertmanager → Slack/PagerDuty
Kural: "You can't improve what you can't measure."
9. RBAC ile Least Privilege Principle
Default ServiceAccount yerine her uygulama için özel ServiceAccount + Role:
apiVersion: v1
kind: ServiceAccount
metadata:
name: myapp-sa
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: myapp-role
rules:
- apiGroups: [""]
resources: ["configmaps"]
verbs: ["get", "list"]
10. GitOps ile Deployment - ArgoCD/Flux
kubectl apply production'da manuel yapılmamalı. Git = Single Source of Truth.
ArgoCD Benefits:
- Declarative deployments
- Automated sync
- Rollback tek tık
- Audit trail (kim ne deploy etti?)
- Multi-cluster management
Bonus: Disaster Recovery Planınız Var mı?
Velero ile cluster backup:
- Tüm Kubernetes resources
- Persistent Volumes
- Scheduled backups (günlük)
- Cross-cluster/cross-cloud restore
Sonuç
Kubernetes production'da "set and forget" değil. Sürekli monitoring, tuning ve optimization gerekiyor. Devups olarak müşterilerimizin K8s production journey'sinde yanlarındayız.
Yardım lazımsa: Kubernetes assessment, migration, 7/24 managed services - iletişime geçin.