Kanaari juurutamine Kuberneteses nr 2: Argo levitamine

Kasutame Kubernetesis Canary juurutuste käitamiseks k8s-i algset Argo Rolloutsi juurutuskontrollerit ja GitlabCI-d

Kanaari juurutamine Kuberneteses nr 2: Argo levitamine

https://unsplash.com/photos/V41PulGL1z0

Selle sarja artiklid

Kanaari juurutamine

Loodame, et loed esimene osa, kus selgitasime lühidalt, mis on Canary Deployments. Samuti näitasime, kuidas seda standardsete Kubernetese ressursside abil rakendada.

Argo Rollouts

Argo Rollouts on Kubernetese juurutuskontroller. See pakub Kubernetese jaoks CRD-d (kohandatud ressursi määratlus). Tänu sellele saame kasutada uut olemit: Rollout, mis haldab erinevate konfiguratsioonivalikutega sini-rohelist ja kanaari juurutamist.

Argo Rolloutsi kontroller, mida kasutab kohandatud ressurss Rollout, Võimaldab Kubernetese jaoks täiendavaid juurutamisstrateegiaid, nagu sinine-roheline ja kanaarilind. Ressurss Rollout pakub samaväärset funktsionaalsust Deployment, ainult täiendavate juurutusstrateegiatega.
ressurss Deployments on kaks juurutamisstrateegiat: RollingUpdate и Recreate. Kuigi need strateegiad sobivad enamikul juhtudel, kasutatakse väga suures mahus serveritesse juurutamiseks täiendavaid strateegiaid, näiteks sini-rohelist või kanaari värvi, mis pole juurutamise kontrolleris saadaval. Nende strateegiate kasutamiseks Kubernetes pidid kasutajad oma juurutuste peale kirjutama skripte. Argo Rollouts Controller paljastab need strateegiad lihtsate, deklaratiivsete ja konfigureeritavate parameetritena.
https://argoproj.github.io/argo-rollouts

Samuti on Argo CI, mis pakub Rolloutsiga kasutamiseks mugavat veebiliidest, seda vaatame järgmises artiklis.

Argo Rolloutsi installimine

Serveri pool

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

Oma infrastruktuuri naeris (vt allpool) oleme juba lisanud install.yaml kui i/k8s/argo-rollouts/install.yaml. Nii installib GitlabCI selle klastrisse.

Kliendi pool (kubectli pistikprogramm)

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

Rakenduse näide

Hea tava on omada eraldi hoidlaid rakenduse koodi ja infrastruktuuri jaoks.

Rakenduse hoidla

Kim Wuestkamp/k8s-deployment-example-app

See on väga lihtne Python+Flask API, mis tagastab vastuse JSON-ina. Ehitame paketi GitlabCI abil ja edastame tulemuse Gitlabi registrisse. Registris on meil kaks erinevat väljalaskeversiooni:

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

Ainus erinevus nende vahel on tagastatud JSON-fail. Kasutame seda rakendust, et võimalikult lihtsalt visualiseerida, millise versiooniga me suhtleme.

Infrastruktuuri hoidla

Selles hoidlas kasutame Kubernetes juurutamiseks GitlabCI-d, .gitlab-ci.yml näeb välja selline:

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 ise käitamiseks vajate klastrit, 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

Sa pead hargima https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure ja luua muutuja KUBECONFIG GitlabCI-s, mis sisaldab juurdepääsu konfiguratsiooni kubectl teie klastrisse.

see on Saate lugeda klastri (Gcloud) mandaatide hankimise kohta.

Infrastruktuur 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öötab samamoodi nagu juurutamine. Kui me värskendusstrateegiat ei määra (nagu siin Canary), käitub see nagu vaikimisi jooksva värskenduse juurutamine.

Kanaari juurutamiseks määratleme yamlis kaks sammu:

  1. 10% liiklusest kanaari saarele (oodake käsitsi OK)
  2. 50% liiklusest kanaari saarele (oodake 2 minutit ja jätkake 100%)

Esialgse juurutamise teostamine

Pärast esialgset kasutuselevõttu näevad meie ressursid välja järgmised:

Kanaari juurutamine Kuberneteses nr 2: Argo levitamine

Ja vastuse saame ainult rakenduse esimesest versioonist:

Kanaari juurutamine Kuberneteses nr 2: Argo levitamine

Kanaari juurutamine

1. samm: 10% liiklust

Kanaari juurutamise alustamiseks peame lihtsalt muutma pildiversiooni, nagu tavaliselt juurutuste puhul:

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 muudatusi, nii et Gitlab CI juurutab ja me näeme muudatusi:

Kanaari juurutamine Kuberneteses nr 2: Argo levitamine

Kui nüüd teenusele juurde pääseme:

Kanaari juurutamine Kuberneteses nr 2: Argo levitamine

Suurepärane! Oleme Kanaari juurutamise keskel. Näeme edenemist käivitades:

kubectl argo rollouts get rollout rollout-canary

Kanaari juurutamine Kuberneteses nr 2: Argo levitamine

2. samm: 50% liiklusest:

Liigume nüüd järgmise sammu juurde: 50% liiklusest ümbersuunamine. Konfigureerisime selle sammu käsitsi käivitamiseks:

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

Kanaari juurutamine Kuberneteses nr 2: Argo levitamine

Ja meie rakendus tagastas 50% uute versioonide vastustest:

Kanaari juurutamine Kuberneteses nr 2: Argo levitamine

Ja levitamise ülevaade:

Kanaari juurutamine Kuberneteses nr 2: Argo levitamine

Imeline.

3. samm: 100% liiklusest:

Seadistame selle nii, et 2 minuti pärast lõpeb 50% samm automaatselt ja algab 100% samm:

Kanaari juurutamine Kuberneteses nr 2: Argo levitamine

Ja rakenduse väljund:

Kanaari juurutamine Kuberneteses nr 2: Argo levitamine

Ja levitamise ülevaade:

Kanaari juurutamine Kuberneteses nr 2: Argo levitamine

Kanaari juurutamine on lõpule viidud.

Veel näiteid Argo Rolloutsiga

Siin on veel näiteid, näiteks kuidas seadistada keskkonna eelvaateid ja -võrdlusi kanaari põhjal:

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

Video Argo Rolloutsist ja Argo CI-st

Ma tõesti soovitan seda videot, see näitab, kuidas Argo Rollouts ja Argo CI koos töötavad:

Summaarne

Mulle väga meeldib idee kasutada CRD-sid, mis haldavad täiendavat tüüpi juurutuste või replikaatide loomist, liikluse ümbersuunamist jne. Töö nendega läheb sujuvalt. Järgmisena tahaksin testida integratsiooni Argo CI-ga.

Siiski näib, et tulemas on Argo CI ja Flux CI suur ühinemine, nii et võin oodata, kuni uus väljaanne ilmub: Argo Flux.

Kas teil on olnud kogemusi Argo Rolloutsi või Argo CI-ga?

Loe ka teisi meie ajaveebi artikleid:

Allikas: www.habr.com

Lisa kommentaar