Nbunye Canary na Kubernetes #1: Gitlab CI

Anyị ga-eji Gitlab CI na akwụkwọ ntuziaka GitOps iji mejuputa ma jiri ntinye Canary na Kubernetes.

Nbunye Canary na Kubernetes #1: Gitlab CI

Akụkọ sitere na nsonso a:

Anyị ga-eji aka na-arụ ọrụ nke Canary site na GitOps na ịmepụta / gbanwee isi ihe Kubernetes. E bu n'obi kee akụkọ a maka mmalite na otu ntinye na-arụ ọrụ na Kubernetes Canary, ebe ọ bụ na e nwere ụzọ dị irè nke akpaaka, nke anyị ga-atụle n'isiokwu ndị na-esonụ.


Nbunye Canary na Kubernetes #1: Gitlab CI

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

Nbunye Canary

Site na atụmatụ Canary, a na-ebu ụzọ tinye mmelite maka naanị obere ndị ọrụ. Site na nleba anya, data ndekọ, nyocha akwụkwọ ntuziaka, ma ọ bụ ọwa nzaghachi ndị ọzọ, a na-anwale ntọhapụ tupu ahapụ ya nye ndị ọrụ niile.

Nkwanye Kubernetes (mmelite mpịakọta)

Atụmatụ ndabara maka Kubernetes Deployment bụ emelite, ebe a na-eji ụdị onyonyo ọhụrụ ewelite ụfọdụ pọd. Ọ bụrụ na e kere ha n'enweghị nsogbu, a na-akwụsị pods nwere ụdị ihe oyiyi ochie, a na-emepụta pods ọhụrụ n'otu oge.

GitOps

Anyị na-eji GitOps n'ihe atụ a n'ihi na anyị:

  • iji Git dị ka otu isi iyi nke eziokwu
  • anyị na-eji Git Operations maka iwulite na mbugharị (ọ nweghị iwu ọzọ karịa git tag/jikota achọrọ)

Ihe nlele:

Ka anyị were ezigbo omume - inwe otu ebe nchekwa maka koodu ngwa na otu maka akụrụngwa.

Ebe nchekwa ngwa

Nke a bụ Python+Flask API dị mfe nke na-eweghachi nzaghachi dị ka JSON. Anyị ga-ewu ngwugwu ahụ site na GitlabCI wee mee ka nsonaazụ ya gaa na ndekọ Gitlab. N'ime ndekọ ahụ anyị nwere ụdị ntọhapụ abụọ dị iche iche:

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

Naanị ihe dị iche n'etiti ha bụ mgbanwe na faịlụ JSON eweghachiri. Anyị na-eji ngwa a na-ahụ anya ngwa ngwa dị ka o kwere mee ụdị ụdị anyị na-akpakọrịta.

Ebe nchekwa akụrụngwa

Na ntụgharị a, anyị ga-ebuga site na GitlabCI gaa Kubernetes, .gitlab-ci.yml yiri nke 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

Iji mee ya n'onwe gị, ị ga-achọ ụyọkọ, ị nwere ike iji Gcloud:

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

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

Ị kwesịrị ndụdụ https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure ma mepụta mgbanwe KUBECONFIG na GitlabCI, nke ga-enwe nhazi maka ịnweta kubectl na ụyọkọ gị.

Ị nwere ike ịgụ maka otu esi enweta nzere maka ụyọkọ (Gcloud) ebe a.

Yaml akụrụngwa

N'ebe nchekwa akụrụngwa anyị nwere ọrụ:

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

Na ntinye n'ime 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

Na mgbakwunye ọzọ na 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

Mara na ngwa-deploy enweghị kọwapụta oyiri ọ bụla.

Na-eme mbugharị mbụ

Iji bido mbugharị mbu, ị nwere ike iji aka bido ọkpọkọ GitlabCI na ngalaba nna ukwu. Mgbe nke ahụ mechara kubectl kwesịrị iwepụta ihe ndị a:

Nbunye Canary na Kubernetes #1: Gitlab CI

Anyị na-ahụ app ntinye ya na 10 replicas na ngwa-canary nwere 0. Enwekwara LoadBalancer nke anyị nwere ike ịnweta site na ya. curl site na IP mpụga:

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

Nbunye Canary na Kubernetes #1: Gitlab CI

Anyị na-ahụ na ngwa ule anyị na-alaghachi naanị "v1".

Na-arụ ọrụ nke Canary

Kwụpụ 1: hapụ ụdị ọhụrụ maka ụfọdụ ndị ọrụ

Anyị debere ọnụọgụ nke oyiri na 1 na faịlụ deploy-canary.yaml yana onyonyo ụdị ọhụrụ:

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

Na faịlụ deploy.yaml anyị gbanwere ọnụọgụ nke oyiri ka ọ bụrụ 9:

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

Anyị na-agbanye mgbanwe ndị a na ebe nchekwa nke ntinye ga-amalite (site na GitlabCI) wee hụ n'ihi ya:

Nbunye Canary na Kubernetes #1: Gitlab CI

Ọrụ anyị ga-arụtụ aka na mbugharị abụọ ahụ, ebe ha abụọ nwere ngwa ahọpụtara. N'ihi ndabara nke Kubernetes, anyị kwesịrị ịhụ nzaghachi dị iche iche maka ~ 10% nke arịrịọ:

Nbunye Canary na Kubernetes #1: Gitlab CI

Ọnọdụ ngwa anyị dị ugbu a (GitOps, nke ewepụtara na Git dị ka otu isi mmalite nke eziokwu) bụ ọnụnọ nke mbugharị abụọ nwere ụdị arụ ọrụ, otu maka ụdị ọ bụla.

~ 10% nke ndị ọrụ mara ụdị ọhụrụ wee nwalee ya n'amaghị ama. Ugbu a bụ oge ịlele njehie na ndekọ na data nlekota ka ịchọta nsogbu.

Kwụpụ 2: Hapụ ndị ọrụ niile ụdị ọhụrụ ahụ

Anyị kpebiri na ihe niile gara nke ọma ma ugbu a anyị kwesịrị iwepụta ụdị ọhụrụ ahụ nye ndị ọrụ niile. Iji mee nke a, anyị na-emelite naanị deploy.yaml na-etinye ụdị onyonyo ọhụrụ na ọnụọgụ nke oyiri hà 10. In deploy-canary.yaml anyị na-edobe ọnụ ọgụgụ nke oyiri azụ na 0. Mgbe ekenyela, ihe ga-esi na ya ga-abụ dị ka ndị a:

Nbunye Canary na Kubernetes #1: Gitlab CI

Iji chịkọta

Maka m, iji aka na-agba ọsọ a n'ụzọ a na-enyere aka ịghọta ka ọ dị mfe iji k8s hazie ya. Ebe Kubernetes na-enye gị ohere imelite ihe niile site na API, usoro ndị a nwere ike ịmegharị ya site na edemede.

Ihe ọzọ dị mkpa ka e mejuputa bụ ntinye ntinye tester (LoadBalancer ma ọ bụ site na Ingress) nke naanị ụdị ọhụrụ nwere ike ịnweta. Enwere ike iji ya mee ihe nchọgharị aka.

N'isiokwu ndị na-abịa n'ihu, anyị ga-enyocha ihe ngwọta ndị ọzọ na-akpaghị aka na-emejuputa ọtụtụ n'ime ihe anyị mere.

Gụọkwa akụkọ ndị ọzọ na blọọgụ anyị:

isi: www.habr.com

Tinye a comment