Lab 06: Deployments und Rolling Updates¶
Das Manifest enthält ein Deployment mit einem einfachen NGINX-Container, für den drei Replika-Pods angelegt werden. An diesem Manifest kann man folgende Eigenschaften erkennen.
apiVersion: apps/v1: gibt an, dass wir die Deployment API von Kubernetes verwenden.- Deployment mit dem Metadaten-Namen
deployment-demo. replicas: 3: gibt an, dass 3 Replikate der Anwendung erstellt werden sollen.strategy.type: RollingUpdate: bestimmt die Aktualisierungsstrategie als RollingUpdate.rollingUpdate.maxSurge: 1: gibt an, wie viele Replikate während der Aktualisierung zusätzlich zur gewünschten Anzahl an Replikaten erstellt werden dürfen.rollingUpdate.maxUnavailable: 0: legt fest, wie viele Replikate während der Aktualisierung nicht verfügbar sein dürfen.selector.matchLabels.app: rollingupdate: zum Erkennen der App mit dem Labelrollingupdate.- Die Container nutzen das Image
nginx:alpine3.17und lauschen auf Port80.
manifest.yaml:
apiVersion: apps/v1
kind: Deployment
metadata:
name: deployment-demo
spec:
replicas: 10
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 1 # How many pods can be created above the desired replicas number?
maxUnavailable: 0 # How many pods can be unavailable during the update?
selector:
matchLabels:
app: deployment-demo
template:
metadata:
labels:
app: deployment-demo
spec:
topologySpreadConstraints:
- maxSkew: 1
topologyKey: kubernetes.io/hostname
whenUnsatisfiable: ScheduleAnyway
labelSelector:
matchLabels:
app: deployment-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-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-demo
Führe nun ein Rolling-Update auf eine neue Imageversion durch, z.B. nginx:alpine3.18:
kubectl set image deployment/deployment-demo nginx=nginx:alpine3.18
Überwache das Rolling-Update:
kubectl rollout status deployment/deployment-demo
Falls du das Rolling-Update rückgängig machen musst:
kubectl rollout undo deployment/deployment-demo
Um den Verlauf des Deployments anzeigen lassen:
kubectl rollout history deployment/deployment-demo
Aufräumen¶
kubectl delete deployment.apps/deployment-demo