Kutumiza kwa Canary ku Kubernetes #1: Gitlab CI

Tidzagwiritsa ntchito Gitlab CI ndi GitOps yamanja kuti tigwiritse ntchito ndikugwiritsa ntchito Canary deployment ku Kubernetes

Kutumiza kwa Canary ku Kubernetes #1: Gitlab CI

Zolemba kuchokera mndandandawu:

Tidzatumiza Canary pamanja kudzera pa GitOps ndikupanga/kusintha zida zazikulu za Kubernetes. Nkhaniyi idapangidwa kuti ikhale yoyambira ndi momwe kutumizira kumagwirira ntchito ku Kubernetes Canary, popeza pali njira zowonjezera zopangira zokha, zomwe tikambirana m'nkhani zotsatirazi.


Kutumiza kwa Canary ku Kubernetes #1: Gitlab CI

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

Kutumiza kwa Canary

Ndi njira ya Canary, zosintha zimayamba kugwiritsidwa ntchito kwa kagulu kakang'ono ka ogwiritsa ntchito. Kupyolera mu kuyang'anira, zolemba zolemba, kuyesa pamanja, kapena njira zina zofotokozera, kumasulidwa kumayesedwa musanatulutsidwe kwa onse ogwiritsa ntchito.

Kubernetes Deployment (zosintha)

Njira yosasinthika ya Kubernetes Deployment ndikusintha, pomwe ma pod angapo amayambitsidwa ndi mitundu yatsopano ya zithunzi. Ngati adalengedwa popanda mavuto, ma pod okhala ndi zithunzi zakale amathetsedwa, ndipo ma pod atsopano amapangidwa mofanana.

GitOps

Timagwiritsa ntchito GitOps mu chitsanzo ichi chifukwa ife:

  • kugwiritsa ntchito Git ngati gwero limodzi lachowonadi
  • timagwiritsa ntchito Git Operations pomanga ndi kutumiza (palibe malamulo ena kupatula git tag/merge omwe akufunika)

Chitsanzo:

Tiyeni tiyesetse kuchita bwino - kukhala ndi chosungira chimodzi cha ma code ogwiritsira ntchito ndi chimodzi cha zomangamanga.

Posungira ntchito

Iyi ndi Python + Flask API yosavuta kwambiri yomwe imabwezera yankho ngati JSON. Tipanga phukusi kudzera pa GitlabCI ndikukankhira zotsatira ku Gitlab Registry. Mu registry tili ndi mitundu iwiri yotulutsa:

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

Kusiyana kokha pakati pawo ndikusintha kwa fayilo yobwezeredwa ya JSON. Timagwiritsa ntchito pulogalamuyi kuti tiwone mosavuta momwe tingathere mtundu womwe tikulankhula nawo.

Malo osungirako zomangamanga

Mu turnip iyi titumiza kudzera pa GitlabCI kupita ku Kubernetes, .gitlab-ci.yml zikuwoneka ngati:

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

Kuti muyendetse nokha mudzafunika tsango, mutha kugwiritsa ntchito Gcloud:

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

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

Muyenera kufota https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure ndi kupanga variable KUBECONFIG mu GitlabCI, yomwe idzakhala ndi config kuti mufike kubectl ku gulu lanu.

Mutha kuwerenga za momwe mungapezere zidziwitso zamagulu (Gcloud) pomwe pano.

Infrastructure Yaml

M'malo osungirako zomangamanga tili ndi ntchito:

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

Ndipo kutumizidwa mu 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

Ndipo kutumizidwa kwina 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

Dziwani kuti app-deploy ilibe zofananira zomwe zafotokozedwa pano.

Kukonzekera koyamba

Kuti muyambe kutumizira koyamba, mutha kuyambitsa mapaipi a GitlabCI pamanja panthambi yayikulu. Pambuyo pake kubectl ayenera kutulutsa zotsatirazi:

Kutumiza kwa Canary ku Kubernetes #1: Gitlab CI

Tikuwona app kutumizidwa ndi 10 replicas ndi app-canary ndi 0. Palinso LoadBalancer yomwe titha kulowamo curl kudzera pa IP Yakunja:

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

Kutumiza kwa Canary ku Kubernetes #1: Gitlab CI

Tikuwona kuti kuyesa kwathu kumangobwezera "v1".

Kutumiza kwa Canary

Gawo 1: tulutsani mtundu watsopano kwa ogwiritsa ntchito ena

Timayika chiwerengero cha zofananira kukhala 1 mufayilo ya deploy-canary.yaml ndi chithunzi chatsopano:

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

Mu fayilo deploy.yaml tinasintha chiwerengero cha replicas kukhala 9:

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

Timakankhira zosinthazi kumalo komwe kutumizidwa kudzayambira (kudzera pa GitlabCI) ndikuwona zotsatira zake:

Kutumiza kwa Canary ku Kubernetes #1: Gitlab CI

Utumiki wathu udzalozera kuzinthu zonse ziwiri, popeza onse ali ndi chosankha pulogalamu. Chifukwa chakusakhazikika kwa Kubernetes, tiyenera kuwona mayankho osiyanasiyana ~ 10% ya zopempha:

Kutumiza kwa Canary ku Kubernetes #1: Gitlab CI

Zomwe tikugwiritsa ntchito pano (GitOps, yotengedwa kuchokera ku Git ngati Gwero Limodzi La Choonadi) ndikukhalapo kwa magawo awiri omwe ali ndi zofananira zogwira ntchito, imodzi pamtundu uliwonse.

~10% ya ogwiritsa ntchito amazolowera mtundu watsopano ndikuyesa mosazindikira. Ino ndi nthawi yoti muwone zolakwika muzolemba ndi kuwunikira deta kuti mupeze zovuta.

Gawo 2: Tulutsani mtundu watsopano kwa ogwiritsa ntchito onse

Tinaganiza kuti zonse zidayenda bwino ndipo tsopano tikufunika kutulutsa mtundu watsopano kwa ogwiritsa ntchito onse. Kuti tichite izi timangosintha deploy.yaml kukhazikitsa mtundu watsopano wa chithunzicho ndi kuchuluka kwa zofananira zofanana ndi 10. Mu deploy-canary.yaml timayika chiwerengero cha replicas kubwerera ku 0. Pambuyo potumiza, zotsatira zake zidzakhala motere:

Kutumiza kwa Canary ku Kubernetes #1: Gitlab CI

Kufotokozera mwachidule

Kwa ine, kuyendetsa ntchitoyo pamanja motere kumathandiza kumvetsetsa momwe zimapangidwira mosavuta pogwiritsa ntchito ma k8s. Popeza Kubernetes amakulolani kuti musinthe chilichonse kudzera pa API, masitepewa amatha kukhala opangidwa ndi zolemba.

Chinthu chinanso chomwe chiyenera kukhazikitsidwa ndi malo olowera oyesa (LoadBalancer kapena kudzera pa Ingress) omwe angapezeke mwatsopano. Itha kugwiritsidwa ntchito kusakatula pamanja.

M'nkhani zamtsogolo, tiwona njira zina zopangira zokha zomwe zimagwiritsa ntchito zambiri zomwe tachita.

Werenganinso zolemba zina pa blog yathu:

Source: www.habr.com

Kuwonjezera ndemanga