Vi håper du leser første del, hvor vi kort forklarte hva Canary Deployments er. Vi viste også hvordan du implementerer det ved å bruke standard Kubernetes-ressurser.
Argo-utrullinger
Argo Rollouts er en innebygd Kubernetes-distribusjonskontroller. Den gir en CRD (Custom Resource Definition) for Kubernetes. Takket være det kan vi bruke en ny enhet: Rollout, som administrerer blågrønne og kanarifugl-utplasseringer med ulike konfigurasjonsalternativer.
Argo Rollouts-kontroller brukt av en tilpasset ressurs Rollout, Tillater ytterligere distribusjonsstrategier som blågrønn og kanarifugl for Kubernetes. Ressurs Rollout gir funksjonalitet tilsvarende Deployment, bare med ytterligere distribusjonsstrategier.
ressurs Deployments har to strategier for distribusjon: RollingUpdate и Recreate. Selv om disse strategiene er egnet for de fleste tilfeller, for distribusjon til servere i svært stor skala, brukes tilleggsstrategier, for eksempel blågrønn eller kanarifugl, som ikke er tilgjengelig i distribusjonskontrolleren. For å bruke disse strategiene i Kubernetes, måtte brukere skrive skript på toppen av sine distribusjoner. Argo Rollouts-kontrolleren viser disse strategiene som enkle, deklarative, konfigurerbare parametere. https://argoproj.github.io/argo-rollouts
Det er også Argo CI, som gir et praktisk webgrensesnitt for bruk med utrullinger, det skal vi ta en titt på i neste artikkel.
I vår infrastruktur turnip (se nedenfor) har vi allerede lagt til install.yaml som i/k8s/argo-rollouts/install.yaml. På denne måten vil GitlabCI installere den i klyngen.
Dette er en veldig enkel Python+Flask API som returnerer et svar som JSON. Vi vil bygge pakken ved å bruke GitlabCI og sende resultatet til Gitlab-registeret. I registret har vi to forskjellige utgivelsesversjoner:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
Den eneste forskjellen mellom dem er JSON-filen som returneres. Vi bruker denne applikasjonen for å visualisere så enkelt som mulig hvilken versjon vi kommuniserer med.
Infrastrukturlager
I dette depotet vil vi bruke GitlabCI for distribusjon til Kubernetes, .gitlab-ci.yml ser slik ut:
Rollout fungerer på samme måte som Deployment. Hvis vi ikke angir en oppdateringsstrategi (som Canary her) vil den oppføre seg som standard rullende oppdateringsimplementering.
Vi definerer to trinn i yaml for kanari-utplassering:
10 % av trafikken til Kanariøyene (vent på manuell OK)
50 % trafikk til Kanariøyene (vent 2 minutter og fortsett til 100 %)
Utfører innledende distribusjon
Etter den første distribusjonen vil ressursene våre se slik ut:
Og vi får svar bare fra den første versjonen av applikasjonen:
Utfører Canary Deployment
Trinn 1: 10 % trafikk
For å starte en kanari-distribusjon, trenger vi bare å endre bildeversjonen som vi vanligvis gjør med distribusjoner:
Jeg anbefaler virkelig denne videoen, den viser hvordan Argo Rollouts og Argo CI fungerer sammen:
Total
Jeg liker virkelig ideen om å bruke CRD-er som administrerer opprettelsen av flere typer distribusjoner eller replikasett, omdirigere trafikk, etc. Arbeidet med dem går greit. Deretter vil jeg teste integrasjonen med Argo CI.
Imidlertid ser det ut til at det kommer en stor sammenslåing av Argo CI og Flux CI, så jeg kan vente til den nye utgivelsen kommer ut: Argo Flux.
Har du hatt noen erfaring med Argo Rollouts eller Argo CI?