Vi hoppas att du läser första delen, där vi kort förklarade vad Canary Deployments är. Vi visade också hur man implementerar det med standard Kubernetes-resurser.
Argo utrullningar
Argo Rollouts är en inbyggd Kubernetes-distributionskontroller. Den tillhandahåller en CRD (Custom Resource Definition) för Kubernetes. Tack vare det kan vi använda en ny enhet: Rollout, som hanterar blågröna och kanariefågelinstallationer med olika konfigurationsalternativ.
Argo Rollouts-kontroller som används av en anpassad resurs Rollout, Tillåter ytterligare distributionsstrategier som blågrön och kanariefågel för Kubernetes. Resurs Rollout ger funktionalitet motsvarande Deployment, endast med ytterligare distributionsstrategier.
resurs Deployments har två strategier för implementering: RollingUpdate и Recreate. Även om dessa strategier är lämpliga för de flesta fall används ytterligare strategier för distribution till servrar i mycket stor skala, som blågrön eller kanariefågel, som inte är tillgängliga i distributionskontrollern. För att använda dessa strategier i Kubernetes, var användarna tvungna att skriva skript ovanpå sina implementeringar. Argo Rollouts Controller exponerar dessa strategier som enkla, deklarativa, konfigurerbara parametrar. https://argoproj.github.io/argo-rollouts
Det finns också Argo CI, som ger ett bekvämt webbgränssnitt för användning med utrullningar, det ska vi ta en titt på i nästa artikel.
I vår infrastruktur turnip (se nedan) har vi redan lagt till install.yaml som i/k8s/argo-rollouts/install.yaml. På så sätt kommer GitlabCI att installera det i klustret.
Detta är ett mycket enkelt Python+Flask API som returnerar ett svar som JSON. Vi kommer att bygga paketet med GitlabCI och skicka resultatet till Gitlab-registret. I registret har vi två olika versioner:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
Den enda skillnaden mellan dem är JSON-filen som returneras. Vi använder denna applikation för att så enkelt som möjligt visualisera vilken version vi kommunicerar med.
Infrastrukturförråd
I det här arkivet kommer vi att använda GitlabCI för distribution till Kubernetes, .gitlab-ci.yml ser ut så här:
Rollout fungerar på samma sätt som Deployment. Om vi inte ställer in en uppdateringsstrategi (som Canary här) kommer den att bete sig som standard rullande uppdatering Deployment.
Vi definierar två steg i yaml för kanariefågel:
10 % av trafiken till kanarieöarna (vänta på manuellt OK)
50 % trafik till kanarieöarna (vänta 2 minuter och fortsätt sedan till 100 %)
Utför inledande driftsättning
Efter den första implementeringen kommer våra resurser att se ut så här:
Och vi får ett svar endast från den första versionen av applikationen:
Utför Canary Deployment
Steg 1: 10 % trafik
För att starta en kanariefågel-distribution behöver vi bara ändra bildversionen som vi vanligtvis gör med implementeringar:
Jag rekommenderar verkligen den här videon, den visar hur Argo Rollouts och Argo CI fungerar tillsammans:
Totalt
Jag gillar verkligen idén att använda CRD:er som hanterar skapandet av ytterligare typer av distributioner eller repliker, omdirigering av trafik, etc. Arbetet med dem går smidigt. Härnäst skulle jag vilja testa integrationen med Argo CI.
Det verkar dock vara en stor sammanslagning av Argo CI och Flux CI på väg, så jag kan vänta tills den nya releasen kommer ut: Argo Flux.
Har du någon erfarenhet av Argo Rollouts eller Argo CI?