Zum Inhalt

Lab 07: Deployments mit Recreate-Rollout

Das Manifest enthält ein Deployment, das dem aus der letzten Aufgabe sehr ähnlich ist. Allerdings ist nun konfiguriert, dass das Deployment nicht im Modus RollingUpdate ausgerollt werden soll, sondern im Modus Recreate. Schauen wir uns an, was das bedeutet.

manifest.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-recreate-demo
spec:
  replicas: 10
  strategy:
    type: Recreate
  selector:
    matchLabels:
      app: deployment-recreate-demo
  template:
    metadata:
      labels:
        app: deployment-recreate-demo
    spec:
      topologySpreadConstraints:
        - maxSkew: 1
          topologyKey: kubernetes.io/hostname
          whenUnsatisfiable: ScheduleAnyway
          labelSelector:
            matchLabels:
              app: deployment-recreate-demo
      containers:
        - name: nginx
          image: nginx:alpine3.17
          ports:
            - containerPort: 80
          readinessProbe:
            httpGet:
              path: /
              port: 80
            initialDelaySeconds: 5
            periodSeconds: 10
          livenessProbe:
            httpGet:
              path: /
              port: 80
            initialDelaySeconds: 10
            periodSeconds: 20
          resources:
            requests:
              cpu: "100m"
              memory: "128Mi"
            limits:
              cpu: "200m"
              memory: "256Mi"

Beispiel ausführen

Erstelle das Deployment.

kubectl apply -f manifest.yaml

Überprüfe den Status des Deployments:

kubectl rollout status deployment/deployment-recreate-demo

Der Rollout sollte bald erfolgreich sein. Danach kannst du dir alle Pods auflisten lassen mit dem Label, welches in der Pod Template-Spec des Deployments angegeben ist:

kubectl get pod --selector=app=deployment-recreate-demo

Löse nun ein Update aus durch eine neue Imageversion, z.B. nginx:alpine3.18.

kubectl set image deployment/deployment-recreate-demo nginx=nginx:alpine3.18

Überwache das Rolling-Update.

kubectl rollout status deployment/deployment-recreate-demo

Es fällt sofort auf, dass das Rollout sehr viel schneller geht als beim Rolling Update. Das Deployment geht im Modus Recreate nämlich nicht Pod für Pod vor, sondern löscht alle auf einmal und legt sie neu an.

Aufräumen

kubectl delete deployment.apps/deployment-recreate-demo

Bonus