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:
- De gebruiker of CI/CD-systeem werkt de Deployment bij.
- Deployment maakt een nieuwe ReplicaSet met een specificatie die de nieuwe afbeeldingsversie bevat.
- De nieuwe ReplicaSet begint pods te maken met de nieuwe versie.
- Zodra een deel van de nieuwe pods de status
Readybereikt, begint Deployment de oude ReplicaSet af te schalen door de oude pods te verwijderen. - Het proces gaat door totdat alle pods onder controle van de nieuwe ReplicaSet met de nieuwe versie staan.
- 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.