Nasadenie Canary vykonáme manuálne cez GitOps a vytvorenie/úpravu hlavných zdrojov Kubernetes. Tento článok je určený predovšetkým na úvod s tým, ako funguje nasadenie v Kubernetes Canary, pretože existujú efektívnejšie metódy automatizácie, ktoré zvážime v nasledujúcich článkoch.
Pri stratégii Canary sa aktualizácie najskôr aplikujú iba na podmnožinu používateľov. Prostredníctvom monitorovania, údajov denníka, manuálneho testovania alebo iných kanálov spätnej väzby sa vydanie testuje predtým, ako bude uvoľnené pre všetkých používateľov.
Nasadenie Kubernetes (priebežná aktualizácia)
Predvolenou stratégiou pre Kubernetes Deployment je priebežná aktualizácia, pri ktorej sa spúšťa určitý počet modulov s novými verziami obrázkov. Ak boli vytvorené bez problémov, pody so starými verziami obrázkov sa ukončia a paralelne sa vytvoria nové pody.
GitOps
V tomto príklade používame GitOps, pretože:
pomocou Gitu ako jediného zdroja pravdy
na zostavenie a nasadenie používame operácie Git (nie sú potrebné žiadne iné príkazy ako git tag/merge)
Príklad
Vezmime si dobrú prax – mať jedno úložisko pre aplikačný kód a jedno pre infraštruktúru.
Úložisko aplikácií
Toto je veľmi jednoduché Python+Flask API, ktoré vracia odpoveď ako JSON. Balík vytvoríme cez GitlabCI a výsledok vložíme do registra Gitlab. V registri máme dve rôzne verzie vydania:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
Jediný rozdiel medzi nimi je zmena vo vrátenom súbore JSON. Túto aplikáciu používame na čo najjednoduchšiu vizualizáciu, s ktorou verziou komunikujeme.
Úložisko infraštruktúry
V tejto repe nasadíme cez GitlabCI do Kubernetes, .gitlab-ci.yml je nasledovné:
Tieto zmeny presunieme do úložiska, z ktorého sa začne nasadenie (cez GitlabCI) a ako výsledok vidíme:
Naša služba bude ukazovať na obe nasadenia, pretože obe majú výber aplikácií. Kvôli predvolenej randomizácii Kubernetes by sme mali vidieť rôzne odpovede na ~ 10 % žiadostí:
Aktuálny stav našej aplikácie (GitOps, prevzatý z Git ako Single Source Of Truth) je prítomnosť dvoch nasadení s aktívnymi replikami, jedno pre každú verziu.
~10 % používateľov sa zoznámi s novou verziou a neúmyselne ju otestuje. Teraz je čas skontrolovať chyby v protokoloch a monitorovacích údajoch, aby ste našli problémy.
Krok 2: Uvoľnite novú verziu pre všetkých používateľov
Rozhodli sme sa, že všetko prebehlo v poriadku a teraz musíme sprístupniť novú verziu všetkým používateľom. Za týmto účelom jednoducho aktualizujeme deploy.yaml inštalácia novej verzie obrazu a počet replík rovný 10. In deploy-canary.yaml nastavíme počet replík späť na 0. Po nasadení bude výsledok nasledovný:
Sčítanie
Manuálne spustenie nasadenia týmto spôsobom mi pomáha pochopiť, ako ľahko sa dá nakonfigurovať pomocou k8s. Keďže Kubernetes umožňuje aktualizovať všetko cez API, tieto kroky je možné automatizovať pomocou skriptov.
Ďalšou vecou, ktorú je potrebné implementovať, je vstupný bod testera (LoadBalancer alebo cez Ingress), cez ktorý je možné pristupovať iba k novej verzii. Dá sa použiť na manuálne prehliadanie.
V budúcich článkoch sa pozrieme na ďalšie automatizované riešenia, ktoré implementujú väčšinu toho, čo sme urobili.