Gelida Canary ee Kubernetes #1: Gitlab CI

Waxaan u isticmaali doonaa Gitlab CI iyo buug-gacmeedka GitOps si aan u hirgelino oo aan u isticmaalno keenista Canary gudaha Kubernetes

Gelida Canary ee Kubernetes #1: Gitlab CI

Maqaallada taxanahan:

Waxaan u samayn doonaa geynta Canary si gacanta ah anagoo adeegsanayna GitOps iyo abuurista/wax ka bedelka agabyada ugu muhiimsan ee Kubernetes. Maqaalkan waxa ugu horayn loogu talagalay hordhac oo leh sida geyntu uga shaqeyso Kubernetes Canary, maadaama ay jiraan habab badan oo wax ku ool ah oo otomaatig ah, kuwaas oo aan ku tixgelin doono maqaallada soo socda.


Gelida Canary ee Kubernetes #1: Gitlab CI

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

Gelida Canary

Istaraatiijiyada Canary-ga, cusbooneysiinta waxaa marka hore lagu dabaqaa qayb-hoosaad isticmaalayaasha ah. Iyadoo loo marayo la socodka, xogta log, tijaabinta gacanta, ama kanaalada kale ee jawaab celinta, siideynta waa la tijaabiyaa ka hor inta aan loo sii deyn dhammaan isticmaalayaasha.

Kubernetes Deployment (cusboonaysiinta duubista)

Istaraatiijiyadda caadiga ah ee Kubernetes Deployment waa dib-u-cusbooneysiin, halkaas oo tiro go'an oo tufaax ah lagu bilaabay noocyo cusub oo sawirro ah. Haddii la abuuray dhibaato la'aan, galalka leh muuqaallo hore oo muuqaal ah ayaa la joojiyaa, iyo tufaaxyo cusub ayaa la abuuray si isku mid ah.

GitOps

Tusaalahan waxaan u isticmaalnaa GitOps sababtoo ah:

  • iyadoo la adeegsanayo Git sida isha kaliya ee runta
  • Waxaan u isticmaalnaa Git Operations dhisidda iyo geynta (wax amar ah oo aan ahayn git tag/mideynta looma baahna)

Tusaale:

Aynu qaadano dhaqan wanaagsan - in aan haysano hal kayd oo code code ah iyo mid kaabayaasha dhaqaalaha ah.

Kaydka codsiga

Kani waa Python+Flask API aad u fudud oo u soo celisa jawaabta JSON ahaan. Waxaan ku dhisi doonaa xirmada iyada oo loo sii marayo GitlabCI oo aan natiijada u riixno Diiwaanka Gitlab. Diiwaanka waxaan ku haynaa laba nooc oo sii dayn ah:

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

Farqiga keliya ee u dhexeeya waa isbeddelka faylka JSON ee la soo celiyay. Waxaan u isticmaalnaa arjigan si aan ugu sawirno sida ugu fudud ee suurtogalka ah nooca aan kula xiriireyno.

Kaydka kaabayaasha dhaqaalaha

Dabagalkan waxaanu geyn doonaa GitlabCI ilaa Kubernetes, .gitlab-ci.yml sidan oo kale:

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

Si aad naftaada u maamusho waxaad u baahan doontaa koox, waxaad isticmaali kartaa Gcloud:

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

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

Waxaad u baahan tahay inaad fargeeto https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure oo abuur doorsoome KUBECONFIG gudaha GitlabCI, kaas oo ka koobnaan doona qaabeynta gelitaanka kubectl kooxdaada.

Waxaad ka akhrisan kartaa sida loo helo shahaadooyinka kooxda (Gcloud) halkan.

Kaabayaasha Yaml

Kaydka kaabayaasha waxaan ku leenahay adeeg:

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

Iyo in la geeyo 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

Iyo hawlgal kale oo gudaha ah 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

Ogsoonow in abka-deploy-ku aanu lahayn wax nuqul ah oo la qeexay weli.

Samaynta geynta bilowga ah

Si aad u bilowdo hawlgelinta bilowga ah, waxaad gacanta ku bilaabi kartaa dhuumaha GitlabCI ee laanta sare. Intaa ka dib kubectl waa inay soo saartaa kuwan soo socda:

Gelida Canary ee Kubernetes #1: Gitlab CI

Waan aragnaa app keenista 10 replicas iyo app-canary oo leh 0. Waxa kale oo jira LoadBalancer kaas oo aanu ka heli karno curl iyada oo loo marayo IP-ga Dibadda:

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

Gelida Canary ee Kubernetes #1: Gitlab CI

Waxaan aragnaa in codsigayaga imtixaanku uu kaliya soo celinayo "v1".

Fulinta hawlgalinta Canary

Talaabada 1: sii daayo version cusub ee isticmaalayaasha qaarkood

Waxaan dhignay tirada nuqullada 1 ee faylka deploy-canary.yaml iyo sawirka nooca cusub:

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

Faylka ku jira deploy.yaml Waxaan u bedelnay tirada nuqullada 9:

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

Waxaanu isbeddeladan ku riixaynaa bakhaarka ay ka bilaabmi doonto diritaanka (iyada oo loo marayo GitlabCI) oo aan aragno natiijada:

Gelida Canary ee Kubernetes #1: Gitlab CI

Adeegeena wuxuu tilmaami doonaa labada diritaan, maadaama labaduba ay leeyihiin xulashada abka. Sababo la xiriira kala soocida caadiga ah ee Kubernetes, waa inaan aragnaa jawaabo kala duwan ~ 10% codsiyada:

Gelida Canary ee Kubernetes #1: Gitlab CI

Xaaladda hadda ee codsigeena (GitOps, oo laga soo qaatay Git oo ah Isha Kaliya ee Runta) waa joogitaanka laba dirid oo wata nuqulo firfircoon, mid nooc kasta ah.

~ 10% isticmaalayaashu waxay barteen nooc cusub oo si ula kac ah ayey u tijaabiyaan. Hadda waa waqtigii la hubin lahaa khaladaadka ku jira diiwaanka iyo la socodka xogta si loo helo dhibaatooyinka.

Tallaabada 2: U sii daayo nooca cusub dhammaan isticmaalayaasha

Waxaan go'aansanay in wax walba si wanaagsan u dhaceen oo hadda waxaan u baahanahay inaan u soo saarno nooca cusub dhammaan isticmaalayaasha. Si tan loo sameeyo waxaan si fudud u cusbooneysiineynaa deploy.yaml rakibidda nooc cusub oo sawirka ah iyo tirada nuqullada oo le'eg 10. In deploy-canary.yaml Waxaan dib u dhignay tirada nuqullada 0. Ka dib marka la diro, natiijadu waxay noqon doontaa sida soo socota:

Gelida Canary ee Kubernetes #1: Gitlab CI

Si loo soo koobo

Aniga ahaan, ku socodsiinta gacanta ku geynta habkan waxay gacan ka geysaneysaa fahamka sida ugu fudud ee loo habeyn karo iyadoo la adeegsanayo k8s. Maadaama Kubernetes ay kuu ogolaato inaad wax walba ku cusboonaysiiso API, tillaabooyinkan waxaa si toos ah loogu samayn karaa qoraallo.

Waxyaabaha kale ee u baahan in la hirgeliyo waa barta gelitaanka tijaabada (LoadBalancer ama iyada oo loo marayo Ingress) kaas oo kaliya lagu heli karo nooca cusub. Waxa loo isticmaali karaa baadhashada gacanta.

Maqaallada mustaqbalka, waxaanu ku eegi doonaa xalalka kale ee tooska ah ee hirgaliya inta badan waxa aanu samaynay.

Sidoo kale akhri maqaallo kale oo ku jira blog-keena:

Source: www.habr.com

Add a comment