Pod dan Deployment
Mengelola container dengan Pod dan Deployment di Kubernetes
Pod
Karakteristik Pod
- Unit terkecil yang dapat di-deploy di Kubernetes
- Berisi satu atau lebih container yang berbagi:
- IP address
- Storage volume
- Namespace network
- Pod bersifat ephemeral (sementara), dapat dihapus dan dibuat ulang
Contoh Pod YAML
apiVersion: v1
kind: Pod
metadata:
name: nginx-pod
labels:
app: web
spec:
containers:
- name: nginx
image: nginx:alpine
ports:
- containerPort: 80Deploy Pod
kubectl apply -f pod.yaml
kubectl get pods
kubectl describe pod nginx-pod
kubectl logs nginx-podDeployment
Masalah dengan Pod Langsung
- Pod tidak bisa restart otomatis jika gagal
- Tidak ada mekanisme rolling update
- Sulit untuk scale manual
Deployment Resource
- Mengelola ReplicaSet (yang mengelola Pod)
- Self-healing: restart pod yang gagal
- Rolling update tanpa downtime
- Deklaratif: definisikan state, Kubernetes yang menjaga
Contoh Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deployment
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: nginx
image: nginx:alpine
ports:
- containerPort: 80Command Deployment
kubectl apply -f deployment.yaml
kubectl get deployments
kubectl get pods
kubectl scale deployment web-deployment --replicas=5
kubectl rollout status deployment/web-deployment
kubectl rollout history deployment/web-deploymentRolling Update
Update Image
kubectl set image deployment/web-deployment nginx=nginx:1.25Update via YAML
spec:
template:
spec:
containers:
- name: nginx
image: nginx:1.25Rollback
kubectl rollout undo deployment/web-deployment
kubectl rollout undo deployment/web-deployment --to-revision=2Resource Limits
spec:
containers:
- name: app
image: myapp:latest
resources:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "256Mi"
cpu: "200m"- Requests: Resource yang direservasi untuk container
- Limits: Maksimum resource yang boleh digunakan
- Container yang melebihi memory limit akan di-terminate (OOMKilled)
Liveness dan Readiness Probe
Liveness Probe
- Menentukan apakah container perlu direstart
- Container yang tidak live akan di-restart
Readiness Probe
- Menentukan apakah container siap menerima traffic
- Pod yang belum ready tidak dikirimkan traffic
spec:
containers:
- name: app
livenessProbe:
httpGet:
path: /health
port: 8080
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /ready
port: 8080
initialDelaySeconds: 5
periodSeconds: 5