Fametrahana Canary ao amin'ny Kubernetes #1: Gitlab CI

Hampiasa Gitlab CI sy GitOps manual izahay mba hampiharana sy hampiasana ny fametrahana Canary ao amin'ny Kubernetes

Fametrahana Canary ao amin'ny Kubernetes #1: Gitlab CI

Lahatsoratra avy amin'ity andiany ity:

Hanatanteraka ny fametrahana Canary amin'ny tanana amin'ny alàlan'ny GitOps izahay ary mamorona/manova ny loharano Kubernetes lehibe. Ity lahatsoratra ity dia natao ho fampidirana voalohany indrindra miaraka amin'ny fomba fiasa ao amin'ny Kubernetes Canary, satria misy fomba fiasa mahomby kokoa, izay hodinihintsika ao amin'ny lahatsoratra manaraka.


Fametrahana Canary ao amin'ny Kubernetes #1: Gitlab CI

https://www.norberteder.com/canary-deployment/

Fampielezana Canary

Miaraka amin'ny paikadin'ny Canary, ny fanavaozam-baovao dia ampiharina amin'ny ampahany amin'ny mpampiasa ihany. Amin'ny alàlan'ny fanaraha-maso, ny angon-drakitra, ny fitsapana amin'ny tanana, na ny fantsona fanehoan-kevitra hafa, ny famoahana dia andrana alohan'ny hamoahana azy amin'ny mpampiasa rehetra.

Kubernetes Deployment (fanavaozana mihodinkodina)

Ny paikadin'ny default ho an'ny Kubernetes Deployment dia fanavaozana mihodinkodina, izay misy pod maromaro atomboka miaraka amin'ny dikan-tsary vaovao. Raha noforonina tsy misy olana izy ireo, dia tapaka ny pods misy sary efa tranainy, ary ny pods vaovao dia noforonina mifanitsy.

GitOps

Mampiasa GitOps amin'ity ohatra ity izahay satria:

  • mampiasa Git ho loharanom-pahamarinana tokana
  • mampiasa Git Operations izahay amin'ny fananganana sy fametrahana (tsy misy baiko hafa ankoatra ny git tag/merge)

ohatra

Andao hanao fanao tsara - mba hanana tahiry iray ho an'ny kaody fampiharana ary iray ho an'ny fotodrafitrasa.

Fitehirizam-boky fampiharana

Ity dia Python + Flask API tena tsotra izay mamerina valiny ho JSON. Hanamboatra ny fonosana amin'ny alàlan'ny GitlabCI izahay ary hanosika ny valiny mankany amin'ny Rejistra Gitlab. Ao amin'ny rejisitra dia manana dikan-teny roa samihafa izahay:

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

Ny hany mahasamihafa azy ireo dia ny fiovan'ny rakitra JSON naverina. Ampiasainay ity fampiharana ity mba hijerena mora foana ny dikan-teny ifampiresahanay.

Fitehirizana fotodrafitrasa

Amin'ity turnip ity dia haparitaka amin'ny alàlan'ny GitlabCI mankany Kubernetes izahay, .gitlab-ci.yml toy izao ity:

image: traherom/kustomize-docker

before_script:
   - printenv
   - kubectl version

stages:
 - deploy

deploy test:
   stage: deploy
   before_script:
     - echo $KUBECONFIG
   script:
     - kubectl get all
     - kubectl apply -f i/k8s

   only:
     - master

Mba hampandehanana azy dia mila cluster ianao, azonao atao ny mampiasa Gcloud:

gcloud container clusters create canary --num-nodes 3 --zone europe-west3-b

gcloud compute firewall-rules create incoming-80 --allow tcp:80

Mila fork ianao https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure ary mamorona variable KUBECONFIG ao amin'ny GitlabCI, izay ahitana ny config ho an'ny fidirana kubectl mankany amin'ny cluster anao.

Azonao atao ny mamaky momba ny fomba hahazoana fahazoan-dàlana ho an'ny cluster (Gcloud) right here.

Fotodrafitrasa Yaml

Ao amin'ny tranokalan'ny fotodrafitrasa dia manana serivisy izahay:

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

Ary ny fametrahana ao deploy.yaml:

apiVersion: apps/v1
kind: Deployment
metadata:
 name: app
spec:
 replicas: 10
 selector:
   matchLabels:
     id: app
     type: main
 template:
   metadata:
     labels:
       id: app
       type: main
   spec:
     containers:
     - image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v1
       name: app
       resources:
         limits:
           cpu: 100m
           memory: 100Mi

Ary deployment hafa ao deploy-canary.yaml:

kind: Deployment
metadata:
 name: app-canary
spec:
 replicas: 0
 selector:
   matchLabels:
     id: app
     type: canary
 template:
   metadata:
     labels:
       id: app
       type: canary
   spec:
     containers:
     - image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v2
       name: app
       resources:
         limits:
           cpu: 100m
           memory: 100Mi

Mariho fa tsy mbola misy dika mitovy voafaritra ny app-deploy.

Manatanteraka ny fametrahana voalohany

Mba hanombohana ny fametrahana voalohany dia azonao atao ny manomboka ny fantsona GitlabCI amin'ny tanana amin'ny sampana master. Aorian'izay kubectl dia tokony hamoaka ireto manaraka ireto:

Fametrahana Canary ao amin'ny Kubernetes #1: Gitlab CI

Hitantsika app deployment misy kopia 10 sy app-canary misy 0. Misy ihany koa ny LoadBalancer izay ahafahantsika miditra amin'ny curl amin'ny alàlan'ny IP ivelany:

while true; do curl -s 35.198.149.232 | grep label; sleep 0.1; done

Fametrahana Canary ao amin'ny Kubernetes #1: Gitlab CI

Hitanay fa "v1" ihany no miverina amin'ny fampiharana fitsapana anay.

Manatanteraka ny fametrahana Canary

Dingana 1: mamoaka kinova vaovao ho an'ny mpampiasa sasany

Nametraka ny isan'ny kopia ho 1 ao amin'ny rakitra deploy-canary.yaml sy ny sary kinova vaovao:

kind: Deployment
metadata:
 name: app-canary
spec:
 replicas: 1
 selector:
   matchLabels:
     id: app
     type: canary
 template:
   metadata:
     labels:
       id: app
       type: canary
   spec:
     containers:
     - image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v2
       name: app
       resources:
         limits:
           cpu: 100m
           memory: 100Mi

Ao anaty rakitra deploy.yaml novainay ho 9 ny isan'ny replika:

kind: Deployment
metadata:
 name: app
spec:
 replicas: 9
 selector:
   matchLabels:
     id: app
...

Izahay dia manosika ireo fanovana ireo amin'ny tahiry izay hanombohan'ny fametrahana (amin'ny alàlan'ny GitlabCI) ary mahita ny vokatr'izany:

Fametrahana Canary ao amin'ny Kubernetes #1: Gitlab CI

Ny Serivisy dia hanondro ireo fametrahana roa ireo, satria samy manana ny mpifidy fampiharana. Noho ny fanararaotana mahazatra nataon'i Kubernetes dia tokony hahita valiny samihafa isika amin'ny ~10% amin'ny fangatahana:

Fametrahana Canary ao amin'ny Kubernetes #1: Gitlab CI

Ny toetry ny fampiharana ankehitriny (GitOps, nalaina tao amin'ny Git ho loharano tokana amin'ny fahamarinana) dia ny fisian'ny fametrahana roa misy kopia mavitrika, iray isaky ny dikan-teny.

~10% n'ny mpampiasa no lasa zatra kinova vaovao ary nanandrana izany tsy nahy. Fotoana izao hijerena ny lesoka ao amin'ny diary sy ny angona fanaraha-maso hahitana olana.

Dingana 2: Alefaso ny kinova vaovao ho an'ny mpampiasa rehetra

Nanapa-kevitra izahay fa nandeha tsara ny zava-drehetra ary ankehitriny dia mila mamoaka ny kinova vaovao ho an'ny mpampiasa rehetra. Mba hanaovana izany dia manavao fotsiny izahay deploy.yaml fametrahana dika vaovao amin'ny sary sy ny isan'ny replicas mitovy amin'ny 10. In deploy-canary.yaml averinay amin'ny 0 ny isan'ny dika mitovy. Aorian'ny fametrahana dia ho toy izao ny valiny:

Fametrahana Canary ao amin'ny Kubernetes #1: Gitlab CI

To summarize

Ho ahy, ny fampandehanana ny fametrahana amin'ny tanana amin'ity fomba ity dia manampy amin'ny fahazoana ny fomba mora azo ampiasaina amin'ny fampiasana k8s. Koa satria mamela anao hanavao ny zava-drehetra amin'ny alàlan'ny API ny Kubernetes, dia azo atao ho azy amin'ny alàlan'ny script ireo dingana ireo.

Ny zavatra iray hafa tokony hampiharina dia ny fidirana amin'ny tester (LoadBalancer na amin'ny alàlan'ny Ingress) izay ny dikan-teny vaovao ihany no azo idirana. Azo ampiasaina amin'ny fitetezana tanana izy io.

Amin'ny lahatsoratra ho avy dia hijery vahaolana mandeha ho azy hafa izay mampihatra ny ankamaroan'ny zavatra vitantsika isika.

Vakio ihany koa lahatsoratra hafa ao amin'ny bilaoginay:

Source: www.habr.com

Add a comment