Šta će se desiti ako implementiramo aplikaciju pomoću deployment-a, a zatim promenimo verziju aplikacije u replika setu?
sobes.tech АИ
Одговор од АИ
Nakon promene verzije aplikacije u Deployment resursu, povezan ReplicaSet će biti ažuriran. Deployment će kreirati novi ReplicaSet sa novom verzijom slike kontejnera. Stari ReplicaSet će se postepeno smanjivati, dok će novi ReplicaSet rasti. Ovaj proces se naziva rolling update (postepno ažuriranje) i podrazumevano se obavlja automatski.
Specifični koraci:
- Korisnik ili CI/CD sistem ažurira Deployment.
- Deployment kreira novi ReplicaSet sa specifikacijom koja sadrži novu verziju slike.
- Novi ReplicaSet počinje da kreira podove sa novom verzijom.
- Kada neki od novih podova pređu u stanje
Ready, Deployment počinje da smanjuje stari ReplicaSet uklanjanjem starih podova. - Proces se nastavlja dok svi podovi ne budu pod kontrolom novog ReplicaSet-a sa novom verzijom.
- Stari ReplicaSet ostaje, ali sa željenim brojem replika jednakim 0.
Ovo obezbeđuje nultu vreme zastoja tokom ažuriranja aplikacije (pod uslovom da postoje dovoljni resursi i da su podovi pravilno spremni) i omogućava lako vraćanje na prethodnu verziju jednostavnim ponovnim ažuriranjem Deployment-a.
Primer ažuriranja YAML Deployment-a:
# Ažurirani YAML Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: my-app-deployment
spec:
replicas: 3
selector:
matchLabels:
app: my-app
strategy:
type: RollingUpdate
rollingUpdate:
maxSurge: 25% # Maksimalan broj podova koji se može kreirati iznad željenog broja
maxUnavailable: 25% # Maksimalan broj podova koji mogu biti nedostupni tokom ažuriranja
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app-container
image: my-registry/my-app:v1.1.0 # Izmenjena verzija slike
ports:
- containerPort: 80
Ručno menjanje ReplicaSet-a je snažno ne preporučljivo i može dovesti do nepredvidivog ponašanja, jer će Deployment pokušati da uskladi stanja ReplicaSet-a sa željenim stanjem, prepisujući vaše promene. Sve upravljane promene aplikacije treba vršiti putem Deployment resursa.