Wij hopen dat je leest eerste deel, waar we kort hebben uitgelegd wat Canary Deployments zijn. We hebben ook laten zien hoe u dit kunt implementeren met behulp van standaard Kubernetes-bronnen.
Argo-uitrol
Argo Rollouts is een native implementatiecontroller van Kubernetes. Het biedt een CRD (Custom Resource Definition) voor Kubernetes. Dankzij dit kunnen we een nieuwe entiteit gebruiken: Rollout, dat blauw-groene en kanarie-implementaties beheert met verschillende configuratie-opties.
Argo Rollouts-controller gebruikt door een aangepaste bron Rollout, Maakt aanvullende implementatiestrategieën mogelijk, zoals blauwgroen en kanarie voor Kubernetes. Bron Rollout biedt functionaliteit gelijkwaardig Deployment, alleen met aanvullende implementatiestrategieën.
hulpbron Deployments heeft twee strategieën voor implementatie: RollingUpdate и Recreate. Hoewel deze strategieën in de meeste gevallen geschikt zijn, worden er voor implementatie op servers op zeer grote schaal aanvullende strategieën gebruikt, zoals blauw-groen of kanarie, die niet beschikbaar zijn in de Deployment-controller. Om deze strategieën in Kubernetes te gebruiken, moesten gebruikers scripts schrijven bovenop hun implementaties. De Argo Rollouts Controller stelt deze strategieën bloot als eenvoudige, declaratieve, configureerbare parameters. https://argoproj.github.io/argo-rollouts
Er is ook Argo CI, dat een handige webinterface biedt voor gebruik met Rollouts, daar zullen we in het volgende artikel naar kijken.
In onze infrastructuurraap (zie hieronder) hebben we install.yaml al toegevoegd als i/k8s/argo-rollouts/install.yaml. Op deze manier zal GitlabCI het in het cluster installeren.
Dit is een heel eenvoudige Python+Flask API die een antwoord retourneert als JSON. We zullen het pakket bouwen met GitlabCI en het resultaat naar de Gitlab Registry pushen. In het register hebben we twee verschillende releaseversies:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
Het enige verschil tussen beide is het geretourneerde JSON-bestand. Wij gebruiken deze applicatie om zo eenvoudig mogelijk te visualiseren met welke versie wij communiceren.
Opslagplaats voor infrastructuur
In deze repository zullen we GitlabCI gebruiken voor implementatie in Kubernetes, .gitlab-ci.yml ziet er als volgt uit:
Rollout werkt hetzelfde als Implementatie. Als we geen updatestrategie instellen (zoals hier Canary), zal deze zich gedragen als de standaard Rolling Update-implementatie.
We definiëren twee stappen in yaml voor de implementatie van kanaries:
10% van het verkeer naar Canary (wacht op handmatige OK)
50% verkeer naar Canary (wacht 2 minuten en ga dan door naar 100%)
Eerste implementatie uitvoeren
Na de eerste implementatie zien onze resources er als volgt uit:
En we krijgen alleen een reactie van de eerste versie van de applicatie:
Kanarie-implementatie uitvoeren
Stap 1: 10% verkeer
Om een kanarie-implementatie te starten, hoeven we alleen maar de imageversie te wijzigen, zoals we gewoonlijk doen met implementaties:
Ik raad deze video echt aan, deze laat zien hoe Argo Rollouts en Argo CI samenwerken:
Totaal
Ik hou echt van het idee om CRD's te gebruiken die de creatie van extra soorten implementaties of replicasets beheren, verkeer omleiden, enz. De samenwerking met hen verloopt soepel. Vervolgens wil ik graag de integratie met Argo CI testen.
Er lijkt echter een grote fusie van Argo CI en Flux CI op komst, dus ik zou kunnen wachten tot de nieuwe release uitkomt: Argo Flux.