Was passiert, wenn wir die Anwendung mit einem Deployment bereitstellen und dann die Version der Anwendung im ReplicaSet ändern?
sobes.tech KI
Antwort von AI
Nachdem die Version der Anwendung in der Deployment-Ressource geändert wurde, wird der damit verbundene ReplicaSet aktualisiert. Deployment erstellt einen neuen ReplicaSet mit der neuen Container-Image-Version. Der alte ReplicaSet wird schrittweise heruntergefahren, während der neue ReplicaSet hochgefahren wird. Dieser Prozess wird als Rolling Update bezeichnet und erfolgt standardmäßig automatisch.
Spezifische Schritte:
- Der Benutzer oder das CI/CD-System aktualisiert das Deployment.
- Deployment erstellt einen neuen ReplicaSet mit einem spec, der die neue Image-Version enthält.
- Der neue ReplicaSet beginnt, Pods mit der neuen Version zu erstellen.
- Sobald einige der neuen Pods den Status
Readyerreichen, beginnt Deployment, den alten ReplicaSet herunterzufahren, indem die alten Pods entfernt werden. - Der Prozess wird fortgesetzt, bis alle Pods unter Kontrolle des neuen ReplicaSet mit der neuen Version stehen.
- Der alte ReplicaSet bleibt bestehen, hat aber eine gewünschte Replikatanzahl von 0.
Dies gewährleistet eine null Ausfallzeit bei der Aktualisierung der Anwendung (vorausgesetzt, ausreichende Ressourcen sind vorhanden und die Pods sind ordnungsgemäß bereit) und ermöglicht eine einfache Rückkehr zur vorherigen Version durch erneutes Aktualisieren des Deployments.
Beispiel für die Aktualisierung des Deployment-YAML:
# Aktualisiertes Deployment YAML
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-app
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 25% # Maximale Anzahl an Pods, die über die gewünschte Anzahl hinaus erstellt werden können
maxUnavailable: 25% # Maximale Anzahl an Pods, die während des Updates nicht verfügbar sein dürfen
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app-container
image: my-registry/my-app:v1.1.0 # Geänderte Image-Version
ports:
- containerPort: 80
Manuelles Ändern des ReplicaSet wird dringend abgeraten und kann zu unvorhersehbarem Verhalten führen, da Deployment versuchen wird, den Zustand des ReplicaSet an den gewünschten Zustand anzupassen und Ihre Änderungen zu überschreiben. Alle verwalteten Änderungen an der Anwendung sollten über die Deployment-Ressource erfolgen.