Deplwaman Canary nan Kubernetes # 2: Argo Rollouts

Nou pral sèvi ak kontwolè deplwaman k8s-natif Argo Rollouts ak GitlabCI pou fè deplwaman Canary nan Kubernetes.

Deplwaman Canary nan Kubernetes # 2: Argo Rollouts

https://unsplash.com/photos/V41PulGL1z0

Atik nan seri sa a

Deplwaman Canary

Nou espere ou li premye pati, kote nou te eksplike yon ti tan ki sa Canary Deployment yo ye. Nou te montre tou kijan pou aplike li lè l sèvi avèk resous estanda Kubernetes.

Argo déploiement

Argo Rollouts se yon kontwolè deplwaman natif natal Kubernetes. Li bay yon CRD (Definisyon Resous Custom) pou Kubernetes. Mèsi a li, nou ka itilize yon nouvo antite: Rollout, ki jere deplwaman ble-vèt ak Canary ak divès opsyon konfigirasyon.

Argo Rollouts kontwolè itilize pa yon resous koutim Rollout, Pèmèt estrateji deplwaman adisyonèl tankou ble-vèt ak Canary pou Kubernetes. Resous Rollout bay ekivalan fonksyonalite Deployment, sèlman ak estrateji deplwaman adisyonèl.
resous Deployments gen de estrateji pou deplwaman: RollingUpdate и Recreate. Malgre ke estrateji sa yo apwopriye pou pifò ka yo, pou deplwaman sou sèvè sou yon echèl trè gwo, yo itilize estrateji adisyonèl, tankou ble-vèt oswa Canary, ki pa disponib nan kontwolè Deplwaman an. Pou itilize estrateji sa yo nan Kubernetes, itilizatè yo te oblije ekri scripts sou Deplwaman yo. Argo Rollouts Controller la ekspoze estrateji sa yo kòm paramèt senp, deklaratif, configurable.
https://argoproj.github.io/argo-rollouts

Genyen tou Argo CI, ki bay yon koòdone entènèt pratik pou itilize ak Rollouts, nou pral pran yon gade nan sa nan pwochen atik la.

Enstale Argo Rollouts

Bò sèvè

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

Nan navèt enfrastrikti nou an (gade anba a) nou te deja ajoute install.yaml kòm i/k8s/argo-rollouts/install.yaml. Nan fason sa a GitlabCI pral enstale li nan gwoup la.

Bò kliyan (plugin kubectl)

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

Egzanp Aplikasyon

Li se bon pratik pou gen depo separe pou kòd aplikasyon ak enfrastrikti.

Depo pou aplikasyon an

Kim Wuestkamp/k8s-deployment-example-app

Sa a se yon trè senp Python + Flask API ki retounen yon repons kòm JSON. Nou pral konstwi pake a lè l sèvi avèk GitlabCI epi pouse rezilta a nan Rejis Gitlab la. Nan rejis la nou gen de vèsyon lage diferan:

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

Sèl diferans ki genyen ant yo se dosye a JSON retounen. Nou itilize aplikasyon sa a pou wè pi fasil ke posib ak ki vèsyon n ap kominike.

Depo enfrastrikti

Nan depo sa a nou pral sèvi ak GitlabCI pou deplwaman nan Kubernetes, .gitlab-ci.yml sanble sa a:

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

Pou kouri li tèt ou ou pral bezwen yon gwoup, ou ka itilize Gcloud:

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

Ou bezwen fouchèt https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure epi kreye yon varyab KUBECONFIG nan GitlabCI, ki pral genyen konfigirasyon an pou aksè kubectl nan grap ou a.

Isit la Ou ka li sou fason pou jwenn kalifikasyon pou yon gwoup (Gcloud).

Enfrastrikti Yaml

Anndan depo enfrastrikti a nou gen sèvis:

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

ak 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 travay menm jan ak Deplwaman. Si nou pa mete yon estrateji aktyalizasyon (tankou Canary isit la) li pral konpòte tankou Deplwaman defo rolling-update a.

Nou defini de etap nan yaml pou deplwaman Canary:

  1. 10% trafik pou Canary (tann manyèl OK)
  2. 50% trafik nan Canary (tann 2 minit epi kontinye a 100%)

Fè premye deplwaman

Apre premye deplwaman an, resous nou yo ap parèt tankou sa a:

Deplwaman Canary nan Kubernetes # 2: Argo Rollouts

Epi nou jwenn yon repons sèlman nan premye vèsyon aplikasyon an:

Deplwaman Canary nan Kubernetes # 2: Argo Rollouts

Fè deplwaman Canary

Etap 1: 10% trafik

Pou kòmanse yon deplwaman Canary, nou jis bezwen chanje vèsyon imaj la jan nou anjeneral fè ak deplwaman:

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

Epi nou pouse chanjman, kidonk Gitlab CI deplwaye epi nou wè chanjman yo:

Deplwaman Canary nan Kubernetes # 2: Argo Rollouts

Koulye a, si nou jwenn aksè nan sèvis la:

Deplwaman Canary nan Kubernetes # 2: Argo Rollouts

Gwo! Nou nan mitan deplwaman kanari nou an. Nou ka wè pwogrè nan kouri:

kubectl argo rollouts get rollout rollout-canary

Deplwaman Canary nan Kubernetes # 2: Argo Rollouts

Etap 2: 50% trafik:

Koulye a, ann ale nan pwochen etap la: redireksyon 50% nan trafik la. Nou konfigirasyon etap sa a yo dwe kouri manyèlman:

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

Deplwaman Canary nan Kubernetes # 2: Argo Rollouts

Epi aplikasyon nou an te retounen 50% repons ki soti nan nouvo vèsyon yo:

Deplwaman Canary nan Kubernetes # 2: Argo Rollouts

Ak revizyon lansman:

Deplwaman Canary nan Kubernetes # 2: Argo Rollouts

Bèl bagay.

Etap 3: 100% trafik:

Nou mete l kanpe pou apre 2 minit etap 50% la fini otomatikman epi etap 100% la kòmanse:

Deplwaman Canary nan Kubernetes # 2: Argo Rollouts

Ak pwodiksyon aplikasyon an:

Deplwaman Canary nan Kubernetes # 2: Argo Rollouts

Ak revizyon lansman:

Deplwaman Canary nan Kubernetes # 2: Argo Rollouts

Deplwaman Canary fini.

Plis egzanp ak Argo Rollouts

Genyen plis egzanp isit la, tankou kouman yo mete kanpe aperçu anviwònman ak konparezon ki baze sou Canary:

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

Videyo sou Argo Rollouts ak Argo CI

Mwen vrèman rekòmande videyo sa a, li montre kouman Argo Rollouts ak Argo CI travay ansanm:

Total

Mwen vrèman renmen lide pou sèvi ak CRD ki jere kreyasyon lòt kalite deplwaman oswa kopi, redireksyon trafik, elatriye. Travay ak yo ale san pwoblèm. Apre sa, mwen ta renmen teste entegrasyon an ak Argo CI.

Sepandan, sanble gen yon gwo fizyon Argo CI ak Flux CI ap vini, kidonk mwen ta ka tann jiskaske nouvo lage a soti: Argo Flux.

Èske w te gen eksperyans ak Argo Rollouts oswa Argo CI?

Epitou li lòt atik sou blog nou an:

Sous: www.habr.com

Add nouvo kòmantè