اسان ڪبرنيٽس تائين ڪينري ڊيپلائيمينٽ کي هلائڻ لاءِ k8s-native Argo Rollouts deployment ڪنٽرولر ۽ GitlabCI استعمال ڪنداسين.
هن سلسلي ۾ آرٽيڪل
ڪبرنيٽس #1 ۾ ڪينري جي تعیناتي: Gitlab CI - (هي مضمون)
- Istio استعمال ڪندي ڪينري جي جوڙجڪ
- جينڪنز-ايڪس اسٽيو فليگر استعمال ڪندي ڪينري جي جوڙجڪ
ڪينري لڳائڻ
اسان کي اميد آهي ته توهان پڙهيو
آرگو رول آئوٽ
Argo Rollouts هڪ Kubernetes ڏيهي مقرري ڪنٽرولر آهي. اهو مهيا ڪري ٿو CRD (ڪسٽم ريسورس ڊيفينيشن) Kubernetes لاءِ. ان جي مهرباني، اسان هڪ نئون ادارو استعمال ڪري سگهون ٿا: Rollout
، جيڪو مختلف ترتيبن جي اختيارن سان نيري-سائي ۽ ڪينري جي ترتيبن کي منظم ڪري ٿو.
Argo Rollouts ڪنٽرولر استعمال ٿيل ڪسٽم وسيلن طرفان
Rollout,
اضافي ترتيب ڏيڻ واري حڪمت عملي جي اجازت ڏئي ٿي جهڙوڪ نيرو-سائي ۽ ڪنري ڪبرنيٽس لاءِ. وسيلوRollout
ڪارڪردگي جي برابر مهيا ڪري ٿيDeployment
، صرف اضافي لڳائڻ واري حڪمت عملي سان.
وسيلن جيDeployments
تعیناتي لاءِ ٻه حڪمت عمليون آهن:RollingUpdate
иRecreate
. جيتوڻيڪ اهي حڪمت عمليون اڪثر ڪيسن لاءِ موزون آهن، تمام وڏي پيماني تي سرورز تي لڳائڻ لاءِ، اضافي حڪمت عمليون استعمال ڪيون وينديون آهن، جهڙوڪ نيرو-سائي يا ڪينري، جيڪي ڊيپلائيمينٽ ڪنٽرولر ۾ موجود نه هونديون آهن. ڪبرنيٽس ۾ انهن حڪمت عملين کي استعمال ڪرڻ لاءِ، صارفين کي انهن جي ڊيپلائيمينٽس جي مٿان اسڪرپٽ لکڻو پوندو هو. Argo Rollouts Controller انهن حڪمت عملين کي ظاهر ڪري ٿو سادو، بيان ڪندڙ، ترتيب ڏيڻ وارو پيٽرول.
https://argoproj.github.io/argo-rollouts
هتي پڻ آهي Argo CI، جيڪو رول آئوٽ سان استعمال ڪرڻ لاءِ هڪ آسان ويب انٽرفيس مهيا ڪري ٿو، اسان ان تي هڪ نظر وجهنداسين ايندڙ مضمون ۾.
آرگو رول آئوٽ کي انسٽال ڪرڻ
سرور طرف
kubectl create namespace argo-rolloutskubectl apply -n argo-rollouts -f https://raw.githubusercontent.com/argoproj/argo-rollouts/stable/manifests/install.yaml
اسان جي انفراسٽرڪچر ٽرنپ ۾ (هيٺ ڏسو) اسان اڳ ۾ ئي شامل ڪيو آهي install.yaml جيئن i/k8s/argo-rollouts/install.yaml. هن طريقي سان GitlabCI ان کي ڪلستر ۾ انسٽال ڪندو.
ڪلائنٽ سائڊ (kubectl پلگ ان)
مثال جي درخواست
اهو سٺو عمل آهي ته ايپليڪيشن ڪوڊ ۽ انفراسٽرڪچر لاءِ الڳ مخزن.
اپليڪيشن لاء مخزن
Kim Wuestkamp/k8s-deployment-example-app
هي هڪ تمام سادو Python+Flask API آهي جيڪو JSON طور جواب ڏئي ٿو. اسان GitlabCI استعمال ڪندي پيڪيج ٺاهينداسين ۽ نتيجو کي Gitlab رجسٽري ڏانهن ڌڪينداسين. رجسٽري ۾ اسان وٽ ٻه مختلف رليز ورجن آهن:
- 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
توهان کي ڇڪڻ جي ضرورت آهي KUBECONFIG
GitlabCI ۾، جنهن ۾ رسائي لاء ترتيب شامل هوندي kubectl
توهان جي ڪلستر ڏانهن.
انفراسٽرڪچر 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
ساڳيء طرح ڪم ڪري ٿو Deployment. جيڪڏهن اسان هڪ تازه ڪاري حڪمت عملي مقرر نه ڪندا آهيون (جهڙوڪ هتي ڪينري) اهو ڊفالٽ رولنگ-اپڊيٽ ڊيپلائيمينٽ وانگر عمل ڪندو.
اسان ڪينري جي تعیناتي لاءِ يامل ۾ ٻه قدم بيان ڪريون ٿا:
- 10٪ ٽريفڪ ڪينري ڏانهن (دستي ٺيڪ لاءِ انتظار ڪريو)
- 50% ٽريفڪ ڪينري ڏانهن (ترسو 2 منٽ پوءِ جاري رکو 100%)
انجام ڏيڻ جي شروعاتي ڪم
ابتدائي ترتيب ڏيڻ کان پوء، اسان جا وسيلا هن طرح نظر ايندا:
۽ اسان کي صرف ايپليڪيشن جي پهرين ورزن مان جواب ملي ٿو:
ڪينري جي جوڙجڪ کي انجام ڏيڻ
قدم 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 ترتيب ڏئي ٿو ۽ اسان تبديلين کي ڏسون ٿا:
هاڻي جيڪڏهن اسان خدمت تائين رسائي ڪريون ٿا:
زبردست! اسان پنهنجي ڪينري جي تعیناتي جي وچ ۾ آهيون. اسان ڊوڙندي ترقي ڏسي سگھون ٿا:
kubectl argo rollouts get rollout rollout-canary
قدم 2: 50٪ ٽرئفڪ:
ھاڻي اچو ته ايندڙ قدم ڏانھن وڃو: ٽريفڪ جو 50٪ ريڊائريڪٽ ڪرڻ. اسان هن قدم کي دستي طور تي هلائڻ لاءِ ترتيب ڏنو:
kubectl argo rollouts promote rollout-canary # continue to step 2
۽ اسان جي ايپليڪيشن 50 سيڪڙو جوابن جي نئين ورزن مان موٽائي:
۽ رول آئوٽ جائزو:
عجيب.
قدم 3: 100٪ ٽرئفڪ:
اسان ان کي سيٽ ڪيو ته 2 منٽن کان پوء 50٪ قدم خودڪار طريقي سان ختم ٿئي ٿو ۽ 100٪ قدم شروع ٿئي ٿو:
۽ ايپليڪيشن جي پيداوار:
۽ رول آئوٽ جائزو:
ڪينري جي تعیناتي مڪمل آهي.
Argo Rollouts سان وڌيڪ مثال
هتي وڌيڪ مثال آهن، جيئن ته ماحوليات جا ڏيکاءُ ڪيئن ترتيب ڏنا وڃن ۽ ڪينري جي بنياد تي موازنہ:
Argo Rollouts ۽ Argo CI بابت وڊيو
مان واقعي هن وڊيو جي سفارش ڪريان ٿو، اهو ڏيکاري ٿو ته ڪيئن Argo Rollouts ۽ Argo CI گڏجي ڪم ڪن ٿا:
نتيجو
مان واقعي CRDs استعمال ڪرڻ جو خيال پسند ڪريان ٿو جيڪي اضافي قسمن جي ٺاھ جوڙ کي منظم ڪن ٿا يا ريپليڪيٽس، ريڊائريڪ ٽريفڪ وغيره. انهن سان گڏ ڪم آساني سان ٿي وڃي ٿو. اڳيون آئون Argo CI سان انضمام کي جانچڻ چاهيندس.
بهرحال، اتي آرگو CI ۽ Flux CI جو هڪ وڏو ضمير اچي رهيو آهي، تنهنڪري مان شايد انتظار ڪريان جيستائين نئين رليز نه اچي:
ڇا توھان وٽ ڪو تجربو آھي Argo Rollouts يا Argo CI سان؟
اسان جي بلاگ تي ٻيا مضمون پڻ پڙهو:
نينگنڪس ويب سرور سان بهار جي ايپليڪيشنن جي بليو گرين ڊيپلائيشن Kubernetes: سسٽم وسيلن جي انتظام کي ترتيب ڏيڻ لاء اهو ضروري ڇو آهي؟ Hashicorp Consul's Kubernetes Authorization جو تعارف ٽيڪٽن پائپ لائن - ڪبرنيٽس-آبائي پائپ لائنون Nginx لاءِ متحرڪ ماڊلز جي تعمير ريڊ مائن لاءِ ٽيليگرام بوٽ. پنهنجي ۽ ٻين لاءِ زندگي ڪيئن آسان ڪجي
جو ذريعو: www.habr.com