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

Selle sarja artiklid
- (See artikkel)
- Kanaari juurutamine Istio abil
- Kanaari juurutamine Jenkins-X Istio Flaggeri abil
Kanaari juurutamine
Loodame, et te loete seda , 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.Rolloutpakub samavÀÀrset funktsionaalsustDeployment, ainult tÀiendavate juurutamisstrateegiatega.
ressurssDeploymentson 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.
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)
NĂ€idisrakendus
Hea tava on omada rakenduskoodi ja infrastruktuuri jaoks eraldi hoidlaid.
Rakenduse hoidla
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:
- masterSelle 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:80Sa pead hargima ja luua muutuja KUBECONFIG GitlabCI-s, mis sisaldab juurdepÀÀsu konfiguratsiooni kubectl teie klastrisse.
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: LoadBalancerja 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 minutesRollout 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:
- 10% liiklusest suunatakse Canarysse (oodake kÀsitsi kinnitust)
- 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:

Ja vastuse saame ainult rakenduse esimeselt versioonilt:

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:

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

SuurepÀrane! Oleme oma Canary juurutuse keskel. Edusamme nÀeme jÀrgmiselt:
kubectl argo rollouts get rollout rollout-canary

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

Ja meie rakendus tagastas 50% vastustest uutest versioonidest:

Ja kasutuselevĂ”tu ĂŒlevaade:

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

Ja rakenduse vÀljund:

Ja kasutuselevĂ”tu ĂŒlevaade:

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

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: .
Kas teil on kogemusi Argo Rolloutsi vÔi Argo CI-ga?
Loe ka teisi meie ajaveebi artikleid:
Allikas: www.habr.com
