குபெர்னெட்டஸில் கேனரி வரிசைப்படுத்தல் #1: கிட்லாப் சிஐ

குபெர்னெட்ஸில் கேனரி வரிசைப்படுத்தலை செயல்படுத்தவும் பயன்படுத்தவும் கிட்லாப் சிஐ மற்றும் கையேடு கிட்ஆப்ஸைப் பயன்படுத்துவோம்.

குபெர்னெட்டஸில் கேனரி வரிசைப்படுத்தல் #1: கிட்லாப் சிஐ

இந்தத் தொடரின் கட்டுரைகள்:

கேனரி வரிசைப்படுத்தலை GitOps வழியாக கைமுறையாகச் செய்வோம் மற்றும் முக்கிய குபெர்னெட்ஸ் ஆதாரங்களை உருவாக்குவோம்/மாற்றுவோம். இந்த கட்டுரை முதன்மையாக அறிமுகத்திற்காக வடிவமைக்கப்பட்டுள்ளது குபெர்னெட்டஸ் கேனரியில் வரிசைப்படுத்தல் எவ்வாறு செயல்படுகிறது, ஏனெனில் ஆட்டோமேஷன் மிகவும் பயனுள்ள முறைகள் உள்ளன, அதை நாங்கள் பின்வரும் கட்டுரைகளில் கருத்தில் கொள்வோம்.


குபெர்னெட்டஸில் கேனரி வரிசைப்படுத்தல் #1: கிட்லாப் சிஐ

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

கேனரி வரிசைப்படுத்தல்

При Canary-стратегии обновления сначала применяются только для части пользователей. Через мониторинг, данные с логов, ручное тестирование или другие каналы обратной связи релиз тестируется перед его применением для всех пользователей.

குபெர்னெட்ஸ் வரிசைப்படுத்தல் (ரோலிங் புதுப்பிப்பு)

Kubernetes Deploymentக்கான இயல்புநிலை உத்தியானது ரோலிங்-அப்டேட் ஆகும், இதில் குறிப்பிட்ட எண்ணிக்கையிலான காய்கள் படங்களின் புதிய பதிப்புகளுடன் தொடங்கப்படுகின்றன. அவை சிக்கல்கள் இல்லாமல் உருவாக்கப்பட்டிருந்தால், படங்களின் பழைய பதிப்புகளைக் கொண்ட காய்கள் நிறுத்தப்படும், மேலும் புதிய காய்கள் இணையாக உருவாக்கப்படும்.

GitOps

இந்த எடுத்துக்காட்டில் நாங்கள் GitOps ஐப் பயன்படுத்துகிறோம், ஏனெனில் நாங்கள்:

  • உண்மையின் ஒற்றை ஆதாரமாக Git ஐப் பயன்படுத்துகிறது
  • உருவாக்க மற்றும் வரிசைப்படுத்துவதற்கு Git செயல்பாடுகளைப் பயன்படுத்துகிறோம் (git tag/merge தவிர வேறு கட்டளைகள் தேவையில்லை)

உதாரணமாக

ஒரு நல்ல நடைமுறையை எடுத்துக் கொள்வோம் - பயன்பாட்டுக் குறியீட்டிற்கு ஒரு களஞ்சியமும், உள்கட்டமைப்பிற்கு ஒன்றும்.

விண்ணப்ப களஞ்சியம்

இது மிகவும் எளிமையான Python+Flask API ஆகும், இது JSON என பதிலை வழங்கும். நாங்கள் கிட்லாப்சிஐ வழியாக தொகுப்பை உருவாக்கி, முடிவை கிட்லாப் பதிவேட்டில் தள்ளுவோம். பதிவேட்டில் எங்களிடம் இரண்டு வெவ்வேறு வெளியீட்டு பதிப்புகள் உள்ளன:

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

அவற்றுக்கிடையே உள்ள ஒரே வித்தியாசம் திரும்பிய JSON கோப்பில் மாற்றம் மட்டுமே. நாங்கள் எந்த பதிப்பில் தொடர்பு கொள்கிறோம் என்பதை முடிந்தவரை எளிதாகக் காட்சிப்படுத்த இந்தப் பயன்பாட்டைப் பயன்படுத்துகிறோம்.

உள்கட்டமைப்பு களஞ்சியம்

இந்த டர்னிப்பில் நாங்கள் கிட்லாப்சிஐ வழியாக குபெர்னெட்டஸுக்கு அனுப்புவோம், .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 இல் இதுவரை எந்த பிரதிகளும் வரையறுக்கப்படவில்லை என்பதை நினைவில் கொள்ளவும்.

ஆரம்ப வரிசைப்படுத்தலைச் செய்கிறது

ஆரம்ப வரிசைப்படுத்தலைத் தொடங்க, மாஸ்டர் கிளையில் கைமுறையாக கிட்லாப்சிஐ பைப்லைனைத் தொடங்கலாம். அதற்கு பிறகு kubectl பின்வருவனவற்றை வெளியிட வேண்டும்:

குபெர்னெட்டஸில் கேனரி வரிசைப்படுத்தல் #1: கிட்லாப் சிஐ

நாங்கள் பார்க்கிறோம் app 10 பிரதிகளுடன் வரிசைப்படுத்தல் மற்றும் 0 உடன் ஆப்-கேனரி. ஒரு LoadBalancer உள்ளது, அதன் மூலம் நாம் அணுகலாம். curl வெளிப்புற ஐபி வழியாக:

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

குபெர்னெட்டஸில் கேனரி வரிசைப்படுத்தல் #1: கிட்லாப் சிஐ

எங்கள் சோதனைப் பயன்பாடு "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
...

இந்த மாற்றங்களை வரிசைப்படுத்தல் தொடங்கும் (கிட்லாப்சிஐ வழியாக) களஞ்சியத்திற்குத் தள்ளுகிறோம், அதன் விளைவாகப் பார்க்கிறோம்:

குபெர்னெட்டஸில் கேனரி வரிசைப்படுத்தல் #1: கிட்லாப் சிஐ

எங்கள் சேவை இரண்டு வரிசைப்படுத்தல்களையும் சுட்டிக்காட்டும், ஏனெனில் இரண்டிலும் ஆப்ஸ் தேர்வி உள்ளது. Kubernetes இன் இயல்புநிலை சீரற்றமயமாக்கல் காரணமாக, ~10% கோரிக்கைகளுக்கு வெவ்வேறு பதில்களைப் பார்க்க வேண்டும்:

குபெர்னெட்டஸில் கேனரி வரிசைப்படுத்தல் #1: கிட்லாப் சிஐ

எங்கள் பயன்பாட்டின் தற்போதைய நிலை (GitOps, Git இலிருந்து ஒரு உண்மை ஆதாரமாக எடுக்கப்பட்டது) செயலில் உள்ள பிரதிகளுடன் இரண்டு வரிசைப்படுத்தல்கள் உள்ளன, ஒவ்வொரு பதிப்பிற்கும் ஒன்று.

~10% பயனர்கள் புதிய பதிப்பைப் பற்றி நன்கு அறிந்திருக்கிறார்கள் மற்றும் தற்செயலாக அதைச் சோதிக்கிறார்கள். பதிவுகளில் உள்ள பிழைகளைச் சரிபார்த்து, சிக்கல்களைக் கண்டறியத் தரவைக் கண்காணிக்க வேண்டிய நேரம் இது.

படி 2: அனைத்து பயனர்களுக்கும் புதிய பதிப்பை வெளியிடவும்

எல்லாம் சரியாக நடந்ததாக நாங்கள் முடிவு செய்தோம், இப்போது புதிய பதிப்பை அனைத்து பயனர்களுக்கும் வழங்க வேண்டும். இதைச் செய்ய, நாங்கள் புதுப்பிக்கிறோம் deploy.yaml படத்தின் புதிய பதிப்பை நிறுவுதல் மற்றும் 10க்கு சமமான பிரதிகளின் எண்ணிக்கை deploy-canary.yaml பிரதிகளின் எண்ணிக்கையை மீண்டும் 0 என அமைக்கிறோம். வரிசைப்படுத்திய பிறகு, முடிவு பின்வருமாறு இருக்கும்:

குபெர்னெட்டஸில் கேனரி வரிசைப்படுத்தல் #1: கிட்லாப் சிஐ

சுருக்கமாக

என்னைப் பொறுத்தவரை, வரிசைப்படுத்தலை கைமுறையாக இயக்குவது k8s ஐப் பயன்படுத்தி எவ்வளவு எளிதாக கட்டமைக்க முடியும் என்பதைப் புரிந்துகொள்ள உதவுகிறது. API மூலம் அனைத்தையும் புதுப்பிக்க Kubernetes உங்களை அனுமதிப்பதால், இந்த படிகளை ஸ்கிரிப்ட்கள் மூலம் தானியக்கமாக்க முடியும்.

செயல்படுத்தப்பட வேண்டிய மற்றொரு விஷயம், ஒரு சோதனையாளர் நுழைவுப் புள்ளி (லோட் பேலன்சர் அல்லது நுழைவு வழியாக) இதன் மூலம் புதிய பதிப்பை மட்டுமே அணுக முடியும். கைமுறையாக உலாவுவதற்கு இதைப் பயன்படுத்தலாம்.

எதிர்கால கட்டுரைகளில், நாங்கள் செய்த பெரும்பாலானவற்றைச் செயல்படுத்தும் பிற தானியங்கு தீர்வுகளைப் பார்ப்போம்.

எங்கள் வலைப்பதிவில் உள்ள மற்ற கட்டுரைகளையும் படிக்கவும்:

ஆதாரம்: www.habr.com

கருத்தைச் சேர்