Dúfame, že čítate prvá časť, kde sme si v krátkosti vysvetlili, čo sú to Canary Deployments. Ukázali sme tiež, ako to implementovať pomocou štandardných zdrojov Kubernetes.
Zavádzanie Argo
Argo Rollouts je natívny radič nasadenia Kubernetes. Poskytuje CRD (Custom Resource Definition) pre Kubernetes. Vďaka nej môžeme použiť novú entitu: Rollout, ktorý spravuje modro-zelené a kanárske nasadenie s rôznymi možnosťami konfigurácie.
Ovládač Argo Rollouts používaný vlastným zdrojom Rollout, Umožňuje ďalšie stratégie nasadenia, ako je modrozelená a kanáriková pre Kubernetes. Zdroj Rollout poskytuje ekvivalentnú funkčnosť Deploymentlen s dodatočnými stratégiami nasadenia.
prostriedky Deployments má dve stratégie nasadenia: RollingUpdate и Recreate. Aj keď sú tieto stratégie vhodné pre väčšinu prípadov, na nasadenie na servery vo veľmi veľkom meradle sa používajú ďalšie stratégie, ako napríklad modrozelená alebo kanáriková, ktoré nie sú dostupné v ovládači nasadenia. Na použitie týchto stratégií v Kubernetes museli používatelia písať skripty nad rámec svojich nasadení. Argo Rollouts Controller odhaľuje tieto stratégie ako jednoduché, deklaratívne, konfigurovateľné parametre. https://argoproj.github.io/argo-rollouts
Existuje aj Argo CI, ktoré poskytuje pohodlné webové rozhranie na použitie s Rollouts, na to sa pozrieme v ďalšom článku.
V našej infraštruktúre okrúhlice (pozri nižšie) sme už pridali install.yaml ako i/k8s/argo-rollouts/install.yaml. Týmto spôsobom ho GitlabCI nainštaluje do klastra.
Toto je veľmi jednoduché Python+Flask API, ktoré vracia odpoveď ako JSON. Balík vytvoríme pomocou 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 vrátený súbor JSON. Túto aplikáciu používame na čo najjednoduchšiu vizualizáciu, s ktorou verziou komunikujeme.
Úložisko infraštruktúry
V tomto úložisku použijeme GitlabCI na nasadenie do Kubernetes, .gitlab-ci.yml vyzerá takto:
Rollout funguje rovnako ako Deployment. Ak nenastavíme stratégiu aktualizácie (ako tu kanárik), bude sa správať ako predvolené nasadenie rolling-update.
Definujeme dva kroky v yaml pre nasadenie canary:
10 % premávky na Kanárske ostrovy (čakajte na manuálne OK)
50 % návštevnosť na Kanárske ostrovy (počkajte 2 minúty a potom pokračujte na 100 %)
Vykonávanie počiatočného nasadenia
Po počiatočnom nasadení budú naše zdroje vyzerať takto:
A dostávame odpoveď len z prvej verzie aplikácie:
Vykonávanie kanárskeho nasadenia
Krok 1: 10 % návštevnosť
Ak chcete spustiť nasadenie canary, stačí zmeniť verziu obrázka, ako to zvyčajne robíme pri nasadení:
Toto video naozaj odporúčam, ukazuje, ako Argo Rollouts a Argo CI spolupracujú:
Celkový
Veľmi sa mi páči myšlienka používania CRD, ktoré riadia vytváranie ďalších typov nasadení alebo replikátov, presmerovanie prevádzky atď. Práca s nimi ide hladko. Ďalej by som chcel otestovať integráciu s Argo CI.
Zdá sa však, že prichádza veľká fúzia Argo CI a Flux CI, takže môžem počkať, kým vyjde nové vydanie: Argo Flux.
Máte nejaké skúsenosti s Argo Rollouts alebo Argo CI?