Kanarų diegimas Kubernetes Nr. 2: „Argo Rollouts“.

Naudosime k8s vietinį Argo Rollouts diegimo valdiklį ir GitlabCI, kad paleistume „Canary“ diegimą „Kubernetes“

Kanarų diegimas Kubernetes Nr. 2: „Argo Rollouts“.

https://unsplash.com/photos/V41PulGL1z0

Šios serijos straipsniai

Kanarų dislokavimas

Tikimės, kad perskaitėte pirma dalis, kur trumpai paaiškinome, kas yra Canary Deployments. Taip pat parodėme, kaip tai įgyvendinti naudojant standartinius Kubernetes išteklius.

Argo Rollouts

„Argo Rollouts“ yra vietinis „Kubernetes“ diegimo valdiklis. Tai suteikia Kubernetes CRD (Custom Resource Definition). Jo dėka galime naudoti naują objektą: Rollout, kuri valdo mėlynai žalią ir kanarinę dislokaciją su įvairiomis konfigūravimo parinktimis.

„Argo Rollouts“ valdiklis, naudojamas tinkintų išteklių Rollout, Leidžia naudoti papildomas Kubernetes diegimo strategijas, pvz., mėlynai žalią ir kanarinę. Išteklius Rollout suteikia funkcionalumo ekvivalentą Deployment, tik su papildomomis diegimo strategijomis.
išteklių Deployments turi dvi diegimo strategijas: RollingUpdate и Recreate. Nors šios strategijos yra tinkamos daugeliu atvejų, diegiant serveriuose labai dideliu mastu, naudojamos papildomos strategijos, tokios kaip mėlynai žalia arba kanarinė, kurių nėra diegimo valdiklyje. Norėdami naudoti šias strategijas „Kubernetes“, vartotojai turėjo parašyti scenarijus savo diegimo viršuje. „Argo Rollouts Controller“ pateikia šias strategijas kaip paprastus, deklaratyvius, konfigūruojamus parametrus.
https://argoproj.github.io/argo-rollouts

Taip pat yra „Argo CI“, kuri suteikia patogią žiniatinklio sąsają naudoti su „Rollouts“, pažvelgsime į tai kitame straipsnyje.

„Argo Rollouts“ diegimas

Serverio pusė

kubectl create namespace argo-rolloutskubectl apply -n argo-rollouts -f https://raw.githubusercontent.com/argoproj/argo-rollouts/stable/manifests/install.yaml

Savo infrastruktūros ropėje (žr. toliau) jau įtraukėme install.yaml kaip i/k8s/argo-rollouts/install.yaml. Tokiu būdu „GitlabCI“ jį įdiegs į klasterį.

Kliento pusė (kubectl papildinys)

https://argoproj.github.io/argo-rollouts/features/kubectl-plugin

Programos pavyzdys

Gera praktika yra turėti atskiras programos kodo ir infrastruktūros saugyklas.

Programos saugykla

Kim Wuestkamp/k8s-deployment-example-app

Tai labai paprasta Python+Flask API, kuri atsakymą pateikia kaip JSON. Mes sukursime paketą naudodami GitlabCI ir perkelsime rezultatą į Gitlab registrą. Registre turime dvi skirtingas leidimo versijas:

  • wuestkamp/k8s-deployment-example-app:v1
  • wuestkamp/k8s-deployment-example-app:v2

Vienintelis skirtumas tarp jų yra grąžintas JSON failas. Naudojame šią programą norėdami kuo lengviau įsivaizduoti, su kuria versija bendraujame.

Infrastruktūros saugykla

Šioje saugykloje naudosime GitlabCI diegti Kubernetes, .gitlab-ci.yml atrodo taip:

image: traherom/kustomize-dockerbefore_script:
   - printenv
   - kubectl versionstages:
 - deploydeploy test:
   stage: deploy
   before_script:
     - echo $KUBECONFIG
   script:
     - kubectl get all
     - kubectl apply -f i/k8s    only:
     - master

Norėdami jį paleisti patys, jums reikės klasterio, galite naudoti „Gcloud“:

gcloud container clusters create canary --num-nodes 3 --zone europe-west3-b
gcloud compute firewall-rules create incoming-80 --allow tcp:80

Jums reikia šakės https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure ir sukurti kintamąjį KUBECONFIG GitlabCI, kuriame bus prieigos konfigūracija kubectl į savo klasterį.

Čia Galite perskaityti, kaip gauti klasterio kredencialus („Gcloud“).

Infrastruktūra Yaml

Infrastruktūros saugykloje turime paslaugą:

apiVersion: v1
kind: Service
metadata:
 labels:
   id: rollout-canary
 name: app
spec:
 ports:
 - port: 80
   protocol: TCP
   targetPort: 5000
 selector:
   id: app
 type: LoadBalancer

ir rollout.yaml:

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
 name: rollout-canary
spec:
 replicas: 10
 revisionHistoryLimit: 2
 selector:
   matchLabels:
     id: rollout-canary
 template:
   metadata:
     labels:
       id: rollout-canary
   spec:
     containers:
     - name: rollouts-demo
       image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v1
       imagePullPolicy: Always
 strategy:
   canary:
     steps:
     - setWeight: 10
     # Rollouts can be manually resumed by running `kubectl argo rollouts promote ROLLOUT`
     - pause: {}
     - setWeight: 50
     - pause: { duration: 120 } # two minutes

Rollout veikia taip pat kaip diegimas. Jei nenustatysime naujinimo strategijos (kaip čia canary), ji veiks kaip numatytasis nuolatinio atnaujinimo diegimas.

Mes apibrėžiame du „yaml“ kanalo diegimo etapus:

  1. 10 % eismo į Kanarų salą (palaukite rankiniu būdu Gerai)
  2. 50% srauto į Kanarų salą (palaukite 2 minutes, tada tęskite iki 100%)

Pradinis diegimas

Po pradinio diegimo mūsų ištekliai atrodys taip:

Kanarų diegimas Kubernetes Nr. 2: „Argo Rollouts“.

Ir mes gauname atsakymą tik iš pirmosios programos versijos:

Kanarų diegimas Kubernetes Nr. 2: „Argo Rollouts“.

Atlieka Kanarų dislokavimą

1 veiksmas: 10 % srauto

Norėdami pradėti Canary diegimą, mums tereikia pakeisti vaizdo versiją, kaip paprastai darome su diegimu:

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
 name: rollout-canary
spec:
...
 template:
   metadata:
     labels:
       id: rollout-canary
   spec:
     containers:
     - name: rollouts-demo
       image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v2
...

Mes skatiname pakeitimus, todėl „Gitlab CI“ įdiegiamas ir matome pakeitimus:

Kanarų diegimas Kubernetes Nr. 2: „Argo Rollouts“.

Dabar, jei pasiekiame paslaugą:

Kanarų diegimas Kubernetes Nr. 2: „Argo Rollouts“.

Puiku! Esame kanarėlių dislokavimo viduryje. Pažangą matome paleidę:

kubectl argo rollouts get rollout rollout-canary

Kanarų diegimas Kubernetes Nr. 2: „Argo Rollouts“.

2 veiksmas: 50 % srauto:

Dabar pereikime prie kito žingsnio: 50 % srauto nukreipimo. Sukonfigūravome šį veiksmą, kad jis būtų vykdomas rankiniu būdu:

kubectl argo rollouts promote rollout-canary # continue to step 2

Kanarų diegimas Kubernetes Nr. 2: „Argo Rollouts“.

Ir mūsų programa grąžino 50% atsakymų iš naujų versijų:

Kanarų diegimas Kubernetes Nr. 2: „Argo Rollouts“.

Ir išleidimo apžvalga:

Kanarų diegimas Kubernetes Nr. 2: „Argo Rollouts“.

Nuostabu.

3 veiksmas: 100 % srauto:

Nustatome taip, kad po 2 minučių 50% žingsnis baigtųsi automatiškai ir prasidėtų 100% žingsnis:

Kanarų diegimas Kubernetes Nr. 2: „Argo Rollouts“.

Ir programos išvestis:

Kanarų diegimas Kubernetes Nr. 2: „Argo Rollouts“.

Ir išleidimo apžvalga:

Kanarų diegimas Kubernetes Nr. 2: „Argo Rollouts“.

Kanarų dislokavimas baigtas.

Daugiau pavyzdžių su Argo Rollouts

Čia yra daugiau pavyzdžių, pvz., kaip nustatyti aplinkos peržiūras ir palyginimus, remiantis kanarėlėmis:

https://github.com/argoproj/argo-rollouts/tree/master/examples

Vaizdo įrašas apie Argo Rollouts ir Argo CI

Tikrai rekomenduoju šį vaizdo įrašą, kuriame parodyta, kaip Argo Rollouts ir Argo CI veikia kartu:

Visas

Man labai patinka idėja naudoti CRD, kurios valdo papildomų tipų diegimo ar replikacijų kūrimą, srauto peradresavimą ir pan. Darbas su jais vyksta sklandžiai. Toliau norėčiau išbandyti integraciją su Argo CI.

Tačiau panašu, kad artėja didelis Argo CI ir Flux CI susijungimas, todėl galiu palaukti, kol pasirodys naujas leidimas: Argo Flux.

Ar turėjote patirties su Argo Rollouts ar Argo CI?

Taip pat skaitykite kitus mūsų tinklaraščio straipsnius:

Šaltinis: www.habr.com

Добавить комментарий