Kubernetes ile Sıfırdan Production Ortamı Kurulumu
Kubernetes, container orchestration dünyasının standartı haline geldi. Bu rehberde sıfırdan production-ready bir K8s cluster kurulumunu, Helm ile uygulama dağıtımını ve otomatik ölçeklendirme stratejilerini inceliyoruz.
Neden Kubernetes?
Kubernetes (K8s), container'ları otomatik olarak dağıtan, ölçeklendiren ve yöneten açık kaynaklı bir platformdur. Production ortamında size şunları sağlar:
- Self-healing: Çöken container'lar otomatik yeniden başlatılır
- Auto-scaling: Yüke göre otomatik ölçeklendirme
- Rolling updates: Sıfır kesinti ile güncelleme
- Service discovery: Dahili DNS ve load balancing
- Secret management: Hassas verilerin güvenli yönetimi
Cluster Kurulumu
Managed vs Self-hosted
Production için managed Kubernetes servisleri (EKS, GKE, AKS) önerilir. Self-hosted kurulum için kubeadm veya k3s kullanılabilir.
# kubeadm ile master node kurulumu sudo kubeadm init \ --pod-network-cidr=10.244.0.0/16 \ --control-plane-endpoint="k8s-api.novpix.com" # kubectl yapılandırması mkdir -p $HOME/.kube sudo cp /etc/kubernetes/admin.conf $HOME/.kube/config # CNI (Flannel) kurulumu kubectl apply -f https://raw.githubusercontent.com/flannel-io/flannel/master/Documentation/kube-flannel.yml
Helm ile Uygulama Dağıtımı
Helm, Kubernetes için bir paket yöneticisidir. Chart'lar ile uygulamalarınızı şablon halinde tanımlayabilir ve tekrarlanabilir şekilde dağıtabilirsiniz.
# Helm chart oluşturma
helm create my-app
# values.yaml yapılandırması
image:
repository: registry.novpix.com/api-server
tag: "v1.2.0"
replicaCount: 3
resources:
requests:
cpu: 250m
memory: 256Mi
limits:
cpu: 500m
memory: 512Mi
autoscaling:
enabled: true
minReplicas: 3
maxReplicas: 10
targetCPUUtilizationPercentage: 70
Ingress Controller Yapılandırması
Dış trafiği cluster içindeki servislere yönlendirmek için bir Ingress controller gereklidir. Nginx Ingress Controller en yaygın tercihlerden biridir.
# Nginx Ingress Controller kurulumu
helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
helm install ingress-nginx ingress-nginx/ingress-nginx \
--namespace ingress-nginx --create-namespace
# Ingress tanımı
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: api-ingress
annotations:
cert-manager.io/cluster-issuer: letsencrypt-prod
spec:
tls:
- hosts: [api.novpix.com]
secretName: api-tls
rules:
- host: api.novpix.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: api-server
port:
number: 80
HPA ile Otomatik Ölçeklendirme
Horizontal Pod Autoscaler (HPA), CPU veya bellek kullanımına göre pod sayısını otomatik artırır veya azaltır.
apiVersion: autoscaling/v2
kind: HorizontalPodAutoscaler
metadata:
name: api-server-hpa
spec:
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: api-server
minReplicas: 3
maxReplicas: 10
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 70
Production Checklist
- Resource limits tanımlı mı?
- Liveness ve readiness probe'ları ayarlandı mı?
- Network policies uygulandı mı?
- RBAC rolleri doğru yapılandırıldı mı?
- Monitoring (Prometheus + Grafana) kurulu mu?
- Log aggregation (ELK/Loki) aktif mi?
- Backup stratejisi (etcd snapshot) var mı?
- SSL/TLS sertifikaları otomatik yenileniyor mu?
Kubernetes güçlü bir araçtır ama karmaşıklığı da beraberinde getirir. Her zaman en basit çözümle başlayın ve ihtiyaç duydukça ölçeklendirin.
Sonuç
Kubernetes ile production ortamı kurmak dikkat ve planlama gerektirir. Managed servisler ile başlamak, Helm ile standart deployment'lar yapmak ve HPA ile otomatik ölçeklendirme sağlamak en sağlıklı yoldur.
novpix olarak Kubernetes cluster tasarımı, kurulumu ve yönetimi konusunda uçtan uca destek veriyoruz.