Canary Deployment ved hjælp af Jenkins-X Istio Flagger
Kanariske indsættelse
Vi håber du læser med første del, hvor vi kort forklarede, hvad Canary Deployments er. Vi viste også, hvordan man implementerer det ved hjælp af standard Kubernetes-ressourcer.
Argo udrulninger
Argo Rollouts er en indbygget Kubernetes-implementeringscontroller. Det giver en CRD (Custom Resource Definition) til Kubernetes. Takket være det kan vi bruge en ny enhed: Rollout, som administrerer blågrønne og kanariske installationer med forskellige konfigurationsmuligheder.
Argo Rollouts-controller brugt af en tilpasset ressource Rollout, Giver mulighed for yderligere implementeringsstrategier såsom blå-grøn og kanariefugle for Kubernetes. Ressource Rollout giver tilsvarende funktionalitet Deployment, kun med yderligere implementeringsstrategier.
ressource Deployments har to strategier til implementering: RollingUpdate и Recreate. Selvom disse strategier er velegnede til de fleste tilfælde, bruges der yderligere strategier til udrulning til servere i meget stor skala, såsom blå-grøn eller kanarisk, som ikke er tilgængelige i implementeringscontrolleren. For at bruge disse strategier i Kubernetes skulle brugerne skrive scripts oven på deres implementeringer. Argo Rollouts-controlleren afslører disse strategier som enkle, deklarative, konfigurerbare parametre. https://argoproj.github.io/argo-rollouts
Der er også Argo CI, som giver en praktisk webgrænseflade til brug med udrulninger, det tager vi et kig på i næste artikel.
I vores infrastruktur turnip (se nedenfor) har vi allerede tilføjet install.yaml som i/k8s/argo-rollouts/install.yaml. På denne måde vil GitlabCI installere det i klyngen.
Dette er en meget simpel Python+Flask API, der returnerer et svar som JSON. Vi bygger pakken ved hjælp af GitlabCI og skubber resultatet til Gitlab Registry. I registreringsdatabasen har vi to forskellige udgivelsesversioner:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
Den eneste forskel mellem dem er den returnerede JSON-fil. Vi bruger denne applikation til så let som muligt at visualisere, hvilken version vi kommunikerer med.
Infrastrukturlager
I dette lager vil vi bruge GitlabCI til udrulning til Kubernetes, .gitlab-ci.yml ser sådan ud:
Rollout fungerer på samme måde som Deployment. Hvis vi ikke sætter en opdateringsstrategi (som Canary her) vil den opføre sig som standard rullende opdateringsimplementering.
Vi definerer to trin i yaml til kanarie-udrulning:
10 % af trafikken til Kanarieøerne (vent på manuel OK)
50 % trafik til Canary (vent 2 minutter og fortsæt derefter til 100 %)
Udførelse af indledende implementering
Efter den indledende implementering vil vores ressourcer se sådan ud:
Og vi får kun et svar fra den første version af applikationen:
Udførelse af Canary Deployment
Trin 1: 10 % trafik
For at starte en kanarie-implementering skal vi bare ændre billedversionen, som vi plejer med implementeringer:
Jeg anbefaler virkelig denne video, den viser, hvordan Argo Rollouts og Argo CI arbejder sammen:
Total
Jeg kan virkelig godt lide ideen om at bruge CRD'er, der styrer oprettelsen af yderligere typer implementeringer eller replikasæt, omdirigere trafik osv. Arbejdet med dem går glat. Dernæst vil jeg gerne teste integrationen med Argo CI.
Der ser dog ud til at være en stor fusion af Argo CI og Flux CI på vej, så jeg kan vente, indtil den nye udgivelse kommer ud: Argo Flux.
Har du nogen erfaring med Argo Rollouts eller Argo CI?