Te Tukunga Canary i Kubernetes #1: Gitlab CI

Ka whakamahia e matou a Gitlab CI me nga GitOps a-ringa ki te whakatinana me te whakamahi i te whakatakotoranga Canary ki Kubernetes

Te Tukunga Canary i Kubernetes #1: Gitlab CI

Nga tuhinga mai i tenei raupapa:

Ka mahia e matou te tohatoha Canary ma te ringa o GitOps me te hanga/whakarereke i nga rauemi matua Kubernetes. Ko te tikanga tenei tuhinga mo te whakataki me pehea te mahi i roto i te Kubernetes Canary, na te mea he maha ake nga tikanga mo te mahi aunoa, ka whakaarohia e tatou i roto i nga tuhinga e whai ake nei.


Te Tukunga Canary i Kubernetes #1: Gitlab CI

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

Te Tukunga Canary

Ma te rautaki Canary, ka tono tuatahi nga whakahoutanga ki tetahi waahanga o nga kaiwhakamahi. Na roto i te aro turuki, i nga raraunga rangitaki, i nga whakamatautau a-ringa, i etahi atu huarahi urupare ranei, ka whakamatauhia te tukunga i mua i te tuku ki nga kaiwhakamahi katoa.

Te Whakataunga Kubernetes (whakahoutanga hurihuri)

Ko te rautaki taunoa mo Kubernetes Deployment kei te huri-whakahou, i reira ka whakarewahia te maha o nga putunga me nga putanga hou o nga whakaahua. Mena i hangaia kaore he raruraru, ka mutu nga pene me nga ahua tawhito o nga whakaahua, ka hangaia nga pene hou i roto i te whakarara.

GitOps

Ka whakamahia e matou a GitOps i tenei tauira na te mea:

  • te whakamahi i a Git hei puna kotahi o te pono
  • Ka whakamahia e matou nga Mahi a Git mo te hanga me te tuku (kaore he whakahau i tua atu i te git tag/hanumi e hiahiatia ana)

Hei tauira:

Me mahi pai - kia kotahi te putunga mo te waehere tono me tetahi mo nga hanganga.

Pupuri tono

He Python+Flask API tino ngawari tenei e whakahoki mai ana i te urupare hei JSON. Ka hangaia e matou te kete ma te GitlabCI ka pana te hua ki te Rehita Gitlab. I roto i te rehita e rua nga putanga tuku rereke:

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

Ko te rereketanga anake i waenga i a raatau ko te huringa o te konae JSON kua whakahokia. Ka whakamahia e matou tenei tono ki te tiro ngawari ki te ahua o te putanga e korero ana matou.

Pupuri hangahanga

I tenei kemu ka tukuna ma te GitlabCI ki Kubernetes, .gitlab-ci.yml penei te ahua:

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

Hei whakahaere i a koe ake ka hiahia koe ki te tautau, ka taea e koe te whakamahi Gcloud:

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

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

Me marau koe https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure me te hanga taurangi KUBECONFIG i GitlabCI, kei roto te whirihora mo te uru kubectl ki to tautau.

Ka taea e koe te panui me pehea te tiki tohu mo te tautau (Gcloud) tika i konei.

Hanganga Yaml

I roto i te rehitatanga hanganga kei a maatau ratonga:

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

Me te tohatoha ki roto 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

Me tetahi atu whakaurunga ki roto 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

Kia mahara ko te tuku-taupānga kaore ano kia tautuhia he tauira.

Te mahi tukunga tuatahi

Hei tiimata i te tukunga tuatahi, ka taea e koe te tiimata i te paipa GitlabCI i runga i te peka matua. I muri i tera kubectl me whakaputa nga mea e whai ake nei:

Te Tukunga Canary i Kubernetes #1: Gitlab CI

Ka kite tatou app deployment with 10 replicas and app-canary with 0. He LoadBalancer ano ka taea e tatou te uru atu curl mā IP waho:

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

Te Tukunga Canary i Kubernetes #1: Gitlab CI

Ka kite matou ko ta maatau tono whakamatautau ka hoki mai "v1".

Te whakahaere i te tohatoha Canary

Hipanga 1: tuku he putanga hou mo etahi kaiwhakamahi

Ka tautuhia e matou te maha o nga tauira ki te 1 i roto i te konae deploy-canary.yaml me te ahua putanga hou:

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

I roto i te kōnae deploy.yaml I hurihia e matou te maha o nga tauira ki te 9:

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

Ka panaia e matou enei huringa ki te putunga ka tiimata te tuku (ma GitlabCI) ka kite i te hua:

Te Tukunga Canary i Kubernetes #1: Gitlab CI

Ka tohu ta maatau Ratonga ki nga waahanga e rua, na te mea kei a raua te kaiwhiri tono. Na te mahi matapōkere taunoa a Kubernetes, me kite tatou i nga whakautu rereke mo ~10% o nga tono:

Te Tukunga Canary i Kubernetes #1: Gitlab CI

Ko te ahuatanga o to maatau tono (GitOps, i tangohia mai i a Git hei Puna Kotahi o te Pono) ko te aroaro o nga waahanga e rua me nga tauira kaha, kotahi mo ia putanga.

~10% o nga kaiwhakamahi ka waia ki tetahi putanga hou, ka whakamatau pohehe. Ko te wa tenei ki te tirotiro mo nga hapa i roto i nga raarangi me nga raraunga aroturuki ki te rapu raru.

Hipanga 2: Tukuna te putanga hou ki nga kaiwhakamahi katoa

I whakatauhia e maatau i pai nga mea katoa, a inaianei me whakaputa te putanga hou ki nga kaiwhakamahi katoa. Hei mahi i tenei ka whakahou noa matou deploy.yaml te whakauru i tetahi putanga hou o te ahua me te maha o nga tauira rite ki te 10. In deploy-canary.yaml ka tautuhia e matou te maha o nga tauira ki te 0. I muri i te tukunga, ka penei te hua:

Te Tukunga Canary i Kubernetes #1: Gitlab CI

Hei whakariterite

Ki ahau nei, ko te whakahaere a-ringa i te horahanga ma tenei huarahi ka maarama te ngawari ki te whirihora ma te whakamahi i nga k8s. I te mea ka taea e Kubernetes te whakahou i nga mea katoa ma te API, ka taea te mahi aunoa i enei mahi ma nga tuhinga.

Ko tetahi atu mea e tika ana kia whakatinanahia he waahi whakauru whakamatautau (LoadBalancer, ma te Ingress ranei) ka taea te uru atu ki te putanga hou. Ka taea te whakamahi mo te tirotiro a-ringa.

I nga tuhinga a muri ake nei, ka tirohia e matou etahi atu otinga aunoa e whakatinana ana i te nuinga o nga mea kua mahia e matou.

Panuihia etahi atu tuhinga i runga i ta maatau blog:

Source: will.com

Tāpiri i te kōrero