Canary տեղակայում Jenkins-X Istio Flagger-ի միջոցով
Canary տեղակայում
Հուսով ենք, որ դուք կարդաք առաջին մաս, որտեղ մենք հակիրճ բացատրեցինք, թե ինչ են Canary Deployments-ը: Մենք նաև ցույց տվեցինք, թե ինչպես կարելի է այն իրականացնել՝ օգտագործելով Kubernetes ստանդարտ ռեսուրսները:
Argo Rollouts
Argo Rollouts-ը Kubernetes-ի տեղական տեղակայման վերահսկիչ է: Այն ապահովում է CRD (Custom Resource Definition) Kubernetes-ի համար: Դրա շնորհիվ մենք կարող ենք օգտագործել նոր էություն. Rollout, որը կառավարում է կապտականաչ և դեղձանիկի տեղակայումները տարբեր կոնֆիգուրացիայի տարբերակներով:
Argo Rollouts վերահսկիչ, որն օգտագործվում է հատուկ ռեսուրսի կողմից Rollout, Թույլ է տալիս լրացուցիչ տեղակայման ռազմավարություններ, ինչպիսիք են՝ կապույտ-կանաչ և դեղձանիկ Kubernetes-ի համար: Ռեսուրս Rollout ապահովում է ֆունկցիոնալությունը համարժեք Deployment, միայն տեղակայման լրացուցիչ ռազմավարություններով:
ռեսուրսը Deployments ունի տեղակայման երկու ռազմավարություն. RollingUpdate и Recreate. Չնայած այս ռազմավարությունները հարմար են շատ դեպքերում, շատ մեծ մասշտաբով սերվերների վրա տեղակայման համար օգտագործվում են լրացուցիչ ռազմավարություններ, ինչպիսիք են կապույտ-կանաչ կամ դեղձանիկ, որոնք հասանելի չեն Deployment կարգավորիչում: Kubernetes-ում այս ռազմավարություններն օգտագործելու համար օգտատերերը պետք է գրեին սցենարներ իրենց տեղակայումների վերևում: Argo Rollouts Controller-ը բացահայտում է այս ռազմավարությունները որպես պարզ, դեկլարատիվ, կարգավորելի պարամետրեր: https://argoproj.github.io/argo-rollouts
Կա նաև Argo CI-ն, որն ապահովում է հարմար վեբ ինտերֆեյս Rollouts-ի հետ օգտագործելու համար, մենք դրան կանդրադառնանք հաջորդ հոդվածում:
Մեր ենթակառուցվածքի շաղգամում (տես ստորև) մենք արդեն ավելացրել ենք install.yaml որպես i/k8s/argo-rollouts/install.yaml: Այս կերպ GitlabCI-ն այն կտեղադրի կլաստերի մեջ:
Սա շատ պարզ Python+Flask API է, որը պատասխան է տալիս որպես JSON: Մենք կկառուցենք փաթեթը GitlabCI-ի միջոցով և արդյունքը կմղենք Gitlab ռեգիստր: Ռեեստրում մենք ունենք երկու տարբեր թողարկման տարբերակներ.
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
Նրանց միջև միակ տարբերությունը վերադարձված JSON ֆայլն է: Մենք օգտագործում ենք այս հավելվածը՝ հնարավորինս հեշտ պատկերացնելու համար, թե որ տարբերակի հետ ենք շփվում:
Ենթակառուցվածքի շտեմարան
Այս պահոցում մենք կօգտագործենք GitlabCI-ն Kubernetes-ում տեղակայման համար, .gitlab-ci.yml-ն այսպիսի տեսք ունի.
Rollout աշխատում է նույնը, ինչ տեղակայումը: Եթե մենք չսահմանենք թարմացման ռազմավարություն (ինչպես այստեղ կանարին), այն կվարվի այնպես, ինչպես կանխադրված շարժական թարմացման տեղակայումը:
Յամլում մենք սահմանում ենք երկու քայլ դեղձանիկի տեղակայման համար.
Երթևեկության 10%-ը դեպի դեղձանիկ (սպասեք ձեռքով OK)
50% երթևեկություն դեպի դեղձանիկ (սպասեք 2 րոպե, ապա շարունակեք մինչև 100%)
Նախնական տեղակայման կատարում
Նախնական տեղակայումից հետո մեր ռեսուրսները կունենան հետևյալ տեսքը.
Եվ մենք պատասխան ենք ստանում միայն հավելվածի առաջին տարբերակից.
Կատարում է Canary Deployment
Քայլ 1. 10% տրաֆիկ
Դեղձանիկների տեղակայումը սկսելու համար մենք պարզապես պետք է փոխենք պատկերի տարբերակը, ինչպես սովորաբար անում ենք տեղակայումների դեպքում.
Ես իսկապես խորհուրդ եմ տալիս այս տեսանյութը, այն ցույց է տալիս, թե ինչպես են Argo Rollouts-ը և Argo CI-ն միասին աշխատում.
Լրիվ
Ինձ շատ է դուր գալիս CRD-ների օգտագործման գաղափարը, որոնք կառավարում են տեղակայումների կամ կրկնօրինակների լրացուցիչ տեսակների ստեղծումը, վերահղման տրաֆիկը և այլն: Նրանց հետ աշխատանքը սահուն է ընթանում: Հաջորդը ես կցանկանայի փորձարկել ինտեգրումը Argo CI-ի հետ:
Այնուամենայնիվ, թվում է, որ գալիս է Argo CI-ի և Flux CI-ի մեծ միաձուլում, այնպես որ ես կարող եմ սպասել մինչև նոր թողարկումը դուրս գա. Argo Flux.
Ունեցե՞լ եք որևէ փորձ Argo Rollouts-ի կամ Argo CI-ի հետ: