Եթե մենք տեղադրում ենք հավելվածը deployment-ով և ապա փոփոխում ենք հավելվածի տարբերակը ռեպլիկասեթում, ինչ կլինի?
sobes.tech AI
Պատասխան AI-ից
Հետո հավելվածի տարբերակի փոփոխությունից հետո, կապված ReplicaSet ռեսուրսը, որը կապված է այդ Deployment- ի հետ, կթարմացվի։ Deployment-ը ստեղծում է նոր ReplicaSet նոր կոնտեյների պատկերի տարբերակով։ Հին ReplicaSet-ը աստիճանաբար նվազում է, իսկ նոր ReplicaSet-ը մեծանում։ Այս գործընթացը կոչվում է rolling update (շարժվող թարմացում) և կատարվում է ավտոմատ կերպով ըստ նախադրյալների։
Հստակ քայլերը՝
- Օգտագործողը կամ CI/CD համակարգը թարմացնում է Deployment-ը։
- Deployment-ը ստեղծում է նոր ReplicaSet՝ պարունակելով նոր տարբերակի նկարագրությունը։
- Նոր ReplicaSet-ը սկսում է ստեղծել պոդեր նոր տարբերակով։
- Երբ որոշակի քանակությամբ նոր պոդեր անցնում են
Readyվիճակ, Deployment-ը սկսում է նվազեցնել հին ReplicaSet-ը՝ հեռացնելով հին տարբերակի պոդերը։ - Պրոցեսը շարունակվում է, մինչև բոլոր պոդերը չլինեն նոր ReplicaSet-ի կառավարմանը։
- Հին ReplicaSet-ը մնում է, բայց ցանկալի ռեպլիկների թիվը 0 է։
Այս գործընթացը ապահովում է զրո ժամանակով դադար, երբ թարմացնում եք հավելվածը (հաշվի առնելով բավարար ռեսուրսները և պոդերի ճիշտ պատրաստվածությունը), և հեշտությամբ վերականգնում է նախորդ տարբերակին՝ պարզապես թարմացնելով Deployment-ը։
Deployment YAML-ի թարմացման օրինակ՝
# Թարմացված 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% # Առավելագույն քանակը պոդերի, որոնք կարող են ավելանալ ցանկալի քանակից ավել
maxUnavailable: 25% # Առավելագույն քանակը պոդերի, որոնք կարող են լինել անհասանելի թարմացման ժամանակ
template:
metadata:
labels:
app: my-app
spec:
containers:
- name: my-app-container
image: my-registry/my-app:v1.1.0 # Փոփոխված պատկերակն տարբերակ
ports:
- containerPort: 80
Հատուկ ուշադրություն՝ ձեռքով փոփոխված ReplicaSet-ը չէ խորհուրդ տրվում և կարող է հանգեցնել անսպասելի վարքագծի, քանի որ Deployment-ը փորձելու է համապատասխանեցնել ReplicaSet-ի վիճակը իր ցանկալի վիճակին՝ վերագրելով ձեր փոփոխությունները։ Բոլոր կառավարվող փոփոխությունները պետք է կատարվեն Deployment ռեսուրսի միջոցով։