1. Báza znalostí
  2. Cloud a servery
  3. Kontajnery
  4. Kubernetes
  5. Kubernetes – 7. Rolling updates a Rollbacks

Kubernetes – 7. Rolling updates a Rollbacks

V predošlom diele sme ukázali, ako k podu pripojiť interné úložisko (storage) pomocou mechanizmu emptyDir, ktorého obsah zostáva zachovaný, pokiaľ pod nevymažeme. Externé úložisko zo systému súborov nodu sme  ku kontajneru pripojili pomocou mechanizmu hostPath, pričom sme si overili, že aj po vymazaní nasadeného podu obsah pripojeného priečinka zostal zachovaný.

Chcete si vytvoriť vlastný Kubernetes (K8s) klaster? Vyskúšajte si ho vo Virtuálnom dátovom centre od Websupportu.

V tomto diele predstavíme dôležité funkcie systému Kubernetes, ktoré sa starajú o aktualizáciu nasadenia bez potreby reštartovania alebo vypnutia serverov (rolling updates) a v prípade problému aj o návrat do posledného funkčného stavu (Rollbacks).

Mažeme nepotrebné služby a nasadenia

Pred tým, ako budeme pokračovať, vymažeme nepotrebné služby (services) a nasadenia (deployments), aby sme Kubernetes Cluster zbytočne nezaťazovali. Najskôr vypíšeme zoznam spustených služieb (prvý riadok) a aktívnych nasadení (druhý riadok) na VPS master:

kubectl get services
kubectl get deployments

Potom nepotrebné služby (prvý riadok) a nasadenia (druhý riadok) na VPS master zmažeme (tu je nepotrebná služba nazvaná nginx-service a nepotrebné nasadenie nginx-deployment):

kubectl delete service nginx-service
kubectl delete deployment nginx-deployment

Rolling updates

Vytvoríme súbor s názvom deployment-nginx-update-test.yaml (prvý riadok), do ktorého zapíšeme definíciu nasadenia (ostatné riadky):

nano ~/deployment-nginx-update-test.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: deployment-nginx-update_test
  labels:
    app: nginx
spec:
  replicas: 4
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:1.20.1
        ports:
        - containerPort: 80

Vložíme skopírovaný obsah, uložíme pomocou klávesovej skratky Ctrl + X a následne stlačením klávesu y a potvrdením klávesom Enter.

Deployment nasadíme z vyššie vytvoreného konfiguračného súboru:

kubectl create -f ~/deployment-nginx-update-test.yaml

Skontrolujeme, či sa vytvorilo nasadenie (prvý riadok), či existujú pody (druhý riadok) a replicasety (tretí riadok):

kubectl get deployments
kubectl get pods
kubectl get replicasets

Vidíme, že je vytvorené jedno nasadenie a jeden replicaset, ktorý spravuje 4 pody.

V súbore deployment-nginx-update-test.yaml teraz na riadku číslo 19 zmeníme verziu obrazu Nginx na 1.19.6 takto:

nano +19 ~/deployment-nginx-update-test.yaml

V riadku číslo 19 na konci prepíšeme verziu 1.20.1 na 1.19.6, uložíme pomocou klávesovej skratky Ctrl + X a následne stlačením klávesu y a potvrdením klávesom Enter.

Takto zmenu aplikujeme:

kubectl apply -f ~/deployment-nginx-update-test.yaml

Po kontrole replicasetov zistíme, že predošlý replicaset s verziou servera Nginx 1.20.1 obsahuje nula podov a nový (aktualizovaný) obsahuje 4 pody už s verziou servera Nginx 1.19.6:

kubectl get replicasets

Rollback

Prepíšme teraz verziu obrazu servera Nginx z 1.19.6 na 1.1.1 (prvý riadok), aplikujem zmeny (druhý riadok) a skontrolujem replicasety (tretí riadok):

nano ~/deployment-nginx-update-test.yaml
kubectl apply -f ~/deployment-nginx-update-test.yaml
kubectl get replicasets

Zistíme, že posledný replicaset obsahuje nula podov, pretože server Nginx vo verzii 1.1.1 neexistuje, teda sa pody nepodarilo nasadiť.

V takýchto prípadoch môžeme vďaka funkcii Rollback vrátiť systém Kubernets do stavu naposledy funkčného bez potreby reštartovania alebo vypnutia servera.

Pomocou príkazu vypísaného nižšie najskôr necháme vypísať zoznam revízií:

kubectl rollout history deployments deployment-nginx-update-test

Takto necháme vypísať detaily revízie číslo 2 (--revision=2):

kubectl rollout history deployments deployment-nginx-update-test --revision=2

V našom prípade obnovujeme stav do bodu revízie číslo 2 (--revision=2), keďže vtedy určite všetko fungovalo správne. Urobíme to takto:

kubectl rollout undo deployment deployment-nginx-update-test

Skontrolujeme, či nasadenia (prvý riadok), pody (druhý riadok) a replicasety (tretí riadok) naozaj fungujú správne:

kubectl get deployments
kubectl get pods
kubectl get replicasets

Nakoniec ešte vymažeme nasadenie (a s ním aj súvisiace pody), ktoré už teraz nie je potrebné:

kubectl delete -f ~/deployment-nginx-update-test.yaml

Hľadáte manažovaný Kubernetes? Využite služby našich skúsených profesionálov na cloud native – radi vám pripravíme riešnie na mieru.

Zhrnutie

V siedmom diele sme ukázali, ako nasadený deployment aktualizovať bez akéhokoľvek výpadku. Tiež sme demonštrovali, ako sa v prípade chyby vrátiť do bodu, kedy všetko fungovalo správne – a to bez potreby reštartovania či vypnutia servera.

Aktualizované 14. júna 2022

Bol pre vás tento návod nápomocný?

Mohlo by vás tiež zaujímať:

Spýtajte sa nás, radi poradíme
Po - Ne 8:00-22:00
Kontaktovať podporu