Canary imuṣiṣẹ ni Kubernetes # 1: Gitlab CI

A yoo lo Gitlab CI ati Afowoyi GitOps lati ṣe ati lo imuṣiṣẹ Canary ni Kubernetes

Canary imuṣiṣẹ ni Kubernetes # 1: Gitlab CI

Awọn nkan lati inu jara yii:

A yoo ṣe imuṣiṣẹ Canary pẹlu ọwọ nipasẹ GitOps ati ṣiṣẹda / ṣatunṣe awọn orisun Kubernetes akọkọ. Nkan yii jẹ ipinnu nipataki fun ifihan pẹlu bii imuṣiṣẹ ṣiṣẹ ni Kubernetes Canary, nitori awọn ọna adaṣe ti o munadoko diẹ sii wa, eyiti a yoo gbero ninu awọn nkan atẹle.


Canary imuṣiṣẹ ni Kubernetes # 1: Gitlab CI

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

Canary imuṣiṣẹ

Pẹlu ilana Canary, awọn imudojuiwọn ni a kọkọ lo si ipin awọn olumulo nikan. Nipasẹ ibojuwo, data log, idanwo afọwọṣe, tabi awọn ikanni esi miiran, idasilẹ jẹ idanwo ṣaaju ki o to tu silẹ si gbogbo awọn olumulo.

Ifilọlẹ Kubernetes (imudojuiwọn yiyi)

Ilana aiyipada fun Imuṣiṣẹ Kubernetes jẹ imudojuiwọn-yiyi, nibiti nọmba kan ti awọn adarọ-ese ti ṣe ifilọlẹ pẹlu awọn ẹya tuntun ti awọn aworan. Ti wọn ba ṣẹda laisi awọn iṣoro, awọn adarọ-ese pẹlu awọn ẹya atijọ ti awọn aworan ti pari, ati pe awọn adarọ-ese tuntun ti ṣẹda ni afiwe.

GitOps

A lo GitOps ni apẹẹrẹ yii nitori awa:

  • lilo Git gẹgẹbi orisun otitọ kan
  • a lo Awọn iṣẹ Git fun kikọ ati imuṣiṣẹ (ko si awọn aṣẹ miiran ju git tag/dapọ ni a nilo)

Apeere:

Jẹ ki a ṣe adaṣe to dara - lati ni ibi ipamọ kan fun koodu ohun elo ati ọkan fun awọn amayederun.

Ibi ipamọ ohun elo

Eyi jẹ Python + Flask API ti o rọrun pupọ ti o da esi pada bi JSON. A yoo kọ package nipasẹ GitlabCI ati Titari abajade si Iforukọsilẹ Gitlab. Ninu iforukọsilẹ a ni awọn ẹya itusilẹ oriṣiriṣi meji:

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

Iyatọ laarin wọn nikan ni iyipada ninu faili JSON ti o pada. A lo ohun elo yii lati wo ni irọrun bi o ti ṣee ṣe iru ẹya ti a n ba sọrọ.

Ibi ipamọ ohun elo

Ninu turnip yii a yoo ran lọ nipasẹ GitlabCI si Kubernetes, .gitlab-ci.yml dabi eleyi:

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

Lati ṣiṣẹ funrararẹ iwọ yoo nilo iṣupọ kan, o le lo Gcloud:

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

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

O nilo lati orita https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure ki o si ṣẹda oniyipada KUBECONFIG ni GitlabCI, eyiti yoo ni atunto fun iraye si kubectl si iṣupọ rẹ.

O le ka nipa bi o ṣe le gba awọn iwe-ẹri fun iṣupọ kan (Gcloud) nibi gangan.

Amayederun Yaml

Ninu ibi ipamọ amayederun a ni iṣẹ:

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

Ati imuṣiṣẹ ni 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

Ati imuṣiṣẹ miiran ni 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

Ṣe akiyesi pe app-fifiranṣẹ ko ni awọn ẹda ti a ti ṣalaye sibẹsibẹ.

Ṣiṣe imuṣiṣẹ akọkọ

Lati bẹrẹ imuṣiṣẹ akọkọ, o le bẹrẹ opo gigun ti epo GitlabCI pẹlu ọwọ lori ẹka titunto si. Lẹhinna kubectl yẹ ki o jade awọn wọnyi:

Canary imuṣiṣẹ ni Kubernetes # 1: Gitlab CI

A ri app imuṣiṣẹ pẹlu awọn ẹda 10 ati app-canary pẹlu 0. LoadBalancer tun wa lati eyiti a le wọle si nipasẹ curl nipasẹ IP ita:

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

Canary imuṣiṣẹ ni Kubernetes # 1: Gitlab CI

A rii pe ohun elo idanwo wa nikan pada “v1”.

Ṣiṣe imuṣiṣẹ Canary

Igbesẹ 1: tu ẹya tuntun silẹ fun diẹ ninu awọn olumulo

A ṣeto nọmba awọn ẹda si 1 ninu faili deploy-canary.yaml ati aworan ẹya tuntun:

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

Ninu faili deploy.yaml a yipada nọmba awọn ẹda si 9:

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

A Titari awọn ayipada wọnyi si ibi ipamọ lati eyiti imuṣiṣẹ yoo bẹrẹ (nipasẹ GitlabCI) ati rii bi abajade:

Canary imuṣiṣẹ ni Kubernetes # 1: Gitlab CI

Iṣẹ wa yoo tọka si awọn imuṣiṣẹ mejeeji, nitori awọn mejeeji ni yiyan ohun elo. Nitori aileto aiyipada Kubernetes, a yẹ ki o rii awọn idahun oriṣiriṣi fun ~ 10% ti awọn ibeere:

Canary imuṣiṣẹ ni Kubernetes # 1: Gitlab CI

Ipo lọwọlọwọ ti ohun elo wa (GitOps, ti a mu lati Git bi Orisun Otitọ Nikan) jẹ niwaju awọn imuṣiṣẹ meji pẹlu awọn ẹda ti nṣiṣe lọwọ, ọkan fun ẹya kọọkan.

~ 10% ti awọn olumulo di faramọ pẹlu ẹya tuntun ati idanwo aimọkan. Bayi ni akoko lati ṣayẹwo fun awọn aṣiṣe ninu awọn àkọọlẹ ati ibojuwo data lati wa isoro.

Igbesẹ 2: Tu ẹya tuntun si gbogbo awọn olumulo

A pinnu pe ohun gbogbo lọ daradara ati bayi a nilo lati yi ẹya tuntun jade si gbogbo awọn olumulo. Lati ṣe eyi a nìkan imudojuiwọn deploy.yaml fifi titun kan ti ikede ti awọn aworan ati awọn nọmba ti replicas dogba si 10. Ni deploy-canary.yaml a ṣeto nọmba awọn ẹda pada si 0. Lẹhin imuṣiṣẹ, abajade yoo jẹ bi atẹle:

Canary imuṣiṣẹ ni Kubernetes # 1: Gitlab CI

Summing soke

Fun mi, ṣiṣe imuṣiṣẹ pẹlu ọwọ ni ọna yii ṣe iranlọwọ lati ni oye bi o ṣe le ni irọrun ti o le tunto nipa lilo k8s. Niwọn igba ti Kubernetes gba ọ laaye lati ṣe imudojuiwọn ohun gbogbo nipasẹ API, awọn igbesẹ wọnyi le ṣe adaṣe nipasẹ awọn iwe afọwọkọ.

Ohun miiran ti o nilo lati ṣe imuse ni aaye titẹsi oluyẹwo (LoadBalancer tabi nipasẹ Ingress) nipasẹ eyiti ẹya tuntun nikan le wọle si. O le ṣee lo fun lilọ kiri ayelujara pẹlu ọwọ.

Ninu awọn nkan iwaju, a yoo ṣayẹwo awọn ojutu adaṣe adaṣe miiran ti o ṣe pupọ julọ ohun ti a ti ṣe.

Tun ka awọn nkan miiran lori bulọọgi wa:

orisun: www.habr.com

Fi ọrọìwòye kun