Sobes.tech
Middle+

Եթե մենք տեղադրում ենք հավելվածը deployment-ով և ապա փոփոխում ենք հավելվածի տարբերակը ռեպլիկասեթում, ինչ կլինի?

sobes.tech AI

Պատասխան AI-ից

Հետո հավելվածի տարբերակի փոփոխությունից հետո, կապված ReplicaSet ռեսուրսը, որը կապված է այդ Deployment- ի հետ, կթարմացվի։ Deployment-ը ստեղծում է նոր ReplicaSet նոր կոնտեյների պատկերի տարբերակով։ Հին ReplicaSet-ը աստիճանաբար նվազում է, իսկ նոր ReplicaSet-ը մեծանում։ Այս գործընթացը կոչվում է rolling update (շարժվող թարմացում) և կատարվում է ավտոմատ կերպով ըստ նախադրյալների։

Հստակ քայլերը՝

  1. Օգտագործողը կամ CI/CD համակարգը թարմացնում է Deployment-ը։
  2. Deployment-ը ստեղծում է նոր ReplicaSet՝ պարունակելով նոր տարբերակի նկարագրությունը։
  3. Նոր ReplicaSet-ը սկսում է ստեղծել պոդեր նոր տարբերակով։
  4. Երբ որոշակի քանակությամբ նոր պոդեր անցնում են Ready վիճակ, Deployment-ը սկսում է նվազեցնել հին ReplicaSet-ը՝ հեռացնելով հին տարբերակի պոդերը։
  5. Պրոցեսը շարունակվում է, մինչև բոլոր պոդերը չլինեն նոր ReplicaSet-ի կառավարմանը։
  6. Հին 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 ռեսուրսի միջոցով։