Implementazione di Canary cù Jenkins-X Istio Flagger
Impiegazione Canaria
Speremu chì leghjite prima parte, induve avemu spiegatu brevemente ciò chì i Deployments Canary sò. Avemu ancu dimustratu cumu implementà cù risorse standard Kubernetes.
Argo Rollouts
Argo Rollouts hè un controller di implementazione nativa di Kubernetes. Fornisce un CRD (Custom Resource Definition) per Kubernetes. Grazie à questu, pudemu usà una nova entità: Rollout, chì gestisce implementazioni blu-verde è canarinu cù diverse opzioni di cunfigurazione.
Controller Argo Rollouts utilizatu da una risorsa persunalizata Rollout, Permette strategie di implementazione supplementari cum'è blu-verde è canarinu per Kubernetes. Risorsa Rollout furnisce funziunalità equivalente Deployment, solu cù strategie di implementazione supplementari.
risorsa Deployments hà duie strategie di implementazione: RollingUpdate и Recreate. Ancu s'è sti stratèggi sò adattati per a maiò parte di i casi, per a implementazione à i servitori in una scala assai grande, strategie supplementari sò aduprate, cum'è blu-verde o canarinu, chì ùn sò micca dispunibili in u controller di Deployment. Per utilizà queste strategie in Kubernetes, l'utilizatori anu da scrive script in cima à e so Impiegazioni. L'Argo Rollouts Controller espone queste strategie cum'è paràmetri simplici, dichjarativi, configurabili. https://argoproj.github.io/argo-rollouts
Ci hè ancu Argo CI, chì furnisce una interfaccia web còmuda per l'usu cù Rollouts, avemu da piglià un ochju à questu in u prossimu articulu.
In a nostra infrastruttura turnip (vede sottu) avemu digià aghjuntu install.yaml cum'è i/k8s/argo-rollouts/install.yaml. Questu modu GitlabCI l'installarà in u cluster.
Questa hè una API Python + Flask assai simplice chì torna una risposta cum'è JSON. Custruiremu u pacchettu usendu GitlabCI è spingemu u risultatu à u Registru Gitlab. In u registru avemu duie versioni di liberazione diverse:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
L'unica diferenza trà elli hè u schedariu JSON restituitu. Utilizemu sta applicazione per visualizà u più faciule pussibule cù quale versione avemu cumunicatu.
Repositoriu di l'infrastruttura
In questu repository useremu GitlabCI per a distribuzione à Kubernetes, .gitlab-ci.yml s'assumiglia cusì:
Rollout funziona u listessu cum'è Deployment. Se ùn avemu micca stabilitu una strategia d'aghjurnamentu (cum'è canarinu quì) si cumportarà cum'è u Deployment rolling-update predeterminatu.
Definimu dui passi in yaml per l'implementazione canaria:
10% di u trafficu à i canari (aspittà u manuale OK)
50% di u trafficu à i canari (aspittà 2 minuti poi cuntinuà à 100%)
Esecuzione di implementazione iniziale
Dopu a implementazione iniziale, i nostri risorse seranu cusì:
È avemu una risposta solu da a prima versione di l'applicazione:
Eseguisce l'implementazione di Canary
Passu 1: 10% trafficu
Per inizià una implementazione canaria, avemu solu bisognu di cambià a versione di l'imaghjini cum'è di solitu facemu cù implementazioni:
Aghju veramente cunsigliatu stu video, mostra cumu Argo Rollouts è Argo CI travaglianu inseme:
U risultatu
Mi piace assai l'idea d'utilizà CRDs chì gestiscenu a creazione di tipi supplementari di implementazioni o replicasets, redirect trafficu, etc. Travaglià cun elli va bè. In seguitu vogliu pruvà l'integrazione cù Argo CI.
Tuttavia, pare chì ci sia una grande fusione di Argo CI è Flux CI chì vene, cusì puderia aspittà finu à chì a nova versione esce: Argo Flux.
Avete avutu una sperienza cù Argo Rollouts o Argo CI?
Leghjite ancu altri articuli nantu à u nostru blog: