Deployments

Ein Deployment verwaltet eine gewünschte Anzahl von Pod-Replikas und stellt sicher, dass sie laufen. Es ermöglicht Rolling Updates und Rollbacks.

pgadmin4-deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: pgadmin4
spec:
  replicas: 1
  selector:
    matchLabels:
      app: pgadmin4
  template:
    metadata:
      labels:
        app: pgadmin4
    spec:
      containers:
      - name: pgadmin4-container
        image: dpage/pgadmin4:9.14.0
        env:
        - name: PGADMIN_DEFAULT_EMAIL
          value: admin@admin.com
        - name: PGADMIN_DEFAULT_PASSWORD
          value: admin
        ports:
        - containerPort: 80
        resources:
          limits:
            memory: 512Mi
            cpu: 500m
          requests:
            memory: 256Mi
            cpu: 250m

Befehle

cd ~/kubernetes-tutorial/src/deployments
kubectl apply -f pgadmin4-deployment.yaml
kubectl get pods -o wide
kubectl get rs                     # ReplicaSets
kubectl get deploy
kubectl get all

Debugging

# Nur für Entwicklung, nie in Produktion!
kubectl port-forward pod/pgadmin4-[id] 8080:80 --address=0.0.0.0

Skalieren

# Über ReplicaSet skalieren funktioniert nicht – das Deployment überschreibt es
kubectl scale rs/pgadmin4-[id] --replicas=2

# Korrekt: über das Deployment skalieren
kubectl scale deploy/pgadmin4 --replicas=2
kubectl get pods -o wide

Rolling Update

kubectl set image deployment/pgadmin4 pgadmin4-container=dpage/pgadmin4:9.15.0
kubectl rollout status deployment/pgadmin4
kubectl rollout history deployment/pgadmin4
kubectl rollout undo deployment/pgadmin4