Sobes.tech
Middle+

Wat gebeurt er als we de applicatie implementeren met een deployment en vervolgens de versie van de applicatie in de replica set wijzigen?

sobes.tech AI

Antwoord van AI

Na het wijzigen van de versie van de applicatie in de Deployment-resource, wordt de bijbehorende ReplicaSet bijgewerkt. Deployment zal een nieuwe ReplicaSet creëren met de nieuwe versie van de containerafbeelding. De oude ReplicaSet wordt geleidelijk naar beneden geschaald, terwijl de nieuwe ReplicaSet omhoog schaalt. Dit proces wordt automatisch uitgevoerd en staat bekend als rolling update.

Specifieke stappen:

  1. De gebruiker of CI/CD-systeem werkt de Deployment bij.
  2. Deployment maakt een nieuwe ReplicaSet met een specificatie die de nieuwe afbeeldingsversie bevat.
  3. De nieuwe ReplicaSet begint pods te maken met de nieuwe versie.
  4. Zodra een deel van de nieuwe pods de status Ready bereikt, begint Deployment de oude ReplicaSet af te schalen door de oude pods te verwijderen.
  5. Het proces gaat door totdat alle pods onder controle van de nieuwe ReplicaSet met de nieuwe versie staan.
  6. De oude ReplicaSet blijft bestaan, maar met een gewenst aantal replicas gelijk aan 0.

Dit zorgt voor een downtime van nul tijdens het bijwerken van de applicatie (mits er voldoende resources zijn en de pods correct klaar zijn) en maakt het eenvoudig om terug te keren naar de vorige versie door simpelweg het Deployment opnieuw bij te werken.

Voorbeeld van het bijwerken van de Deployment YAML:

# Bijgewerkte 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% # Maximaal aantal pods dat boven het gewenste aantal kan worden gemaakt
      maxUnavailable: 25% # Maximaal aantal pods dat niet beschikbaar mag zijn tijdens de update
  template:
    metadata:
      labels:
        app: my-app
    spec:
      containers:
      - name: my-app-container
        image: my-registry/my-app:v1.1.0 # Gewijzigde afbeeldingsversie
        ports:
        - containerPort: 80

Handmatig de ReplicaSet wijzigen wordt sterk afgeraden en kan leiden tot onvoorspelbaar gedrag, omdat Deployment probeert de staat van de ReplicaSet af te stemmen op de gewenste staat, waardoor uw wijzigingen worden overschreven. Alle beheerde wijzigingen aan de applicatie moeten via de Deployment-resource worden gedaan.