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