குபெர்னெட்டஸில் கேனரி வரிசைப்படுத்தல் #2: ஆர்கோ ரோல்அவுட்கள்

K8s-நேட்டிவ் Argo Rollouts deployment controller மற்றும் GitlabCIஐ பயன்படுத்தி கேனரி வரிசைப்படுத்தல்களை Kubernetes க்கு இயக்குவோம்

குபெர்னெட்டஸில் கேனரி வரிசைப்படுத்தல் #2: ஆர்கோ ரோல்அவுட்கள்

https://unsplash.com/photos/V41PulGL1z0

இந்தத் தொடரில் உள்ள கட்டுரைகள்

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

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

ஆர்கோ ரோல்அவுட்கள்

ஆர்கோ ரோல்அவுட்ஸ் என்பது குபெர்னெட்டஸின் சொந்த வரிசைப்படுத்தல் கட்டுப்படுத்தி ஆகும். இது குபெர்னெட்டஸுக்கு CRD (தனிப்பயன் வள வரையறை) வழங்குகிறது. அதற்கு நன்றி, நாம் ஒரு புதிய பொருளைப் பயன்படுத்தலாம்: Rollout, இது பல்வேறு கட்டமைப்பு விருப்பங்களுடன் நீல-பச்சை மற்றும் கேனரி வரிசைப்படுத்தல்களை நிர்வகிக்கிறது.

தனிப்பயன் ஆதாரத்தால் பயன்படுத்தப்படும் ஆர்கோ ரோல்அவுட்ஸ் கட்டுப்படுத்தி Rollout, குபெர்னெட்டஸுக்கு நீல-பச்சை மற்றும் கேனரி போன்ற கூடுதல் வரிசைப்படுத்தல் உத்திகளை அனுமதிக்கிறது. வளம் Rollout சமமான செயல்பாட்டை வழங்குகிறது Deployment, கூடுதல் வரிசைப்படுத்தல் உத்திகளுடன் மட்டுமே.
வள Deployments வரிசைப்படுத்துவதற்கு இரண்டு உத்திகள் உள்ளன: RollingUpdate и Recreate. இந்த உத்திகள் பெரும்பாலான சந்தர்ப்பங்களில் பொருத்தமானதாக இருந்தாலும், மிகப் பெரிய அளவில் சேவையகங்களுக்குப் பயன்படுத்துவதற்கு, ப்ளு-கிரீன் அல்லது கேனரி போன்ற கூடுதல் உத்திகள் பயன்படுத்தப்படுகின்றன, அவை வரிசைப்படுத்தல் கட்டுப்படுத்தியில் இல்லை. இந்த உத்திகளை Kubernetes இல் பயன்படுத்த, பயனர்கள் தங்கள் வரிசைப்படுத்தல்களுக்கு மேல் ஸ்கிரிப்ட்களை எழுத வேண்டும். Argo Rollouts Controller இந்த உத்திகளை எளிமையான, அறிவிக்கும், கட்டமைக்கக்கூடிய அளவுருக்களாக வெளிப்படுத்துகிறது.
https://argoproj.github.io/argo-rollouts

ஆர்கோ சிஐயும் உள்ளது, இது ரோல்அவுட்களுடன் பயன்படுத்த வசதியான வலை இடைமுகத்தை வழங்குகிறது, அதை அடுத்த கட்டுரையில் பார்ப்போம்.

ஆர்கோ ரோல்அவுட்களை நிறுவுகிறது

சர்வர் பக்கம்

kubectl create namespace argo-rolloutskubectl apply -n argo-rollouts -f https://raw.githubusercontent.com/argoproj/argo-rollouts/stable/manifests/install.yaml

எங்கள் உள்கட்டமைப்பு டர்னிப்பில் (கீழே காண்க) ஏற்கனவே install.yaml ஐ/k8s/argo-rollouts/install.yaml என சேர்த்துள்ளோம். இந்த வழியில் GitlabCI அதை கிளஸ்டரில் நிறுவும்.

கிளையண்ட் பக்கம் (kubectl செருகுநிரல்)

https://argoproj.github.io/argo-rollouts/features/kubectl-plugin

எடுத்துக்காட்டு பயன்பாடு

பயன்பாட்டுக் குறியீடு மற்றும் உள்கட்டமைப்புக்கான தனித்தனி களஞ்சியங்களை வைத்திருப்பது நல்ல நடைமுறை.

விண்ணப்பத்திற்கான களஞ்சியம்

Kim Wuestkamp/k8s-deployment-example-app

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

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

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

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

இந்தக் களஞ்சியத்தில், குபெர்னெட்டஸுக்குப் பயன்படுத்த GitlabCIஐப் பயன்படுத்துவோம், .gitlab-ci.yml இது போல் தெரிகிறது:

image: traherom/kustomize-dockerbefore_script:
   - printenv
   - kubectl versionstages:
 - deploydeploy 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: rollout-canary
 name: app
spec:
 ports:
 - port: 80
   protocol: TCP
   targetPort: 5000
 selector:
   id: app
 type: LoadBalancer

மற்றும் rollout.yaml:

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
 name: rollout-canary
spec:
 replicas: 10
 revisionHistoryLimit: 2
 selector:
   matchLabels:
     id: rollout-canary
 template:
   metadata:
     labels:
       id: rollout-canary
   spec:
     containers:
     - name: rollouts-demo
       image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v1
       imagePullPolicy: Always
 strategy:
   canary:
     steps:
     - setWeight: 10
     # Rollouts can be manually resumed by running `kubectl argo rollouts promote ROLLOUT`
     - pause: {}
     - setWeight: 50
     - pause: { duration: 120 } # two minutes

Rollout வரிசைப்படுத்தல் போலவே செயல்படுகிறது. நாம் ஒரு புதுப்பிப்பு உத்தியை அமைக்கவில்லை என்றால் (இங்கே கேனரி போன்றது) அது இயல்புநிலை ரோலிங்-அப்டேட் வரிசைப்படுத்தல் போல் செயல்படும்.

கேனரி வரிசைப்படுத்தலுக்கு yaml இல் இரண்டு படிகளை நாங்கள் வரையறுக்கிறோம்:

  1. கேனரிக்கு 10% ட்ராஃபிக் (கைமுறை சரிக்காக காத்திருங்கள்)
  2. கேனரிக்கு 50% போக்குவரத்து (2 நிமிடங்கள் காத்திருந்து 100% தொடரவும்)

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

ஆரம்ப வரிசைப்படுத்தலுக்குப் பிறகு, எங்கள் ஆதாரங்கள் இப்படி இருக்கும்:

குபெர்னெட்டஸில் கேனரி வரிசைப்படுத்தல் #2: ஆர்கோ ரோல்அவுட்கள்

பயன்பாட்டின் முதல் பதிப்பிலிருந்து மட்டுமே நாங்கள் பதிலைப் பெறுகிறோம்:

குபெர்னெட்டஸில் கேனரி வரிசைப்படுத்தல் #2: ஆர்கோ ரோல்அவுட்கள்

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

படி 1: 10% போக்குவரத்து

கேனரி வரிசைப்படுத்தலைத் தொடங்க, நாம் வழக்கமாகப் பயன்படுத்துவதைப் போலவே படப் பதிப்பையும் மாற்ற வேண்டும்:

apiVersion: argoproj.io/v1alpha1
kind: Rollout
metadata:
 name: rollout-canary
spec:
...
 template:
   metadata:
     labels:
       id: rollout-canary
   spec:
     containers:
     - name: rollouts-demo
       image: registry.gitlab.com/wuestkamp/k8s-deployment-example-app:v2
...

நாங்கள் மாற்றங்களைத் தள்ளுகிறோம், எனவே Gitlab CI வரிசைப்படுத்துகிறது மற்றும் மாற்றங்களைக் காண்கிறோம்:

குபெர்னெட்டஸில் கேனரி வரிசைப்படுத்தல் #2: ஆர்கோ ரோல்அவுட்கள்

இப்போது நாம் சேவையை அணுகினால்:

குபெர்னெட்டஸில் கேனரி வரிசைப்படுத்தல் #2: ஆர்கோ ரோல்அவுட்கள்

நன்று! நாங்கள் எங்கள் கேனரி வரிசைப்படுத்தலின் நடுவில் இருக்கிறோம். இயக்குவதன் மூலம் முன்னேற்றத்தைக் காணலாம்:

kubectl argo rollouts get rollout rollout-canary

குபெர்னெட்டஸில் கேனரி வரிசைப்படுத்தல் #2: ஆர்கோ ரோல்அவுட்கள்

படி 2: 50% போக்குவரத்து:

இப்போது அடுத்த கட்டத்திற்கு செல்லலாம்: 50% போக்குவரத்தை திசைதிருப்புதல். இந்த படிநிலையை கைமுறையாக இயக்கும்படி நாங்கள் கட்டமைத்துள்ளோம்:

kubectl argo rollouts promote rollout-canary # continue to step 2

குபெர்னெட்டஸில் கேனரி வரிசைப்படுத்தல் #2: ஆர்கோ ரோல்அவுட்கள்

எங்கள் பயன்பாடு புதிய பதிப்புகளிலிருந்து 50% பதில்களை வழங்கியது:

குபெர்னெட்டஸில் கேனரி வரிசைப்படுத்தல் #2: ஆர்கோ ரோல்அவுட்கள்

மற்றும் வெளியீட்டு மதிப்பாய்வு:

குபெர்னெட்டஸில் கேனரி வரிசைப்படுத்தல் #2: ஆர்கோ ரோல்அவுட்கள்

ப்ரெக்ராஸ்னோ.

படி 3: 100% போக்குவரத்து:

2 நிமிடங்களுக்குப் பிறகு 50% படி தானாகவே முடிவடையும் மற்றும் 100% படி தொடங்கும் வகையில் நாங்கள் அதை அமைத்துள்ளோம்:

குபெர்னெட்டஸில் கேனரி வரிசைப்படுத்தல் #2: ஆர்கோ ரோல்அவுட்கள்

மற்றும் பயன்பாட்டு வெளியீடு:

குபெர்னெட்டஸில் கேனரி வரிசைப்படுத்தல் #2: ஆர்கோ ரோல்அவுட்கள்

மற்றும் வெளியீட்டு மதிப்பாய்வு:

குபெர்னெட்டஸில் கேனரி வரிசைப்படுத்தல் #2: ஆர்கோ ரோல்அவுட்கள்

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

ஆர்கோ ரோல்அவுட்களுடன் கூடுதல் எடுத்துக்காட்டுகள்

சூழல் மாதிரிக்காட்சிகள் மற்றும் கேனரி அடிப்படையில் ஒப்பீடுகளை எவ்வாறு அமைப்பது போன்ற பல எடுத்துக்காட்டுகள் இங்கே உள்ளன:

https://github.com/argoproj/argo-rollouts/tree/master/examples

Argo Rollouts மற்றும் Argo CI பற்றிய வீடியோ

இந்த வீடியோவை நான் மிகவும் பரிந்துரைக்கிறேன், Argo Rollouts மற்றும் Argo CI எவ்வாறு இணைந்து செயல்படுகின்றன என்பதை இது காட்டுகிறது:

இதன் விளைவாக

கூடுதல் வகையான வரிசைப்படுத்தல்கள் அல்லது பிரதிகள், வழிமாற்று போக்குவரத்து போன்றவற்றை உருவாக்குவதை நிர்வகிக்கும் சிஆர்டிகளைப் பயன்படுத்துவதற்கான யோசனை எனக்கு மிகவும் பிடிக்கும். அவர்களுடன் பணிபுரிவது சீராக நடக்கும். அடுத்து Argo CI உடனான ஒருங்கிணைப்பை சோதிக்க விரும்புகிறேன்.

இருப்பினும், Argo CI மற்றும் Flux CI ஆகியவற்றின் பெரிய இணைப்பு இருப்பதாகத் தோன்றுகிறது, எனவே புதிய வெளியீடு வெளிவரும் வரை நான் காத்திருக்கலாம்: ஆர்கோ ஃப்ளக்ஸ்.

Argo Rollouts அல்லது Argo CI இல் உங்களுக்கு ஏதேனும் அனுபவம் உள்ளதா?

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

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

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