Deplwaman Canary nan Kubernetes #1: Gitlab CI

Nou pral sèvi ak Gitlab CI ak GitOps manyèl pou aplike epi sèvi ak deplwaman Canary nan Kubernetes

Deplwaman Canary nan Kubernetes #1: Gitlab CI

Atik ki soti nan seri sa a:

Nou pral fè deplwaman Canary manyèlman atravè GitOps ak kreye/modifye resous prensipal Kubernetes yo. Atik sa a gen entansyon prensipalman pou entwodiksyon ak ki jan deplwaman travay nan Kubernetes Canary, depi gen metòd pi efikas nan automatisation, ke nou pral konsidere nan atik sa yo.


Deplwaman Canary nan Kubernetes #1: Gitlab CI

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

Deplwaman Canary

Avèk estrateji Canary, mizajou yo premye aplike nan sèlman yon ti gwoup itilizatè yo. Atravè siveyans, done boutèy demi lit, tès manyèl, oswa lòt chanèl fidbak, yo teste liberasyon an anvan li lage bay tout itilizatè yo.

Deplwaman Kubernetes (aktyalizasyon woule)

Estrateji default pou Kubernetes Deployment se aktyalizasyon woule, kote yon sèten kantite gous yo lanse ak nouvo vèsyon imaj yo. Si yo te kreye san pwoblèm, gous ak ansyen vèsyon imaj yo sispann, epi nouvo gous yo kreye an paralèl.

GitOps

Nou itilize GitOps nan egzanp sa a paske nou:

  • lè l sèvi avèk Git kòm yon sèl sous verite
  • nou itilize Git Operations pou konstwi ak deplwaman (pa gen okenn kòmandman ki pa bezwen git tag/fusion)

Egzanp

Ann pran yon bon pratik - pou gen yon sèl depo pou kòd aplikasyon ak youn pou enfrastrikti.

Repozitwa aplikasyon

Sa a se yon trè senp Python + Flask API ki retounen yon repons kòm JSON. Nou pral bati pake a atravè GitlabCI epi pouse rezilta a nan Rejis Gitlab la. Nan rejis la nou gen de vèsyon lage diferan:

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

Sèl diferans ki genyen ant yo se chanjman nan dosye JSON retounen an. Nou itilize aplikasyon sa a pou wè pi fasil ke posib ak ki vèsyon n ap kominike.

Depo enfrastrikti

Nan Navèt sa a nou pral deplwaye atravè GitlabCI nan Kubernetes, .gitlab-ci.yml sanble tankou sa a:

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

Pou kouri li tèt ou ou pral bezwen yon gwoup, ou ka itilize Gcloud:

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

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

Ou bezwen fouchèt https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure epi kreye yon varyab KUBECONFIG nan GitlabCI, ki pral genyen konfigirasyon an pou aksè kubectl nan grap ou a.

Ou ka li sou fason pou jwenn kalifikasyon pou yon gwoup (Gcloud) isit la.

Enfrastrikti Yaml

Nan depo enfrastrikti a nou gen sèvis:

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

Ak deplwaman nan 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

Ak yon lòt deplwaman nan 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

Remake byen ke app-deploy pa gen okenn kopi defini ankò.

Fè premye deplwaman

Pou kòmanse deplwaman inisyal la, ou ka kòmanse tiyo GitlabCI manyèlman sou branch mèt la. Apre sa kubectl ta dwe bay sa ki annapre yo:

Deplwaman Canary nan Kubernetes #1: Gitlab CI

Nou wè app deplwaman ak 10 kopi ak app-Canary ak 0. Genyen tou yon LoadBalancer soti nan ki nou ka jwenn aksè nan curl atravè IP ekstèn:

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

Deplwaman Canary nan Kubernetes #1: Gitlab CI

Nou wè aplikasyon tès nou an sèlman retounen "v1".

Egzekite deplwaman Canary

Etap 1: lage yon nouvo vèsyon pou kèk itilizatè

Nou mete kantite kopi a 1 nan fichye deploy-canary.yaml ak imaj nouvo vèsyon an:

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

Nan dosye deploy.yaml nou chanje kantite kopi a 9:

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

Nou pouse chanjman sa yo nan depo a ki soti nan ki deplwaman an pral kòmanse (via GitlabCI) epi wè kòm yon rezilta:

Deplwaman Canary nan Kubernetes #1: Gitlab CI

Sèvis nou an pral lonje dwèt sou tou de deplwaman yo, paske tou de gen seleksyon aplikasyon an. Akòz owaza default Kubernetes, nou ta dwe wè repons diferan pou ~ 10% demann:

Deplwaman Canary nan Kubernetes #1: Gitlab CI

Eta aktyèl aplikasyon nou an (GitOps, pran nan Git kòm yon sèl sous verite) se prezans de deplwaman ak kopi aktif, youn pou chak vèsyon.

~ 10% itilizatè yo vin abitye ak yon nouvo vèsyon epi teste li san entansyon. Kounye a se tan pou tcheke pou erè nan mòso bwa yo ak done siveyans pou jwenn pwoblèm.

Etap 2: Lage nouvo vèsyon an bay tout itilizatè yo

Nou deside ke tout bagay ale byen e kounye a, nou bezwen woule nouvo vèsyon an bay tout itilizatè yo. Pou fè sa nou tou senpleman mete ajou deploy.yaml enstale yon nouvo vèsyon imaj la ak kantite kopi ki egal a 10. Nan deploy-canary.yaml nou mete kantite kopi tounen nan 0. Apre deplwaman, rezilta a pral jan sa a:

Deplwaman Canary nan Kubernetes #1: Gitlab CI

Adisyon moute

Pou m ', kouri deplwaman an manyèlman fason sa a ede konprann ki jan fasil li ka configuré lè l sèvi avèk k8s. Depi Kubernetes pèmèt ou mete ajou tout bagay atravè yon API, etap sa yo ka otomatize atravè scripts.

Yon lòt bagay ki bezwen aplike se yon pwen antre tèsteur (LoadBalancer oswa atravè Ingress) atravè ki sèlman nouvo vèsyon an ka jwenn aksè. Li ka itilize pou Navigasyon manyèl.

Nan pwochen atik, nou pral tcheke lòt solisyon otomatik ki aplike pi fò nan sa nou te fè.

Epitou li lòt atik sou blog nou an:

Sous: www.habr.com

Add nouvo kòmantè