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

Selle tsĂŒkli artiklid
- (See artikkel)
- Canary deploy kasutades Istio
- Canary deploy kasutades Jenkins-X Istio Flaggerit
Canary deploy
Loodame, et olete lugenud , 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. RessurssRolloutpakkub funktsionaalsust, mis on samavÀÀrneDeployment, ainult tÀiendavate deploy strateegiatega.
AllikasDeploymentsomab kahte strateegiat deploy'imiseks:RollingUpdatejaRecreate. 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.
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)
NĂ€idisrakendus
Hea praktika on hoida eraldi repoid rakenduse koodile ja infrastruktuurile.
Rakenduse repo
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:
- masterSelle 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:80Peate tegema forki ja looma muutujat KUBECONFIG GitlabCI-s, mis sisaldab konfi ligipÀÀsuks kubectl teie klastrile.
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: LoadBalancerja 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 minutesRollout 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:
- 10% liiklust canaryle (ootab kÀsitsi OK-d)
- 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:

Ja saame vastuse ainult rakenduse esimeselt versioonilt:

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:

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

SuurepÀrane! Oleme oma canary deployment'i keskel. Saame edenemist nÀha, kÀivitades:
kubectl argo rollouts get rollout rollout-canary

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

Ja meie rakendus tagastas 50% vastustest uutelt versioonidelt:

Ja rollouti ĂŒlevaade:

SuurepÀrane.
Samm 3: 100% liiklus:
Oleme seadistanud, et kahe minuti pÀrast lÔpetatakse 50% samm automaatselt ja kÀivitatakse 100% samm:

Ja rakenduse vÀljund:

Ja rollouti ĂŒlevaade:

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

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: .
Kas teil on kogemusi Argo Rollouts'i vÔi Argo CI-ga?
Vaata ka teisi artikleid meie blogis:
Allikas: habr.com
