Sobes.tech
Middle+

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:

  1. Der Benutzer oder das CI/CD-System aktualisiert das Deployment.
  2. Deployment erstellt einen neuen ReplicaSet mit einem spec, der die neue Image-Version enthält.
  3. Der neue ReplicaSet beginnt, Pods mit der neuen Version zu erstellen.
  4. Sobald einige der neuen Pods den Status Ready erreichen, beginnt Deployment, den alten ReplicaSet herunterzufahren, indem die alten Pods entfernt werden.
  5. Der Prozess wird fortgesetzt, bis alle Pods unter Kontrolle des neuen ReplicaSet mit der neuen Version stehen.
  6. 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.