Kanaari juurutamine Kuberneteses nr 2: Argo levitamine

Kuberneteses Canary juurutuste kÀivitamiseks kasutame k8s-natiivset juurutuskontrollerit Argo Rolloutsi ja GitlabCI-d.

Kanaari juurutamine Kuberneteses nr 2: Argo levitamine

https://unsplash.com/photos/V41PulGL1z0

Selle sarja artiklid

Kanaari juurutamine

Loodame, et te loete seda esimene osa, kus me lĂŒhidalt selgitasime, mis on Canary juurutused. Samuti nĂ€itasime, kuidas neid standardsete Kubernetesi ressursside abil rakendada.

Argo vÀljalasked

Argo Rollouts on Kubernetes'i natiivne juurutuskontroller. See pakub Kubernetes'i jaoks CRD-d (kohandatud ressursimÀÀratlust). TĂ€nu sellele saame kasutada uut ĂŒksust: Rollout, mis haldab sinirohelisi ja kanaarivĂ€rvilisi juurutusi erinevate kohandamisvĂ”imalustega.

Kohandatud ressursi poolt kasutatav Argo vÀljalaskekontroller Rollout, vÔimaldab Kubernetesi jaoks tÀiendavaid juurutamisstrateegiaid, nÀiteks sinirohelist ja kanaari. Rollout pakub samavÀÀrset funktsionaalsust Deployment, ainult tÀiendavate juurutamisstrateegiatega.
ressurss Deployments on kaks juurutamisstrateegiat: RollingUpdate О RecreateKuigi need strateegiad on enamiku kasutusjuhtude jaoks piisavad, nÔuab vÀga laiaulatuslikesse serveritesse juurutamine lisastrateegiaid, nÀiteks sinirohelist vÔi kanaaristrateegiat, mis pole juurutamise kontrolleris saadaval. Nende strateegiate kasutamiseks Kuberneteses pidid kasutajad oma juurutustele lisaks skripte kirjutama. Argo Rolloutsi kontroller avaldab need strateegiad lihtsate, deklaratiivsete ja konfigureeritavate parameetritena.
https://argoproj.github.io/argo-rollouts

Samuti on olemas Argo CI, mis pakub vÀljalasete jaoks kena veebiliidest, mida vaatleme jÀrgmises artiklis.

Argo rullide paigaldamine

Serveri pool

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

Meie infrastruktuuri repositooriumisse (vt allpool) oleme juba lisanud install.yaml faili kujul i/k8s/argo-rollouts/install.yaml. Sel viisil installib GitlabCI selle klastrisse.

Kliendi poolel (kubectl plugin)

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

NĂ€idisrakendus

Hea tava on omada rakenduskoodi ja infrastruktuuri jaoks eraldi hoidlaid.

Rakenduse hoidla

Kim Wuestkamp/k8s-juurutamise-nÀide-rakendus

See on vÀga lihtne Python+Flask API, mis tagastab JSON-vastuse. Me ehitame paketi GitlabCI abil ja saadame 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. Me kasutame seda rakendust, et visualiseerida vÔimalikult lihtsalt, millise versiooniga me rÀÀgime.

Infrastruktuuri hoidla

Selles repositooriumis kasutame Kubernetesesse 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 Klastri (Gcloud) mandaatide hankimise kohta saate lugeda siit.

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 kasutuselevÔtt.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 toimib samamoodi nagu juurutamine. Kui me ei mÀÀra vÀrskendusstrateegiat (nagu siin Canary), kÀitub see nagu vaikimisi jooksva vÀrskenduse juurutamine.

Canary juurutamise jaoks defineerime yaml-is kaks sammu:

  1. 10% liiklusest suunatakse Canarysse (oodake kÀsitsi kinnitust)
  2. 50% liiklusest suunatakse Canaryle (oodake 2 minutit ja jÀtkake seejÀrel 100%-ni)

Esialgse juurutamise teostamine

PÀrast esmast juurutamist nÀevad meie ressursid vÀlja sellised:

Kanaari juurutamine Kuberneteses nr 2: Argo levitamine

Ja vastuse saame ainult rakenduse esimeselt versioonilt:

Kanaari juurutamine Kuberneteses nr 2: Argo levitamine

Kanaari juurutamise teostamine

1. samm: 10% liiklust

KanaaripÔhise juurutamise alustamiseks peame lihtsalt muutma pildi versiooni, nagu me tavaliselt juurutuste puhul teeme:

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 peale, seega Gitlab CI teeb juurutuse ja me nÀeme muudatusi:

Kanaari juurutamine Kuberneteses nr 2: Argo levitamine

Kui nĂŒĂŒd teenuse juurde pöörduda:

Kanaari juurutamine Kuberneteses nr 2: Argo levitamine

SuurepÀrane! Oleme oma Canary juurutuse keskel. Edusamme nÀeme jÀrgmiselt:

kubectl argo rollouts get rollout rollout-canary

Kanaari juurutamine Kuberneteses nr 2: Argo levitamine

2. samm: 50% liiklusest:

NĂŒĂŒd liigume edasi jĂ€rgmise sammu juurde: 50% liikluse ĂŒmbersuunamine. Oleme selle sammu kĂ€sitsi kĂ€ivitamiseks seadistanud:

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

Kanaari juurutamine Kuberneteses nr 2: Argo levitamine

Ja meie rakendus tagastas 50% vastustest uutest versioonidest:

Kanaari juurutamine Kuberneteses nr 2: Argo levitamine

Ja kasutuselevĂ”tu ĂŒlevaade:

Kanaari juurutamine Kuberneteses nr 2: Argo levitamine

Imeline.

3. samm: 100% liiklusest:

Me seadistasime selle nii, et 2 minuti pÀrast lÔppeks automaatselt 50% samm ja algaks 100% samm:

Kanaari juurutamine Kuberneteses nr 2: Argo levitamine

Ja rakenduse vÀljund:

Kanaari juurutamine Kuberneteses nr 2: Argo levitamine

Ja kasutuselevĂ”tu ĂŒlevaade:

Kanaari juurutamine Kuberneteses nr 2: Argo levitamine

Kanaari juurutamine on lÔpule viidud.

Rohkem nÀiteid Argo vÀljalaskeavadega

Siin on rohkem nÀiteid, nÀiteks kuidas seadistada keskkonna eelvaateid ja vÔrdlusi Canary pÔhjal:

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

Video Argo vÀljalasketest ja Argo CI-st

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

Esita video

Summaarne

Mulle vĂ€ga meeldib idee kasutada CRD-sid, mis tegelevad tĂ€iendavate juurutuste vĂ”i replikaatide loomise, liikluse ĂŒmbersuunamise jms-ga. See toimib sujuvalt. JĂ€rgmisena tahaksin testida integratsiooni Argo CI-ga.

Siiski nĂ€ib, et Argo CI ja Flux CI vahel on tulemas suur ĂŒhinemine, seega vĂ”in oodata uue versiooni ilmumist: Argo Flux.

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

Loe ka teisi meie ajaveebi artikleid:

Allikas: www.habr.com

Ostke DDoS-kaitsega saitide jaoks usaldusvÀÀrne hostimine, VPS VDS-serverid đŸ”„ Osta usaldusvÀÀrne veebimajutus DDoS-kaitsega, VPS VDS serverid | ProHoster