Sperăm să citiți Prima parte, unde am explicat pe scurt ce sunt implementările Canary. De asemenea, am arătat cum să-l implementăm folosind resurse standard Kubernetes.
Lansări Argo
Argo Rollouts este un controler de implementare nativ Kubernetes. Oferă un CRD (Custom Resource Definition) pentru Kubernetes. Datorită acesteia, putem folosi o nouă entitate: Rollout, care gestionează implementările albastru-verde și canar cu diverse opțiuni de configurare.
Controlerul Argo Rollouts folosit de o resursă personalizată Rollout, Permite strategii suplimentare de implementare, cum ar fi albastru-verde și canary pentru Kubernetes. Resursă Rollout oferă funcționalitate echivalentă Deployment, doar cu strategii suplimentare de implementare.
resursă Deployments are două strategii de implementare: RollingUpdate и Recreate. Deși aceste strategii sunt potrivite pentru majoritatea cazurilor, pentru implementarea pe servere la scară foarte mare, sunt folosite strategii suplimentare, cum ar fi albastru-verde sau canary, care nu sunt disponibile în controlerul de implementare. Pentru a folosi aceste strategii în Kubernetes, utilizatorii au trebuit să scrie scripturi peste implementările lor. Argo Rollouts Controller expune aceste strategii ca parametri simpli, declarativi, configurabili. https://argoproj.github.io/argo-rollouts
Există și Argo CI, care oferă o interfață web convenabilă pentru utilizare cu lansări, vom arunca o privire la asta în articolul următor.
În infrastructura noastră (vezi mai jos) am adăugat deja install.yaml ca i/k8s/argo-rollouts/install.yaml. În acest fel, GitlabCI îl va instala în cluster.
Acesta este un API Python+Flask foarte simplu, care returnează un răspuns ca JSON. Vom construi pachetul folosind GitlabCI și vom împinge rezultatul în Registrul Gitlab. În registru avem două versiuni de lansare diferite:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
Singura diferență dintre ele este fișierul JSON returnat. Folosim această aplicație pentru a vizualiza cât mai ușor cu ce versiune comunicăm.
Depozitul de infrastructură
În acest depozit vom folosi GitlabCI pentru implementarea în Kubernetes, .gitlab-ci.yml arată astfel:
Rollout funcționează la fel ca Deployment. Dacă nu setăm o strategie de actualizare (cum ar fi Canary aici), aceasta se va comporta ca implementarea implicită de actualizare rulantă.
Definim doi pași în yaml pentru implementarea Canary:
10% din trafic către Canary (așteptați OK manualul)
50% trafic către Canary (așteptați 2 minute apoi continuați până la 100%)
Efectuarea implementării inițiale
După implementarea inițială, resursele noastre vor arăta astfel:
Și primim un răspuns doar de la prima versiune a aplicației:
Efectuarea desfășurării Canary
Pasul 1: 10% trafic
Pentru a începe o implementare Canary, trebuie doar să schimbăm versiunea imaginii așa cum facem de obicei cu implementările:
Recomand cu adevărat acest videoclip, care arată modul în care Argo Rollouts și Argo CI lucrează împreună:
Total
Îmi place foarte mult ideea de a folosi CRD-uri care gestionează crearea de tipuri suplimentare de implementări sau replicaset-uri, redirecționează traficul etc. Lucrul cu ei decurge fără probleme. În continuare, aș dori să testez integrarea cu Argo CI.
Cu toate acestea, se pare că urmează o mare fuziune a Argo CI și Flux CI, așa că aș putea aștepta până când apare noua versiune: Argo Flux.
Ai avut vreo experiență cu Argo Rollouts sau Argo CI?