Kubernetes #1 හි කැනරි යෙදවීම: Gitlab CI

Kubernetes හි Canary යෙදවීම ක්‍රියාත්මක කිරීමට සහ භාවිතා කිරීමට අපි Gitlab CI සහ manual GitOps භාවිතා කරන්නෙමු.

Kubernetes #1 හි කැනරි යෙදවීම: Gitlab CI

මෙම ලිපි මාලාවේ ලිපි:

අපි GitOps හරහා කැනරි යෙදවීම අතින් සිදු කරන අතර ප්‍රධාන Kubernetes සම්පත් නිර්මාණය/වෙනස් කරන්නෙමු. මෙම ලිපිය මූලික වශයෙන් හැඳින්වීම සඳහා අදහස් කෙරේ Kubernetes Canary හි යෙදවීම ක්‍රියා කරන ආකාරය සමඟ, වඩාත් ඵලදායී ස්වයංක්‍රීය ක්‍රම ඇති බැවින්, එය අපි පහත ලිපි වලින් සලකා බලමු.


Kubernetes #1 හි කැනරි යෙදවීම: Gitlab CI

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

කැනරි යෙදවීම

Canary මූලෝපාය සමඟින්, යාවත්කාලීනයන් මුලින්ම යොදනු ලබන්නේ පරිශීලකයින්ගේ උප කුලකයකට පමණි. අධීක්ෂණය, ලොග් දත්ත, අතින් පරීක්ෂා කිරීම හෝ වෙනත් ප්‍රතිපෝෂණ නාලිකා හරහා, නිකුතුව සියලුම පරිශීලකයින් වෙත මුදා හැරීමට පෙර පරීක්ෂා කරනු ලැබේ.

Kubernetes Deployment (rolling update)

Kubernetes Deployment සඳහා වන පෙරනිමි මූලෝපාය වන්නේ rolling-update වන අතර, එහිදී රූපවල නව අනුවාද සමඟින් නිශ්චිත පොඩ් ගණනක් දියත් කෙරේ. ඒවා ගැටළු නොමැතිව නිර්මාණය කර ඇත්නම්, පින්තූරවල පැරණි අනුවාද සහිත කරල් අවසන් වන අතර නව කරල් සමාන්තරව නිර්මාණය වේ.

GitOps

අපි මෙම උදාහරණයේ GitOps භාවිතා කරන්නේ අපි:

  • සත්‍යයේ තනි මූලාශ්‍රයක් ලෙස Git භාවිතා කිරීම
  • ගොඩනැගීම සහ යෙදවීම සඳහා අපි Git මෙහෙයුම් භාවිතා කරමු (git tag/merge හැර වෙනත් විධාන අවශ්‍ය නොවේ)

උදාහරණ:

අපි හොඳ පරිචයක් ගනිමු - යෙදුම් කේතය සඳහා එක් ගබඩාවක් සහ යටිතල පහසුකම් සඳහා එකක් තිබීම.

යෙදුම් ගබඩාව

මෙය JSON ලෙස ප්‍රතිචාරයක් ලබා දෙන ඉතා සරල Python+Flask API එකකි. අපි GitlabCI හරහා පැකේජය ගොඩනඟා ප්‍රතිඵලය Gitlab Registry වෙත තල්ලු කරන්නෙමු. රෙජිස්ට්රි තුළ අපට විවිධ නිකුතු අනුවාද දෙකක් තිබේ:

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

ඔවුන් අතර ඇති එකම වෙනස වන්නේ ආපසු ලබා දුන් JSON ගොනුවේ වෙනසයි. අප සන්නිවේදනය කරන්නේ කුමන අනුවාදයද යන්න හැකි තරම් පහසුවෙන් දෘශ්‍යමාන කිරීමට අපි මෙම යෙදුම භාවිතා කරමු.

යටිතල පහසුකම් ගබඩාව

මෙම turnip දී අපි GitlabCI හරහා Kubernetes වෙත යොදවන්නෙමු, .gitlab-ci.yml මේ වගේ:

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

එය ඔබම ක්‍රියාත්මක කිරීමට ඔබට පොකුරක් අවශ්‍ය වනු ඇත, ඔබට Gcloud භාවිතා කළ හැකිය:

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

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

ඔබ ගෑරුප්පු කිරීමට අවශ්යයි https://gitlab.com/wuestkamp/k8s-deployment-example-canary-infrastructure සහ විචල්‍යයක් සාදන්න KUBECONFIG GitlabCI හි, ප්‍රවේශය සඳහා වින්‍යාසය අඩංගු වේ kubectl ඔබේ පොකුරට.

පොකුරක් (Gcloud) සඳහා අක්තපත්‍ර ලබා ගන්නේ කෙසේද යන්න ගැන ඔබට කියවිය හැකිය මෙතන.

යටිතල පහසුකම් Yaml

යටිතල පහසුකම් ගබඩාවේ අපට සේවාව ඇත:

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

සහ යෙදවීම 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

සහ තවත් යෙදවීමක් 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

app-deploy හි තවමත් නිර්වචනය කර ඇති අනුරූ කිසිවක් නොමැති බව සලකන්න.

මූලික යෙදවීම සිදු කිරීම

මූලික යෙදවීම ආරම්භ කිරීම සඳහා, ඔබට ප්‍රධාන ශාඛාව මත GitlabCI නල මාර්ගය අතින් ආරම්භ කළ හැක. එයට පසු kubectl පහත සඳහන් දේ ප්‍රතිදානය කළ යුතුය:

Kubernetes #1 හි කැනරි යෙදවීම: Gitlab CI

අපි දකිනවා app අනුරූ 10 ක් සහ යෙදුම්-කැනරි 0 සමඟ යෙදවීම. අපට ප්‍රවේශ විය හැකි LoadBalancer එකක් ද ඇත. curl බාහිර IP හරහා:

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

Kubernetes #1 හි කැනරි යෙදවීම: Gitlab CI

අපගේ පරීක්ෂණ යෙදුම "v1" පමණක් ලබා දෙන බව අපට පෙනේ.

කැනරි යෙදවීම ක්‍රියාත්මක කිරීම

පියවර 1: සමහර පරිශීලකයින් සඳහා නව අනුවාදයක් නිකුත් කරන්න

අපි deploy-canary.yaml ගොනුවේ සහ නව අනුවාද රූපයේ අනුරූ ගණන 1 ට සකසමු:

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

ගොනුවේ deploy.yaml අපි අනුරූ ගණන 9 ට වෙනස් කළෙමු:

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

අපි මෙම වෙනස්කම් යෙදවීම ආරම්භ වන (GitlabCI හරහා) ගබඩාවට තල්ලු කර එහි ප්‍රතිඵලයක් ලෙස බලන්න:

Kubernetes #1 හි කැනරි යෙදවීම: Gitlab CI

යෙදුම් තේරීම දෙකටම ඇති බැවින් අපගේ සේවාව යෙදවීම් දෙකටම යොමු කරනු ඇත. Kubernetes හි පෙරනිමි සසම්භාවීකරණය හේතුවෙන්, අපි ඉල්ලීම් වලින් ~10% සඳහා විවිධ ප්‍රතිචාර දැකිය යුතුය:

Kubernetes #1 හි කැනරි යෙදවීම: Gitlab CI

අපගේ යෙදුමේ වත්මන් තත්ත්වය (GitOps, Git වෙතින් සත්‍යයේ තනි මූලාශ්‍රයක් ලෙස ලබාගෙන ඇත) යනු එක් එක් අනුවාදය සඳහා එක බැගින් ක්‍රියාකාරී අනුරූ සහිත යෙදවුම් දෙකක් තිබීමයි.

පරිශීලකයින්ගෙන් ~10% නව අනුවාදයක් සමඟ හුරුපුරුදු වන අතර නොදැනුවත්වම එය පරීක්ෂා කරයි. ලඝු-සටහන් වල දෝෂ සහ ගැටළු සොයා ගැනීමට දත්ත අධීක්ෂණ කිරීමට දැන් කාලයයි.

පියවර 2: සියලුම පරිශීලකයින්ට නව අනුවාදය නිකුත් කරන්න

සෑම දෙයක්ම හොඳින් සිදු වූ බව අපි තීරණය කළ අතර දැන් අපි සියලු පරිශීලකයින්ට නව අනුවාදය ලබා දිය යුතුය. මෙය සිදු කිරීම සඳහා අපි සරලව යාවත්කාලීන කරන්නෙමු deploy.yaml රූපයේ නව අනුවාදයක් ස්ථාපනය කිරීම සහ 10 ට සමාන අනුරූ ගණන deploy-canary.yaml අපි අනුරූ ගණන නැවත 0 ලෙස සකසමු. යෙදවීමෙන් පසු, ප්‍රතිඵලය පහත පරිදි වේ:

Kubernetes #1 හි කැනරි යෙදවීම: Gitlab CI

සාරාංශ කිරීමට

මට නම්, මේ ආකාරයෙන් යෙදවීම අතින් ධාවනය කිරීම k8s භාවිතයෙන් එය කෙතරම් පහසුවෙන් වින්‍යාස කළ හැකිද යන්න තේරුම් ගැනීමට උපකාරී වේ. Kubernetes ඔබට API හරහා සියල්ල යාවත්කාලීන කිරීමට ඉඩ දෙන බැවින්, මෙම පියවරයන් ස්ක්‍රිප්ට් හරහා ස්වයංක්‍රීය කළ හැක.

ක්‍රියාත්මක කළ යුතු තවත් දෙයක් නම් නව අනුවාදයට පමණක් ප්‍රවේශ විය හැකි පරීක්ෂක පිවිසුම් ලක්ෂ්‍යයක් (LoadBalancer හෝ Ingress හරහා) ය. එය අතින් පිරික්සීම සඳහා භාවිතා කළ හැක.

ඉදිරි ලිපිවලදී, අප කළ බොහෝ දේ ක්‍රියාත්මක කරන වෙනත් ස්වයංක්‍රීය විසඳුම් අපි පරීක්ෂා කරන්නෙමු.

අපගේ බ්ලොග් අඩවියේ වෙනත් ලිපිද කියවන්න:

මූලාශ්රය: www.habr.com

අදහස් එක් කරන්න