Canary Deployment bl-użu ta' Jenkins-X Istio Flagger
Aħna se nwettqu l-iskjerament tal-Canary manwalment permezz ta 'GitOps u noħolqu/nimmodifikaw ir-riżorsi ewlenin ta' Kubernetes. Dan l-artikolu huwa maħsub primarjament għall-introduzzjoni ma 'kif jaħdem l-iskjerament f'Kubernetes Canary, peress li hemm metodi aktar effettivi ta' awtomazzjoni, li se nikkunsidraw fl-artikoli li ġejjin.
Bl-istrateġija Canary, l-aġġornamenti huma l-ewwel applikati għal subsett ta' utenti biss. Permezz ta 'monitoraġġ, dejta tal-log, ittestjar manwali, jew kanali ta' feedback oħra, ir-rilaxx jiġi ttestjat qabel ma jiġi rilaxxat lill-utenti kollha.
Kubernetes Deployment (aġġornament kontinwu)
L-istrateġija awtomatika għal Kubernetes Deployment hija rolling-update, fejn ċertu numru ta 'miżwed huma mnedija b'verżjonijiet ġodda tal-immaġini. Jekk inħolqu mingħajr problemi, imżiewed b'verżjonijiet qodma ta 'immaġini jintemmu, u mżiewed ġodda jinħolqu b'mod parallel.
GitOps
Aħna nużaw GitOps f'dan l-eżempju għaliex aħna:
billi tuża Git bħala sors wieħed tal-verità
nużaw Operazzjonijiet Git għall-bini u l-iskjerament (mhu meħtieġ l-ebda kmandi għajr git tag/merge)
Eżempju
Ejja nieħdu prattika tajba - biex ikollna repożitorju wieħed għall-kodiċi tal-applikazzjoni u wieħed għall-infrastruttura.
Repożitorju tal-applikazzjonijiet
Din hija API Python+Flask sempliċi ħafna li tirritorna tweġiba bħala JSON. Aħna se nibnu l-pakkett permezz ta 'GitlabCI u nimbottaw ir-riżultat lir-Reġistru Gitlab. Fir-reġistru għandna żewġ verżjonijiet ta 'rilaxx differenti:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
L-unika differenza bejniethom hija l-bidla fil-fajl JSON lura. Aħna nużaw din l-applikazzjoni biex naraw kemm jista' jkun faċilment liema verżjoni qed nikkomunikaw magħha.
Repożitorju ta' l-infrastruttura
F'dan in-nevew ser niskjeraw permezz ta' GitlabCI għal Kubernetes, .gitlab-ci.yml jidher bħal dan:
Aħna nimbuttaw dawn il-bidliet fir-repożitorju li minnu jibda l-iskjerament (permezz ta' GitlabCI) u naraw bħala riżultat:
Is-Servizz tagħna se jindika ż-żewġ skjeramenti, peress li t-tnejn għandhom is-selettur tal-app. Minħabba l-randomizzazzjoni default ta' Kubernetes, għandna naraw tweġibiet differenti għal ~ 10% tat-talbiet:
L-istat attwali tal-applikazzjoni tagħna (GitOps, meħuda minn Git bħala Sors Uniku tal-Verità) huwa l-preżenza ta 'żewġ skjeramenti b'repliki attivi, waħda għal kull verżjoni.
~10% tal-utenti jsiru familjari ma' verżjoni ġdida u jittestjawha mhux intenzjonalment. Issa huwa ż-żmien li tivverifika l-iżbalji fir-zkuk u d-dejta tal-monitoraġġ biex issib problemi.
Pass 2: Irrilaxxa l-verżjoni l-ġdida lill-utenti kollha
Iddeċidejna li kollox mar tajjeb u issa rridu nwasslu l-verżjoni l-ġdida lill-utenti kollha. Biex nagħmlu dan aħna sempliċement naġġornaw deploy.yaml installazzjoni ta’ verżjoni ġdida tal-immaġni u n-numru ta’ repliki ugwali għal 10. Fil deploy-canary.yaml aħna nissettjaw in-numru ta 'repliki lura għal 0. Wara l-iskjerament, ir-riżultat se jkun kif ġej:
Bħala sinteżi
Għalija, it-tħaddim tal-iskjerament manwalment b'dan il-mod jgħin biex nifhem kemm jista 'jiġi kkonfigurat faċilment bl-użu ta' k8s. Peress li Kubernetes jippermettilek taġġorna kollox permezz ta' API, dawn il-passi jistgħu jiġu awtomatizzati permezz ta' skripts.
Ħaġa oħra li jeħtieġ li tiġi implimentata hija punt tad-dħul tat-tester (LoadBalancer jew permezz ta 'Ingress) li permezz tiegħu tista' tiġi aċċessata biss il-verżjoni l-ġdida. Jista 'jintuża għall-ibbrawżjar manwali.
F'artikoli futuri, ser niċċekkjaw soluzzjonijiet awtomatizzati oħra li jimplimentaw ħafna minn dak li għamilna.