Kanarie-ontplooiing met behulp van Jenkins-X Istio Flagger
Kanarie-ontplooiing
Ons hoop jy lees eerste deel, waar ons kortliks verduidelik het wat Canary Deployments is. Ons het ook gewys hoe om dit te implementeer met behulp van standaard Kubernetes-hulpbronne.
Argo-ontplooiings
Argo Rollouts is 'n Kubernetes-inheemse ontplooiingsbeheerder. Dit verskaf 'n CRD (Custom Resource Definition) vir Kubernetes. Danksy dit kan ons 'n nuwe entiteit gebruik: Rollout, wat blougroen en kanarie-ontplooiings bestuur met verskeie konfigurasie-opsies.
Argo-uitrolbeheerder wat deur 'n pasgemaakte hulpbron gebruik word Rollout, Maak voorsiening vir bykomende ontplooiingstrategieë soos blougroen en kanarie vir Kubernetes. Hulpbron Rollout bied funksionaliteit ekwivalent Deployment, slegs met bykomende ontplooiingstrategieë.
hulpbron Deployments het twee strategieë vir ontplooiing: RollingUpdate и Recreate. Alhoewel hierdie strategieë vir die meeste gevalle geskik is, word addisionele strategieë gebruik vir ontplooiing na bedieners op 'n baie groot skaal, soos blougroen of kanarie, wat nie in die Ontplooiingsbeheerder beskikbaar is nie. Om hierdie strategieë in Kubernetes te gebruik, moes gebruikers skrifte bo-op hul Ontplooiings skryf. Die Argo-uitrolbeheerder stel hierdie strategieë bloot as eenvoudige, verklarende, konfigureerbare parameters. https://argoproj.github.io/argo-rollouts
Daar is ook Argo CI, wat 'n gerieflike webkoppelvlak bied vir gebruik met ontplooiings, ons sal daarna in die volgende artikel kyk.
In ons infrastruktuurraap (sien hieronder) het ons reeds install.yaml bygevoeg as i/k8s/argo-rollouts/install.yaml. Op hierdie manier sal GitlabCI dit in die groep installeer.
Dit is 'n baie eenvoudige Python+Flask API wat 'n antwoord as JSON gee. Ons sal die pakket met GitlabCI bou en die resultaat na die Gitlab-register stoot. In die register het ons twee verskillende weergawes:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
Die enigste verskil tussen hulle is die JSON-lêer wat teruggestuur word. Ons gebruik hierdie toepassing om so maklik as moontlik te visualiseer met watter weergawe ons kommunikeer.
Infrastruktuurbewaarplek
In hierdie bewaarplek sal ons GitlabCI gebruik vir ontplooiing na Kubernetes, .gitlab-ci.yml lyk soos volg:
Rollout werk dieselfde as Ontplooiing. As ons nie 'n opdateringstrategie (soos kanarie hier) stel nie, sal dit optree soos die verstek-rollende opdatering-ontplooiing.
Ons definieer twee stappe in yaml vir kanarie-ontplooiing:
10% van die verkeer na kanarie (wag vir handleiding OK)
50% verkeer na kanarie (wag 2 minute en gaan dan voort na 100%)
Voer aanvanklike ontplooiing uit
Na die aanvanklike ontplooiing sal ons hulpbronne soos volg lyk:
En ons kry slegs 'n antwoord vanaf die eerste weergawe van die toepassing:
Voer Kanarie-ontplooiing uit
Stap 1: 10% verkeer
Om 'n kanarie-ontplooiing te begin, moet ons net die beeldweergawe verander soos ons gewoonlik met ontplooiings doen:
Ek beveel hierdie video regtig aan, dit wys hoe Argo Rollouts en Argo CI saamwerk:
Totale
Ek hou baie van die idee om CRD's te gebruik wat die skep van bykomende tipes ontplooiings of replikasets bestuur, verkeer herlei, ens. Werk met hulle verloop glad. Volgende wil ek die integrasie met Argo CI toets.
Dit blyk egter dat daar 'n groot samesmelting van Argo CI en Flux CI kom, so ek kan wag totdat die nuwe vrystelling uitkom: Argo Flux.
Het jy enige ervaring met Argo Rollouts of Argo CI gehad?