Cosa succede se distribuiamo l'applicazione con un deployment e poi cambiamo la versione dell'applicazione nel replica set?
sobes.tech AI
Risposta dell'AI
Dopo aver modificato la versione dell'applicazione nella risorsa Deployment, il ReplicaSet associato a questo Deployment verrà aggiornato. Deployment creerà un nuovo ReplicaSet con la nuova versione dell'immagine del contenitore. Il ReplicaSet vecchio verrà scalato gradualmente verso il basso, mentre il nuovo ReplicaSet verrà scalato verso l'alto. Questo processo è chiamato aggiornamento continuo (rolling update) e viene eseguito automaticamente per impostazione predefinita.
Passaggi specifici:
- L'utente o il sistema CI/CD aggiorna il Deployment.
- Deployment crea un nuovo ReplicaSet con uno spec che contiene la nuova versione dell'immagine.
- Il nuovo ReplicaSet inizia a creare pod con la nuova versione.
- Quando alcuni dei nuovi pod passano allo stato
Ready, Deployment inizia a scalare verso il basso il vecchio ReplicaSet, eliminando i pod con la versione precedente. - Il processo continua fino a quando tutti i pod sono sotto il controllo del nuovo ReplicaSet con la nuova versione.
- Il vecchio ReplicaSet rimane, ma con un numero desiderato di repliche pari a 0.
Questo garantisce un tempo di inattività zero durante l'aggiornamento dell'applicazione (a condizione che ci siano risorse sufficienti e che i pod siano pronti correttamente) e permette di tornare facilmente alla versione precedente semplicemente aggiornando di nuovo il Deployment.
Esempio di aggiornamento del YAML del Deployment:
# YAML del Deployment aggiornato
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-app
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 25% # Numero massimo di pod che possono essere creati sopra il numero desiderato
maxUnavailable: 25% # Numero massimo di pod che possono essere non disponibili durante l'aggiornamento
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app-container
image: my-registry/my-app:v1.1.0 # Versione dell'immagine modificata
ports:
- containerPort: 80
Modificare manualmente il ReplicaSet è fortemente sconsigliato e può portare a comportamenti imprevedibili, poiché Deployment tenterà di portare lo stato del ReplicaSet in linea con il suo stato desiderato, sovrascrivendo le vostre modifiche. Tutte le modifiche gestite dell'applicazione devono essere effettuate tramite la risorsa Deployment.