Dabeşkirina Kanarya Jenkins-X Istio Flagger bikar tîne
Bicihkirina Kanarya
Em hêvî dikin ku hûn bixwînin beşa yekem, ku me bi kurtî rave kir ka Dabeşkirinên Canary çi ne. Me her weha destnîşan kir ka meriv wê çawa bi karanîna çavkaniyên standard Kubernetes bicîh tîne.
Argo Rollouts
Argo Rollouts kontrolkerek danûstendina xwecî ya Kubernetes e. Ew ji bo Kubernetes CRD (Pênase Çavkaniya Xweser) peyda dike. Bi saya wê, em dikarin saziyek nû bikar bînin: Rollout, ku bi vebijarkên cihêreng veavakirinê ve birêkûpêkkirina şîn-kesk û kanariyê birêve dibe.
Kontrolkerê Argo Rollouts ji hêla çavkaniyek xwerû ve tê bikar anîn Rollout, Ji bo Kubernetes-ê rê dide stratejiyên bicîhkirina zêde yên wekî şîn-kesk û canary. Kanî Rollout fonksiyonek wekhev peyda dike Deployment, tenê bi stratejiyên veqetandina zêde.
çavkaniyê binirxîne Deployments du stratejiyên ji bo belavkirinê hene: RollingUpdate и Recreate. Her çend ev stratejî ji bo pir rewşan maqûl in, ji bo bicîhkirina pêşkêşkeran di astek pir mezin de, stratejiyên din têne bikar anîn, wek şîn-kesk an kanarya, ku di kontrolkera Deployment de tune ne. Ji bo ku van stratejiyan li Kubernetes bikar bînin, bikarhêner neçar bûn ku li ser Dabeşkirinên xwe skrîptan binivîsin. Kontrolkerê Argo Rollouts van stratejiyan wekî pîvanên hêsan, daxuyandî, mîhengbar derdixe holê. https://argoproj.github.io/argo-rollouts
Di heman demê de Argo CI jî heye, ku ji bo karanîna bi Rollouts re navbeynkariyek webê ya hêsan peyda dike, em ê di gotara pêş de li wê mêze bikin.
Di zincîreya binesaziya me de (li jêr binêre) me berê install.yaml wekî i/k8s/argo-rollouts/install.yaml zêde kiriye. Bi vî rengî GitlabCI dê wê di komê de saz bike.
Ev Python + Flask API-ya pir hêsan e ku bersivek wekî JSON vedigerîne. Em ê pakêtê bi karanîna GitlabCI ava bikin û encamê berbi Registry Gitlab vekin. Di qeydê de du guhertoyên cûda yên berdanê hene:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
Cûdahiya di navbera wan de tenê pelê JSON vegerî ye. Em vê serîlêdanê bikar tînin da ku bi hêsanî bi kîjan guhertoya ku em pê re têkilî daynin xuyang bikin.
Depoya binesaziyê
Di vê depoyê de em ê GitlabCI-ê ji bo bicihkirina Kubernetes bikar bînin, .gitlab-ci.yml wiha xuya dike:
Rollout heman wekî Deployment dixebite. Ger em stratejiyek nûvekirinê saz nekin (mîna kanarya li vir) ew ê mîna Dabeşkirina nûvekirina nûvekirî ya xwerû tevbigere.
Em du gavan di yaml de ji bo bicîhkirina canary diyar dikin:
10% seyrûsefera kanariyê (li benda OK bi destan bisekinin)
50% seyrûsefera kanariyê (2 hûrdeman bisekinin paşê heya 100% bidomînin)
Bicihkirina destpêkê
Piştî belavkirina destpêkê, çavkaniyên me dê bi vî rengî xuya bikin:
Û em bersivek tenê ji guhertoya yekem a serîlêdanê digirin:
Bicihkirina Kanaryayê pêk tîne
Gav 1: 10% trafîkê
Ji bo ku em dest bi danîna kanariyê bikin, em tenê hewce ne ku guhertoya wêneyê biguhezînin wekî ku em bi gelemperî bi belavkirinan re dikin:
Ez bi rastî vê vîdyoyê pêşniyar dikim, ew destnîşan dike ka Argo Rollouts û Argo CI çawa bi hev re dixebitin:
Encam
Ez bi rastî ji ramana karanîna CRD-ên ku çêkirina cûreyên pêvekirî an berhevokan, rêvekirina seyrûseferê, hwd birêve dibin, hez dikim. Karkirina bi wan re bi hêsanî derbas dibe. Dûv re ez dixwazim entegrasyonê bi Argo CI re biceribînim.
Lêbelê, dixuye ku yekbûnek mezin a Argo CI û Flux CI tê, ji ber vê yekê ez dikarim li bendê bim heya ku serbestberdana nû derkeve: Argo Flux.
Ma bi Argo Rollouts an Argo CI re ezmûnek we heye?