Canary Deployment sa Kubernetes #2: Argo Rollouts

Gamiton namo ang k8s-native Argo Rollouts deployment controller ug GitlabCI aron ipadagan ang Canary deployment sa Kubernetes

Canary Deployment sa Kubernetes #2: Argo Rollouts

https://unsplash.com/photos/V41PulGL1z0

Mga artikulo niini nga serye

Pag-deploy sa Canary

Kami nanghinaut nga imong basahon unang bahin, diin among gipatin-aw sa daklit kung unsa ang Canary Deployments. Gipakita usab namo kung giunsa kini ipatuman gamit ang standard nga mga kapanguhaan sa Kubernetes.

Argo Rollouts

Ang Argo Rollouts usa ka Kubernetes native deployment controller. Naghatag kini og CRD (Custom Resource Definition) para sa Kubernetes. Salamat niini, makagamit kami og bag-ong entidad: Rollout, nga nagdumala sa blue-green ug canary deployment nga adunay lain-laing mga opsyon sa configuration.

Argo Rollouts controller nga gigamit sa usa ka custom nga kapanguhaan Rollout, Nagtugot alang sa dugang nga mga estratehiya sa pag-deploy sama sa blue-green ug canary para sa Kubernetes. Kapanguhaan Rollout naghatag ug functionality katumbas Deployment, nga adunay dugang nga mga estratehiya sa pagdeploy.
kapanguhaan Deployments adunay duha ka estratehiya sa pag-deploy: RollingUpdate ΠΈ Recreate. Bisan kung kini nga mga estratehiya angay alang sa kadaghanan nga mga kaso, alang sa pag-deploy sa mga server sa usa ka dako nga sukod, gigamit ang dugang nga mga estratehiya, sama sa asul-berde o canary, nga wala magamit sa controller sa Deployment. Aron magamit kini nga mga estratehiya sa Kubernetes, ang mga tiggamit kinahanglan nga magsulat og mga script sa ibabaw sa ilang mga Deployment. Ang Argo Rollouts Controller nagbutyag niini nga mga estratehiya isip yano, deklaratibo, ma-configure nga mga parameter.
https://argoproj.github.io/argo-rollouts

Anaa usab ang Argo CI, nga naghatag usa ka kombenyente nga interface sa web para magamit sa Rollouts, atong tan-awon kana sa sunod nga artikulo.

Pag-instalar sa Argo Rollouts

kilid sa server

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

Sa among imprastraktura nga turnip (tan-awa sa ubos) gidugang na namo ang install.yaml isip i/k8s/argo-rollouts/install.yaml. Niining paagiha i-install kini sa GitlabCI sa cluster.

Kliyente nga bahin (kubectl plugin)

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

Pananglitan nga Aplikasyon

Maayo nga praktis nga adunay lahi nga mga repository alang sa code sa aplikasyon ug imprastraktura.

Repository alang sa aplikasyon

Kim Wuestkamp/k8s-deployment-example-app

Kini usa ka yano nga Python + Flask API nga nagbalik usa ka tubag ingon JSON. Atong tukuron ang package gamit ang GitlabCI ug iduso ang resulta sa Gitlab Registry. Sa rehistro kami adunay duha ka lainlaing bersyon sa pagpagawas:

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

Ang bugtong kalainan tali kanila mao ang JSON file nga gibalik. Gigamit namon kini nga aplikasyon aron mahanduraw nga dali kutob sa mahimo kung unsang bersyon ang among gipakigsulti.

Repositori sa imprastraktura

Niini nga repository atong gamiton ang GitlabCI alang sa pag-deploy sa Kubernetes, .gitlab-ci.yml ang hitsura niini:

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

Aron makadagan kini sa imong kaugalingon kinahanglan nimo ang usa ka cluster, mahimo nimong gamiton ang Gcloud:

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

Kinahanglan nimo nga tinidor https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure ug paghimo usa ka variable KUBECONFIG sa GitlabCI, nga maglangkob sa config alang sa pag-access kubectl sa imong cluster.

kini mao ang Mahimo nimong mabasa kung giunsa pagkuha ang mga kredensyal alang sa usa ka cluster (Gcloud).

Imprastraktura Yaml

Sa sulod sa imprastraktura repository kami adunay serbisyo:

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

ug 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 nagtrabaho sama sa Deployment. Kung dili kami magbutang usa ka estratehiya sa pag-update (sama sa canary dinhi) kini molihok sama sa default nga rolling-update Deployment.

Atong gihubit ang duha ka mga lakang sa yaml alang sa pag-deploy sa canary:

  1. 10% sa trapiko sa canary (paghulat alang sa manual OK)
  2. 50% nga trapiko sa canary (paghulat 2 minuto unya magpadayon sa 100%)

Pagbuhat sa inisyal nga pag-deploy

Pagkahuman sa inisyal nga pag-deploy, ang among mga kapanguhaan mahimong ingon niini:

Canary Deployment sa Kubernetes #2: Argo Rollouts

Ug nakakuha kami usa ka tubag gikan lamang sa una nga bersyon sa aplikasyon:

Canary Deployment sa Kubernetes #2: Argo Rollouts

Pagbuhat sa Canary Deployment

Lakang 1: 10% nga trapiko

Sa pagsugod sa usa ka canary deployment, kinahanglan lang nga usbon ang bersyon sa imahe sama sa naandan namong buhaton sa mga deployment:

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

Ug giduso namon ang mga pagbag-o, mao nga ang Gitlab CI nag-deploy ug nakita namon ang mga pagbag-o:

Canary Deployment sa Kubernetes #2: Argo Rollouts

Karon kung atong ma-access ang serbisyo:

Canary Deployment sa Kubernetes #2: Argo Rollouts

Nindot! Anaa kami sa tunga-tunga sa among pag-deploy sa canary. Atong makita ang pag-uswag pinaagi sa pagdagan:

kubectl argo rollouts get rollout rollout-canary

Canary Deployment sa Kubernetes #2: Argo Rollouts

Lakang 2: 50% nga trapiko:

Karon magpadayon kita sa sunod nga lakang: pag-redirect sa 50% sa trapiko. Among gi-configure kini nga lakang nga ipadagan sa mano-mano:

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

Canary Deployment sa Kubernetes #2: Argo Rollouts

Ug gibalik sa among aplikasyon ang 50% sa mga tubag gikan sa bag-ong mga bersyon:

Canary Deployment sa Kubernetes #2: Argo Rollouts

Ug pagsusi sa rollout:

Canary Deployment sa Kubernetes #2: Argo Rollouts

Kahibulongan.

Lakang 3: 100% nga trapiko:

Gipahimutang namo kini aron human sa 2 ka minuto ang 50% nga lakang awtomatikong matapos ug ang 100% nga lakang magsugod:

Canary Deployment sa Kubernetes #2: Argo Rollouts

Ug ang output sa aplikasyon:

Canary Deployment sa Kubernetes #2: Argo Rollouts

Ug pagsusi sa rollout:

Canary Deployment sa Kubernetes #2: Argo Rollouts

Ang pag-deploy sa canary kompleto na.

Dugang nga mga pananglitan sa Argo Rollouts

Adunay daghang mga pananglitan dinhi, sama sa kung giunsa ang pag-set up sa mga preview sa palibot ug pagtandi base sa canary:

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

Video bahin sa Argo Rollouts ug Argo CI

Girekomenda gyud nako kini nga video, gipakita niini kung giunsa ang pagtrabaho sa Argo Rollouts ug Argo CI:

Ang resulta

Ganahan kaayo ko sa ideya sa paggamit sa mga CRD nga nagdumala sa paghimo og dugang nga mga matang sa pag-deploy o mga replicase, pag-redirect sa trapiko, ug uban pa. Ang pagtrabaho uban kanila hapsay. Sunod gusto nako nga sulayan ang panagsama sa Argo CI.

Bisan pa, adunay usa ka dako nga panagsama sa Argo CI ug Flux CI nga moabut, aron ako maghulat hangtod ang bag-ong pagpagawas mogawas: Argo Flux.

Nakasinati ka na ba sa Argo Rollouts o Argo CI?

Basaha usab ang ubang mga artikulo sa among blog:

Source: www.habr.com

Idugang sa usa ka comment