Canary Deployment Kuberneteses #2: Argo Rollouts

Kasutame k8s-i natiivset Argo Rolloutsi ja GitlabCI-d canary-deploy'i kÀivitamiseks Kuberneteses.

Canary Deployment Kuberneteses #2: Argo Rollouts

https://unsplash.com/photos/V41PulGL1z0

Selle tsĂŒkli artiklid

Canary deploy

Loodame, et olete lugenud esimest osa, kus me lĂŒhidalt selgitasime, mis on canary deployd. NĂ€itasime ka, kuidas seda rakendada kasutades Kubernetesese standardseid ressursse.

Argo Rollouts

Argo Rollouts on Kubernetes-i natiivne deploy kontrollija. See pakub Kubernetesele CRD (Custom Resource Definition). TĂ€nu sellele saame kasutada uut ĂŒksust: Rollout, mis haldab blue-green ja canary deploy'e erinevate konfigureerimisvĂ”imalustega.

Argo Rolloutsi kontrollija, mida kasutatakse kohandatud ressursiga Rollout, vÔimaldab kasutada tÀiendavaid deploy strateegiaid, nagu blue-green ja canary Kuberneteses. Ressurss Rollout pakkub funktsionaalsust, mis on samavÀÀrne Deployment, ainult tÀiendavate deploy strateegiatega.
Allikas Deployments omab kahte strateegiat deploy'imiseks: RollingUpdate ja Recreate. Kuigi need strateegiad sobivad enamikuks juhtudest, kasutavad suurtel serverites deploy'ide puhul tĂ€iendavaid strateegiaid, nagu blue-green vĂ”i canary, mida Deployment kontrollija ei paku. Nende strateegiate kasutamiseks Kuberneteses pidid kasutajad kirjutama skripte oma Deployments’i peale. Argo Rolloutsi kontrollija pakub neid strateegiaid lihtsate deklaratiivsete konfigureeritavate parameetrite kujul.
https://argoproj.github.io/argo-rollouts

On olemas ka Argo CI, mis pakub mugavat veebiliidest, mida saab kasutada koos Rollouts'iga, sellele vaatame jÀrgmisel artiklil.

Argo Rolloutsi paigaldamine

Serveri poolel

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

Meie infrastruktuuri repois (vt allpool) oleme juba lisanud install.yaml kui i/k8s/argo-rollouts/install.yaml. Seega paigaldab GitlabCI selle klastrisse.

Kliendi poolel (kubectl plugin)

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

NĂ€idisrakendus

Hea praktika on hoida eraldi repoid rakenduse koodile ja infrastruktuurile.

Rakenduse repo

Kim Wuestkamp / k8s-deployment-example-app

See on vÀga lihtne API Python+Flaskis, mis tagastab vastuse JSON-vormingus. Kogume paketi kasutades GitlabCI-d ja pushime tulemuse Gitlabi registrisse. Registris on meil kaks erinevat versiooni vÀljalaskeid:

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

Ainus erinevus nende vahel on tagastatav JSON-fail. Kasutame seda rakendust maksimaalselt lihtsaks visualiseerimiseks, millega versiooniga me suhtleme.

Infrastruktuuri hoidla

Selles hoidlas kasutame GitlabCI-d Kubernetesesse deployimiseks, .gitlab-ci.yml nÀeb vÀlja jÀrgmine:

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

Selle iseseisvaks kÀitamiseks vajate klastri, saate kasutada Gcloudi:

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

Peate tegema forki https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure ja looma muutujat KUBECONFIG GitlabCI-s, mis sisaldab konfi ligipÀÀsuks kubectl teie klastrile.

Siin Saate lugeda, kuidas saada klastri andmeid (Gcloud).

Infrastruktuuri Yaml

Infrastruktuuri hoidlas on meil teenus:

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

ja 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 töötleb samamoodi nagu Deployment. Kui me ei mÀÀrata vÀrskendamise strateegiat (nagu canary siin), kÀitub see nagu vaikimisi rolling-update Deployment.

MÀÀratleme kaks sammu yaml-is canary deployment'i jaoks:

  1. 10% liiklust canaryle (ootab kÀsitsi OK-d)
  2. 50% liiklust canaryle (ootab 2 minutit ja siis jÀtkab 100%-ni)

Esialgse deployimise teostamine

PÀrast esialgset deployimist nÀevad meie ressursid vÀlja nii:

Canary Deployment Kuberneteses #2: Argo Rollouts

Ja saame vastuse ainult rakenduse esimeselt versioonilt:

Canary Deployment Kuberneteses #2: Argo Rollouts

Teostame Canary Deployment'i

Samm 1: 10% liiklust

Canary deployment'i alustamiseks peame lihtsalt muutma pildi versiooni, nagu me tavaliselt teeme deployimistega:

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
...

Ja me surume muudatused, seega teeb Gitlab CI deploy ja me nÀeme muudatuseid:

Canary Deployment Kuberneteses #2: Argo Rollouts

NĂŒĂŒd, kui me pöördume teenuse poole:

Canary Deployment Kuberneteses #2: Argo Rollouts

SuurepÀrane! Oleme oma canary deployment'i keskel. Saame edenemist nÀha, kÀivitades:

kubectl argo rollouts get rollout rollout-canary

Canary Deployment Kuberneteses #2: Argo Rollouts

Samm 2: 50% liiklus:

NĂŒĂŒd liigume jĂ€rgmise sammu juurde: 50% liikluse suunamine. Oleme seadistanud, et see samm kĂ€ivitatakse kĂ€sitsi:

kubectl argo rollouts promote rollout-canary # jÀtkame sammu 2

Canary Deployment Kuberneteses #2: Argo Rollouts

Ja meie rakendus tagastas 50% vastustest uutelt versioonidelt:

Canary Deployment Kuberneteses #2: Argo Rollouts

Ja rollouti ĂŒlevaade:

Canary Deployment Kuberneteses #2: Argo Rollouts

SuurepÀrane.

Samm 3: 100% liiklus:

Oleme seadistanud, et kahe minuti pÀrast lÔpetatakse 50% samm automaatselt ja kÀivitatakse 100% samm:

Canary Deployment Kuberneteses #2: Argo Rollouts

Ja rakenduse vÀljund:

Canary Deployment Kuberneteses #2: Argo Rollouts

Ja rollouti ĂŒlevaade:

Canary Deployment Kuberneteses #2: Argo Rollouts

Canary juurutamine on lÔpetatud.

Rohkem nÀiteid Argo Rollouts'ist

Siin on veel nÀiteid, nÀiteks kuidas seadistada eelvaate keskkonda ja vÔrdlusi, mis pÔhinevad canary'l:

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

Video Argo Rollouts'ist ja Argo CI'st

Soovitan seda videot vÀga, selles nÀidatakse, kuidas Argo Rollouts ja Argo CI koos töötavad:

MĂ€ngi videot

KokkuvÔte

Mulle meeldib vĂ€ga mĂ”te kasutada CRD-sid, mis haldavad tĂ€iendavate juurutustĂŒĂŒpide vĂ”i replicaseti loomist, suunavad liiklust jne. Nendega töötamine kĂ€ib sujuvalt. JĂ€rgmine soovin testida integreerimist Argo CI'ga.

Kuid minu arvates on tulemas suur liitumine Argo CI ja Flux CI vahel, nii et vÔin oodata, kuni uus versioon vÀlja tuleb: Argo Flux.

Kas teil on kogemusi Argo Rollouts'i vÔi Argo CI-ga?

Vaata ka teisi artikleid meie blogis:

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster