Aiwatar da Canary a Kubernetes # 1: Gitlab CI

Za mu yi amfani da Gitlab CI da manual GitOps don aiwatarwa da amfani da tura Canary a Kubernetes

Aiwatar da Canary a Kubernetes # 1: Gitlab CI

Labarai daga wannan jerin:

Za mu yi jigilar Canary da hannu ta hanyar GitOps da ƙirƙirar/gyara manyan albarkatun Kubernetes. An yi nufin wannan labarin da farko don gabatarwa tare da yadda ƙaddamarwa ke aiki a Kubernetes Canary, tun da akwai hanyoyin da za a iya amfani da su ta atomatik, waɗanda za mu yi la'akari da su a cikin labaran da ke gaba.


Aiwatar da Canary a Kubernetes # 1: Gitlab CI

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

Canary turawa

Tare da dabarun Canary, ana fara amfani da sabuntawa ga rukunin masu amfani kawai. Ta hanyar saka idanu, bayanan log, gwajin hannu, ko wasu tashoshi na amsawa, ana gwada sakin kafin a fitar da shi ga duk masu amfani.

Aiwatar da Kubernetes (sabuntawa)

Tsohuwar dabarun don Kubernetes Deployment shine sabuntawa, inda aka ƙaddamar da takamaiman adadin kwasfan fayiloli tare da sabbin nau'ikan hotuna. Idan an ƙirƙira su ba tare da matsala ba, an ƙare kwas ɗin da ke da tsoffin nau'ikan hotuna, kuma ana ƙirƙirar sabbin kwasfa a layi daya.

GitOps

Muna amfani da GitOps a cikin wannan misalin saboda mu:

  • amfani da Git azaman tushen gaskiya guda ɗaya
  • muna amfani da Ayyukan Git don ginawa da turawa (babu umarni ban da git tag / haɗawa da ake buƙata)

Alal misali:

Bari mu ɗauki kyakkyawan aiki - don samun wurin ajiya guda don lambar aikace-aikacen da ɗaya don abubuwan more rayuwa.

Ma'ajiyar aikace-aikace

Wannan API ɗin Python+Flask ne mai sauƙi wanda ke mayar da martani azaman JSON. Za mu gina kunshin ta hanyar GitlabCI kuma mu tura sakamakon zuwa Gitlab Registry. A cikin rajista muna da nau'ikan saki daban-daban guda biyu:

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

Iyakar abin da ke tsakanin su shine canji a cikin fayil ɗin JSON da aka dawo. Muna amfani da wannan aikace-aikacen don ganin sauƙi cikin sauƙi wanda muke sadarwa da shi.

Ma'ajiyar kayan more rayuwa

A cikin wannan turnip za mu tura ta GitlabCI zuwa Kubernetes, .gitlab-ci.yml kama da wannan:

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

Don gudanar da shi da kanku kuna buƙatar gungu, zaku iya amfani da Gcloud:

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

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

Kuna buƙatar cokali mai yatsa https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure kuma ƙirƙirar m KUBECONFIG a GitlabCI, wanda zai ƙunshi saitin don samun dama kubectl zuwa gungu.

Kuna iya karanta game da yadda ake samun takaddun shaida don tari (Gcloud) dama a nan.

Kayan aikin Yaml

A cikin ma'ajiyar kayayyakin more rayuwa muna da sabis:

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

Da turawa cikin 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

Da wani turawa a ciki 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

Lura cewa ƙaddamar da ƙa'idar ba ta da takamaiman kwafi har yanzu.

Yin turawa na farko

Don fara jigilar farko, zaku iya fara bututun GitlabCI da hannu akan babban reshen. Bayan haka kubectl ya kamata a fitar da abubuwan da ke biyowa:

Aiwatar da Canary a Kubernetes # 1: Gitlab CI

Muna gani app turawa tare da 10 replicas da app-canary tare da 0. Hakanan akwai LoadBalancer wanda zamu iya shiga ta hanyar curl ta hanyar IP na waje:

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

Aiwatar da Canary a Kubernetes # 1: Gitlab CI

Mun ga cewa aikace-aikacen gwajin mu kawai ya dawo "v1".

Ana aiwatar da tura Canary

Mataki 1: saki wani sabon siga ga wasu masu amfani

Mun saita adadin kwafi zuwa 1 a cikin fayil deploy-canary.yaml da sabon hoton sigar:

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

A cikin fayil deploy.yaml mun canza adadin kwafin zuwa 9:

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

Muna tura waɗannan canje-canje zuwa ma'ajiyar da za a fara turawa (ta hanyar GitlabCI) kuma mu ga sakamakon:

Aiwatar da Canary a Kubernetes # 1: Gitlab CI

Sabis ɗinmu zai nuna duka abubuwan turawa, tunda duka biyun suna da zaɓin app. Saboda bazuwar Kubernetes, yakamata mu ga amsoshi daban-daban na ~10% na buƙatun:

Aiwatar da Canary a Kubernetes # 1: Gitlab CI

Halin yanayin aikace-aikacenmu na yanzu (GitOps, wanda aka karɓa daga Git azaman Tushen Gaskiya guda ɗaya) kasancewar turawa biyu tare da kwafi masu aiki, ɗaya don kowane sigar.

~10% na masu amfani sun saba da sabon sigar kuma ba da gangan ba. Yanzu shine lokaci don bincika kurakurai a cikin rajistan ayyukan da bayanan saka idanu don nemo matsaloli.

Mataki 2: Saki sabon sigar ga duk masu amfani

Mun yanke shawarar cewa komai ya tafi daidai kuma yanzu muna buƙatar fitar da sabon sigar ga duk masu amfani. Don yin wannan kawai mu sabunta deploy.yaml shigar da sabon sigar hoton da adadin kwafi daidai da 10. In deploy-canary.yaml mun saita adadin kwafi zuwa 0. Bayan turawa, sakamakon zai kasance kamar haka:

Aiwatar da Canary a Kubernetes # 1: Gitlab CI

Don taƙaita

A gare ni, gudanar da aikin da hannu ta wannan hanya yana taimakawa wajen fahimtar yadda za'a iya daidaita shi cikin sauƙi ta amfani da k8s. Tun da Kubernetes yana ba ku damar sabunta komai ta hanyar API, waɗannan matakan za a iya sarrafa su ta atomatik ta hanyar rubutun.

Wani abu kuma da ake buƙatar aiwatarwa shine wurin shigar gwaji (LoadBalancer ko ta hanyar Ingress) wanda kawai sabon sigar za a iya shiga. Ana iya amfani da shi don bincike da hannu.

A cikin kasidu masu zuwa, za mu duba wasu hanyoyin warwarewa ta atomatik waɗanda ke aiwatar da yawancin abubuwan da muka yi.

Hakanan karanta wasu labarai akan shafinmu:

source: www.habr.com

Add a comment