Desplegament de Canary mitjançant Jenkins-X Istio Flagger
Desplegament Canari
Esperem que llegiu primera part, on vam explicar breument què són els Desplegaments Canaris. També vam mostrar com implementar-lo mitjançant els recursos estàndard de Kubernetes.
Desplegaments d'Argo
Argo Rollouts és un controlador de desplegament natiu de Kubernetes. Proporciona un CRD (Custom Resource Definition) per a Kubernetes. Gràcies a això, podem utilitzar una nova entitat: Rollout, que gestiona els desplegaments de color blau-verd i canari amb diverses opcions de configuració.
Controlador Argo Rollouts utilitzat per un recurs personalitzat Rollout, Permet estratègies de desplegament addicionals com ara blau-verd i canari per a Kubernetes. Recurs Rollout proporciona una funcionalitat equivalent Deployment, només amb estratègies de desplegament addicionals.
recurs Deployments té dues estratègies de desplegament: RollingUpdate и Recreate. Tot i que aquestes estratègies són adequades per a la majoria dels casos, per a la implementació a servidors a gran escala, s'utilitzen estratègies addicionals, com ara blau-verd o canari, que no estan disponibles al controlador de desplegament. Per utilitzar aquestes estratègies a Kubernetes, els usuaris havien d'escriure scripts a sobre dels seus desplegaments. El controlador Argo Rollouts exposa aquestes estratègies com a paràmetres simples, declaratius i configurables. https://argoproj.github.io/argo-rollouts
També hi ha Argo CI, que proporciona una interfície web còmoda per utilitzar-la amb desplegaments, ho farem una ullada al proper article.
A la nostra infraestructura de nap (vegeu més avall) ja hem afegit install.yaml com i/k8s/argo-rollouts/install.yaml. D'aquesta manera, GitlabCI l'instal·larà al clúster.
Aquesta és una API Python+Flask molt senzilla que retorna una resposta com a JSON. Construirem el paquet utilitzant GitlabCI i enviarem el resultat al registre de Gitlab. Al registre tenim dues versions de llançament diferents:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
L'única diferència entre ells és el fitxer JSON retornat. Utilitzem aquesta aplicació per visualitzar el més fàcilment possible amb quina versió ens estem comunicant.
Repositori d'infraestructura
En aquest repositori utilitzarem GitlabCI per al desplegament a Kubernetes, .gitlab-ci.yml té aquest aspecte:
Rollout funciona igual que el desplegament. Si no establim una estratègia d'actualització (com ara Canary aquí), es comportarà com el desplegament d'actualització continua per defecte.
Definim dos passos a Yaml per al desplegament de Canary:
10% del trànsit a Canary (espera que el manual estigui bé)
50% de trànsit a Canary (espera 2 minuts i després continua fins al 100%)
Realització del desplegament inicial
Després del desplegament inicial, els nostres recursos seran així:
I només rebem una resposta de la primera versió de l'aplicació:
Realitzant el desplegament canari
Pas 1: 10% de trànsit
Per iniciar un desplegament canari, només hem de canviar la versió de la imatge tal com fem habitualment amb els desplegaments:
Realment recomano aquest vídeo, que mostra com Argo Rollouts i Argo CI treballen junts:
Total
M'agrada molt la idea d'utilitzar CRDs que gestionen la creació de tipus addicionals de desplegaments o rèpliques, redirigeix el trànsit, etc. Treballar amb ells va bé. A continuació, m'agradaria provar la integració amb Argo CI.
Tanmateix, sembla que hi haurà una gran fusió d'Argo CI i Flux CI, així que podria esperar fins que surti la nova versió: Argo Flux.
Heu tingut alguna experiència amb Argo Rollouts o Argo CI?