Recraftory

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: 80

Deploy Pod

kubectl apply -f pod.yaml
kubectl get pods
kubectl describe pod nginx-pod
kubectl logs nginx-pod

Deployment

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: 80

Command 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-deployment

Rolling Update

Update Image

kubectl set image deployment/web-deployment nginx=nginx:1.25

Update via YAML

spec:
  template:
    spec:
      containers:
      - name: nginx
        image: nginx:1.25

Rollback

kubectl rollout undo deployment/web-deployment
kubectl rollout undo deployment/web-deployment --to-revision=2

Resource 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