Speriamo che tu legga la prima parte, dove abbiamo spiegato brevemente cosa sono i Canary Deployments. Abbiamo anche mostrato come implementarlo utilizzando le risorse Kubernetes standard.
Presentazioni di Argo
Argo Rollouts è un controller di distribuzione nativo di Kubernetes. Fornisce una CRD (Custom Resource Definition) per Kubernetes. Grazie ad esso, possiamo utilizzare una nuova entità: Rollout, che gestisce le distribuzioni blu-verde e canary con varie opzioni di configurazione.
Controller Argo Rollouts utilizzato da una risorsa personalizzata Rollout, Consente strategie di distribuzione aggiuntive come blu-verde e canarino per Kubernetes. Risorsa Rollout fornisce funzionalità equivalenti Deployment, solo con strategie di distribuzione aggiuntive.
risorsa Deployments ha due strategie di distribuzione: RollingUpdate и Recreate. Sebbene queste strategie siano adatte per la maggior parte dei casi, per la distribuzione su server su larga scala vengono utilizzate strategie aggiuntive, ad esempio blu-verde o canarino, che non sono disponibili nel controller di distribuzione. Per utilizzare queste strategie in Kubernetes, gli utenti dovevano scrivere script sopra le loro distribuzioni. Argo Rollouts Controller espone queste strategie come parametri semplici, dichiarativi e configurabili. https://argoproj.github.io/argo-rollouts
C'è anche Argo CI, che fornisce una comoda interfaccia web da utilizzare con Rollouts, ne parleremo nel prossimo articolo.
Nella nostra infrastruttura rapa (vedi sotto) abbiamo già aggiunto install.yaml come i/k8s/argo-rollouts/install.yaml. In questo modo GitlabCI lo installerà nel cluster.
Questa è un'API Python+Flask molto semplice che restituisce una risposta come JSON. Costruiremo il pacchetto utilizzando GitlabCI e invieremo il risultato al registro Gitlab. Nel registro abbiamo due diverse versioni di rilascio:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
L'unica differenza tra loro è il file JSON restituito. Utilizziamo questa applicazione per visualizzare nel modo più semplice possibile con quale versione stiamo comunicando.
Archivio dell'infrastruttura
In questo repository utilizzeremo GitlabCI per la distribuzione su Kubernetes, .gitlab-ci.yml si presenta così:
Rollout funziona allo stesso modo della distribuzione. Se non impostiamo una strategia di aggiornamento (come Canary qui) si comporterà come la distribuzione predefinita degli aggiornamenti in sequenza.
Definiamo due passaggi in yaml per la distribuzione canary:
10% del traffico verso Canary (attendere l'OK manuale)
Traffico del 50% verso Canary (attendi 2 minuti e poi prosegui fino al 100%)
Esecuzione della distribuzione iniziale
Dopo la distribuzione iniziale, le nostre risorse appariranno così:
E riceviamo una risposta solo dalla prima versione dell'applicazione:
Esecuzione della distribuzione Canary
Passaggio 1: 10% di traffico
Per avviare una distribuzione Canary, dobbiamo solo modificare la versione dell'immagine come facciamo di solito con le distribuzioni:
Consiglio vivamente questo video, mostra come Argo Rollouts e Argo CI lavorano insieme:
risultato
Mi piace molto l'idea di utilizzare CRD che gestiscano la creazione di ulteriori tipi di distribuzioni o replicaset, reindirizzare il traffico, ecc. Lavorare con loro procede senza intoppi. Successivamente vorrei testare l'integrazione con Argo CI.
Tuttavia, sembra che sia in arrivo una grande fusione tra Argo CI e Flux CI, quindi potrei aspettare fino all'uscita della nuova versione: Flusso Argo.