Penyebaran Canary ing Kubernetes # 1: Gitlab CI

Kita bakal nggunakake Gitlab CI lan GitOps manual kanggo ngleksanakake lan nggunakake penyebaran Canary ing Kubernetes

Penyebaran Canary ing Kubernetes # 1: Gitlab CI

Artikel saka seri iki:

Kita bakal nindakake penyebaran Canary kanthi manual liwat GitOps lan nggawe / ngowahi sumber daya utama Kubernetes. Artikel iki dimaksudaké utamané kanggo introduksi kanthi cara penyebaran ing Kubernetes Canary, amarga ana cara otomatisasi sing luwih efektif, sing bakal ditimbang ing artikel ing ngisor iki.


Penyebaran Canary ing Kubernetes # 1: Gitlab CI

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

Penyebaran Canary

Kanthi strategi Canary, nganyari pisanan ditrapake mung kanggo subset pangguna. Liwat ngawasi, data log, tes manual, utawa saluran umpan balik liyane, rilis kasebut diuji sadurunge dirilis menyang kabeh pangguna.

Kubernetes Deployment (update bergulir)

Strategi standar kanggo Kubernetes Deployment yaiku rolling-update, ing ngendi sawetara pods diluncurake nganggo versi gambar anyar. Yen padha digawe tanpa masalah, pods karo versi lawas saka gambar bakal mungkasi, lan pods anyar digawe podo karo.

GitOps

Kita nggunakake GitOps ing conto iki amarga kita:

  • nggunakake Git minangka sumber siji bebener
  • kita nggunakake Operasi Git kanggo mbangun lan panyebaran (ora ana prentah kajaba git tag/merge sing dibutuhake)

Conto:

Ayo dadi praktik sing apik - duwe siji gudang kanggo kode aplikasi lan siji kanggo infrastruktur.

Repositori aplikasi

Iki Python + Flask API banget prasaja sing ngasilake respon minangka JSON. Kita bakal mbangun paket liwat GitlabCI lan push asil menyang Gitlab Registry. Ing registri kita duwe rong versi rilis sing beda:

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

Bentenipun mung ing antarane iku owah-owahan ing file JSON bali. Kita nggunakake aplikasi iki kanggo nggambarake kanthi gampang versi apa sing kita sesambungake.

Infrastruktur gudang

Ing turnip iki kita bakal nyebar liwat GitlabCI menyang Kubernetes, .gitlab-ci.yml katon kaya iki:

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

Kanggo mbukak dhewe, sampeyan butuh kluster, sampeyan bisa nggunakake Gcloud:

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

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

Sampeyan kudu garpu https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure lan nggawe variabel KUBECONFIG ing GitlabCI, sing bakal ngemot konfigurasi kanggo akses kubectl menyang kluster sampeyan.

Sampeyan bisa maca babagan carane entuk kredensial kanggo kluster (Gcloud) tengen kene.

Infrastruktur Yaml

Ing repositori infrastruktur kita duwe layanan:

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

Lan penyebaran ing 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

Lan penyebaran liyane ing 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

Elinga yen app-deploy durung duwe replika sing ditetepake.

Nindakake penyebaran awal

Kanggo miwiti panyebaran awal, sampeyan bisa miwiti pipa GitlabCI kanthi manual ing cabang master. Sawise iku kubectl ngirim output ing ngisor iki:

Penyebaran Canary ing Kubernetes # 1: Gitlab CI

Kene ngerti app penyebaran karo 10 replika lan app-canary karo 0. Ana uga LoadBalancer saka ngendi kita bisa ngakses liwat curl liwat IP Eksternal:

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

Penyebaran Canary ing Kubernetes # 1: Gitlab CI

Kita weruh yen aplikasi tes mung ngasilake "v1".

Nglakokake penyebaran Canary

Langkah 1: ngeculake versi anyar kanggo sawetara pangguna

Kita nyetel jumlah replika dadi 1 ing file deploy-canary.yaml lan gambar versi anyar:

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

Ing file deploy.yaml kita ngganti jumlah replika dadi 9:

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

Kita push owah-owahan iki menyang repositori saka ngendi penyebaran bakal diwiwiti (liwat GitlabCI) lan ndeleng minangka asil:

Penyebaran Canary ing Kubernetes # 1: Gitlab CI

Layanan kita bakal nuduhake loro panyebaran, amarga loro-lorone duwe pamilih app. Amarga randomisasi standar Kubernetes, kita kudu ndeleng respon sing beda kanggo ~ 10% panjalukan:

Penyebaran Canary ing Kubernetes # 1: Gitlab CI

Kahanan saiki aplikasi kita (GitOps, dijupuk saka Git minangka Sumber Tunggal saka Truth) yaiku anané rong panyebaran kanthi replika aktif, siji kanggo saben versi.

~ 10% pangguna dadi akrab karo versi anyar lan ora sengaja nyoba. Saiki iki wektu kanggo mriksa kesalahan ing log lan ngawasi data kanggo nemokake masalah.

Langkah 2: Rilis versi anyar kanggo kabeh pangguna

Kita mutusake manawa kabeh wis apik lan saiki kita kudu nggulung versi anyar kanggo kabeh pangguna. Kanggo nindakake iki, kita mung nganyari deploy.yaml nginstal versi anyar saka gambar lan nomer réplika witjaksono kanggo 10. Ing deploy-canary.yaml kita nyetel jumlah replika bali menyang 0. Sawise penyebaran, asil bakal kaya ing ngisor iki:

Penyebaran Canary ing Kubernetes # 1: Gitlab CI

Kanggo ngringkes

Kanggo kula, mbukak penyebaran kanthi manual kanthi cara iki mbantu ngerti carane gampang bisa diatur nggunakake k8s. Wiwit Kubernetes ngidini sampeyan nganyari kabeh liwat API, langkah kasebut bisa otomatis liwat skrip.

Bab liya sing kudu ditindakake yaiku titik entri tester (LoadBalancer utawa liwat Ingress) sing mung bisa diakses versi anyar. Bisa digunakake kanggo browsing manual.

Ing artikel sabanjure, kita bakal mriksa solusi otomatis liyane sing ngleksanakake kabeh sing wis ditindakake.

Uga maca artikel liyane ing blog kita:

Source: www.habr.com

Add a comment