Que se passera-t-il si nous déployons l'application avec un déploiement puis modifions la version de l'application dans le replica set?
sobes.tech IA
Réponse de l'IA
Après avoir modifié la version de l'application dans la ressource Deployment, le ReplicaSet associé à ce Deployment sera mis à jour. Deployment créera un nouveau ReplicaSet avec la nouvelle version de l'image du conteneur. L'ancien ReplicaSet sera progressivement réduit, et le nouveau ReplicaSet sera augmenté. Ce processus s'appelle la mise à jour continue (rolling update) et est effectué automatiquement par défaut.
Étapes spécifiques:
- L'utilisateur ou le système CI/CD met à jour le Deployment.
- Deployment crée un nouveau ReplicaSet avec un spec contenant la nouvelle version de l'image.
- Le nouveau ReplicaSet commence à créer des pods avec la nouvelle version.
- Dès qu'une partie des nouveaux pods passe à l'état
Ready, Deployment commence à réduire le ReplicaSet ancien, en supprimant les pods avec l'ancienne version. - Le processus continue jusqu'à ce que tous les pods soient sous le contrôle du nouveau ReplicaSet avec la nouvelle version.
- L'ancien ReplicaSet reste, mais avec un nombre désiré de réplicas égal à 0.
Cela garantit une disponibilité zéro lors de la mise à jour de l'application (à condition que les ressources soient suffisantes et que les pods soient prêts) et permet de revenir facilement à la version précédente en mettant simplement à jour à nouveau le Deployment.
Exemple de mise à jour du YAML du Deployment:
# YAML du Deployment mis à jour
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-app
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 25% # Nombre maximum de pods pouvant être créés au-dessus du nombre désiré
maxUnavailable: 25% # Nombre maximum de pods pouvant être indisponibles pendant la mise à jour
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app-container
image: my-registry/my-app:v1.1.0 # Version de l'image modifiée
ports:
- containerPort: 80
Modifier manuellement le ReplicaSet est fortement déconseillé et peut entraîner un comportement imprévisible, car Deployment tentera de faire correspondre l'état du ReplicaSet à son état souhaité, en écrasant vos modifications. Toutes les modifications gérées de l'application doivent être effectuées via la ressource Deployment.