Canary Deployment i Kubernetes #1: Gitlab CI

O le a matou faʻaogaina Gitlab CI ma le tusi lesona GitOps e faʻatino ma faʻaoga le faʻaogaina o Canary i Kubernetes

Canary Deployment i Kubernetes #1: Gitlab CI

Tala mai lenei faasologa:

O le a matou faia ma le lima le faʻapipiʻiina o Canary e ala i GitOps ma fatuina / faʻaleleia punaoa autu Kubernetes. O lenei tusiga ua fa'amoemoe muamua lava mo le fa'atomuaga faʻatasi ai ma le faʻaogaina o galuega i Kubernetes Canary, talu ai o loʻo i ai auala sili atu le aoga o le masini, lea o le a tatou iloiloina i mataupu o loʻo mulimuli mai.


Canary Deployment i Kubernetes #1: Gitlab CI

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

Canary Deployment

Faatasi ai ma le Canary fuafuaga, faʻafouga muamua e faʻaoga i naʻo se vaega o tagata faʻaoga. E ala i le mataʻituina, faʻamaumauga faʻamaumauga, suʻega tusi lesona, poʻo isi auala faʻaalia, e faʻataʻitaʻiina le faʻasalalauga aʻo leʻi tuʻuina atu i tagata uma.

Kubernetes Deployment (fa'afouina fa'afouga)

Ole ta'iala fa'aletonu mo Kubernetes Deployment o lo'o fa'afou-fa'afou, lea e fa'alauiloa ai se numera o pods ma fa'aaliga fou o ata. Afai na faia e aunoa ma ni faʻafitauli, e faʻamutaina pusa ma ata tuai o ata, ma faʻapipiʻi foʻi pusa fou.

GitOps

Matou te faʻaaogaina GitOps i lenei faʻataʻitaʻiga aua matou:

  • faʻaaogaina Git o se puna e tasi o le mea moni
  • matou te faʻaogaina le Git Operations mo le fausiaina ma le faʻapipiʻiina (leai ni poloaiga e ese mai i le git tag / merge e manaʻomia)

Faataitaiga:

Sei o tatou faia se fa'ata'ita'iga lelei - ia tasi le faleteuoloa mo fa'ailoga tusi talosaga ma le tasi mo atina'e tetele.

Fale teu oloa

O se Python + Flask API faigofie tele lea e toe faʻafoʻi mai se tali e pei o JSON. O le a matou fausia le afifi e ala i GitlabCI ma tulei le taunuuga i le Gitlab Registry. I totonu o le resitala e lua a matou faʻasalalauga faʻasalalauga eseese:

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

Pau lava le eseesega i le va o latou o le suiga i le faila JSON toe faafoi. Matou te faʻaogaina lenei talosaga e vaʻavaʻai i le faigofie e mafai ai po o le a le faʻamatalaga matou te fesoʻotaʻi ai.

Fale teufale tetele

I lenei turnip o le a matou faʻaogaina e ala i GitlabCI i Kubernetes, .gitlab-ci.yml foliga faapenei:

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

Ina ia faʻataʻitaʻiina oe lava e te manaʻomia se fuifui, e mafai ona e faʻaogaina Gcloud:

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

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

E tatau ona e tui https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure ma faia se fesuiaiga KUBECONFIG i GitlabCI, lea o le a aofia ai le config mo avanoa kubectl i lau fuifui.

E mafai ona e faitau i le auala e maua ai faʻamaoniga mo se fuifui (Gcloud) saʻo iinei.

Aseta Yaml

I totonu o fale teu oloa o loʻo i ai la matou auaunaga:

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

Ma fa'apipi'i i totonu 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

Ma le isi faʻapipiʻiina i totonu 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

Manatua o le app-deploy e leʻo iai ni faʻataʻitaʻiga faʻamalamalamaina.

Faʻatinoina le faʻatulagaina muamua

Ina ia amata le faʻapipiʻiina muamua, e mafai ona e amataina le paipa GitlabCI ma le lima i luga o le paranesi matai. Pe 'a uma lena kubectl e tatau ona faʻaalia mea nei:

Canary Deployment i Kubernetes #1: Gitlab CI

Ua tatou vaai app deployment with 10 replicas and app-canary with 0. E iai foʻi le LoadBalancer lea e mafai ona tatou maua mai ai curl e ala i fafo IP:

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

Canary Deployment i Kubernetes #1: Gitlab CI

Matou te vaʻaia o la matou suʻega suʻega e naʻo le "v1".

Fa'atinoina o le fa'aogaina o Canary

Laasaga 1: faʻamalolo se faʻamatalaga fou mo nisi tagata faʻaoga

Matou te setiina le numera o kopi i le 1 i le faila deploy-canary.yaml ma le ata fou:

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

I le faila deploy.yaml na matou suia le numera o kopi i le 9:

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

Matou te tuleia nei suiga i le faleoloa lea e amata ai le faʻapipiʻiina (e ala i GitlabCI) ma vaʻai i se taunuuga:

Canary Deployment i Kubernetes #1: Gitlab CI

O la matou Au'aunaga o le a fa'asino atu i fa'agaioiga uma e lua, talu ai o lo'o i ai uma i la'ua le filifiliga o mea. Ona o le fa'aletonu o le fa'avasegaina o Kubernetes, e tatau ona tatou va'ai i tali eseese mo le ~ 10% o talosaga:

Canary Deployment i Kubernetes #1: Gitlab CI

O le tulaga o loʻo i ai nei o la matou talosaga (GitOps, ave mai le Git e avea ma Punavai Tasi o le Upumoni) o le i ai o ni faʻaoga se lua ma faʻataʻitaʻiga faʻamalosi, tasi mo lomiga taʻitasi.

~ 10% o tagata faʻaoga e masani i se faʻamatalaga fou ma faʻataʻitaʻiina ma le le iloa. O le taimi lenei e siaki ai mea sese i totonu o ogalaau ma mataʻituina faʻamaumauga e suʻe ai faʻafitauli.

Laasaga 2: Faʻasaʻo le lomiga fou i tagata faʻaoga uma

Na matou filifili na sologa lelei mea uma ma o lea e manaʻomia ona matou faʻasalalau le lomiga fou i tagata uma. Ina ia faia lenei mea matou te faʻafouina deploy.yaml fa'apipi'i se fa'ailoga fou o le ata ma le numera o fa'atusa e tutusa ma le 10. I deploy-canary.yaml matou te setiina le numera o kopi i tua i le 0. A maeʻa le faʻapipiʻiina, o le taunuuga o le a faʻapea:

Canary Deployment i Kubernetes #1: Gitlab CI

E tauaofai

Mo aʻu, o le faʻatinoina o le faʻaogaina ma le lima i lenei auala e fesoasoani e malamalama ai i le faigofie ona mafai ona faʻaogaina e faʻaaoga ai le k8s. Talu ai ona o le Kubernetes e faʻatagaina oe e faʻafouina mea uma e ala i se API, o nei laasaga e mafai ona otometi e ala i tusitusiga.

O le isi mea e manaʻomia ona faʻatinoina o le suʻega faʻailoga (LoadBalancer poʻo le Ingress) lea e naʻo le lomiga fou e mafai ona maua. E mafai ona fa'aoga mo su'esu'ega tusilima.

I tala i le lumana'i, o le a matou su'esu'eina isi fofo otometi e fa'atino ai le tele o mea na matou faia.

Faitau foi isi tala i la matou blog:

puna: www.habr.com

Faaopoopo i ai se faamatalaga