موږ به د k8s - اصلي ارګو رول آوټ ګمارنې کنټرولر او GitlabCI وکاروو ترڅو کوبرنیټس ته د کانري ګمارنې چلولو لپاره
په دې لړ کې مقالې
په کبرنیټس #1 کې د کانري ګمارنه: ګیټلاب CI - (دا مقاله)
- د اسټیو په کارولو سره د کانري ګمارل
- د جینکنز - ایکس اسټیو فلیګر په کارولو سره د کانري ګمارل
د کانري ګمارل
موږ هیله لرو چې تاسو یې ولولئ
د ارګو رولونه
ارګو رولاټس د کوبرنیټس اصلي ځای پرځای کولو کنټرولر دی. دا د Kubernetes لپاره CRD (د ګمرک سرچینې تعریف) چمتو کوي. د دې څخه مننه، موږ کولی شو یو نوی اداره وکاروو: Rollout
، کوم چې د مختلف ترتیب کولو اختیارونو سره نیلي - شنه او کانري ګمارنې اداره کوي.
د ارګو رول آوټ کنټرولر د دودیز سرچینې لخوا کارول کیږي
Rollout,
د اضافي ګمارنې ستراتیژیو ته اجازه ورکوي لکه نیلي شنه او کینري د Kubernetes لپاره. سرچینهRollout
فعالیت برابرويDeployment
، یوازې د اضافي ګمارنې ستراتیژیو سره.
د منابعو دDeployments
د ګمارنې لپاره دوه ستراتیژۍ لري:RollingUpdate
иRecreate
. که څه هم دا ستراتیژۍ د ډیری قضیو لپاره مناسب دي، په لویه پیمانه سرورونو ته د ګمارلو لپاره، اضافي ستراتیژۍ کارول کیږي، لکه نیلي شنه یا کانري، کوم چې د ډیپلومینټ کنټرولر کې شتون نلري. په Kubernetes کې د دې ستراتیژیو کارولو لپاره، کاروونکي باید د دوی د ځای پرځای کولو په سر کې سکریپټونه ولیکي. د ارګو رول آوټ کنټرولر دا ستراتیژیانې د ساده، اعلاناتي، ترتیب وړ پیرامیټونو په توګه افشا کوي.
https://argoproj.github.io/argo-rollouts
دلته د ارګو CI هم شتون لري ، کوم چې د رول آوټ سره کارولو لپاره یو مناسب ویب انٹرفیس چمتو کوي ، موږ به په راتلونکي مقاله کې ورته نظر واچوو.
د ارګو رول آوټ نصب کول
د سرور اړخ
kubectl create namespace argo-rolloutskubectl apply -n argo-rollouts -f https://raw.githubusercontent.com/argoproj/argo-rollouts/stable/manifests/install.yaml
زموږ په زیربناوو شلم کې (لاندې وګورئ) موږ دمخه د i/k8s/argo-rollouts/install.yaml په توګه install.yaml اضافه کړی دی. پدې توګه GitlabCI به دا په کلستر کې نصب کړي.
د پیرودونکي اړخ (کیوبیکیل پلگ ان)
د غوښتنلیک بیلګه
دا ښه عمل دی چې د غوښتنلیک کوډ او زیربنا لپاره جلا ذخیره ولرئ.
د غوښتنلیک لپاره ذخیره
Kim Wuestkamp/k8s-deployment-example-app
دا یو خورا ساده Python + Flask API دی چې د JSON په توګه ځواب بیرته راګرځوي. موږ به د GitlabCI په کارولو سره بسته جوړه کړو او پایله به د ګیټلاب راجسټری ته واړوو. په راجسټری کې موږ دوه مختلف خوشې نسخې لرو:
- wuestkamp/k8s-deployment-example-app:v1
- wuestkamp/k8s-deployment-example-app:v2
د دوی ترمنځ یوازینی توپیر د JSON فایل بیرته راستانه شوی. موږ دا اپلیکیشن د امکان تر حده په اسانۍ سره لیدو لپاره کاروو چې کومه نسخه موږ ورسره اړیکه ونیسو.
د زیربنا ذخیره
پدې ذخیره کې به موږ ګیټلاب سی آی کوبرنیټس ته د ځای په ځای کولو لپاره وکاروو ، 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
ستاسو کلستر ته.
زیربنا یامل
د زیربناوو ذخیره کې دننه موږ خدمت لرو:
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
د ځای پرځای کولو په څیر کار کوي. که موږ د تازه کولو ستراتیژي جوړه نه کړو (لکه کینري دلته) دا به د ډیفالټ رولینګ اپډیټ پلي کولو په څیر چلند وکړي.
موږ د کانري ګمارنې لپاره په یامل کې دوه مرحلې تعریف کوو:
- کانري ته د ټرافیک 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
...
او موږ بدلونونه فشار راوړو، نو د ګیټلاب 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٪ مرحله پیل شي:
او د غوښتنلیک محصول:
او د رول آوټ بیاکتنه:
د کانري ګمارل بشپړ شوي دي.
د ارګو رول آوټ سره نور مثالونه
دلته ډیر مثالونه شتون لري، لکه څنګه چې د چاپیریال مخکتنې تنظیم کول او د کانري پراساس پرتله کول:
د ارګو رول اوټس او ارګو CI په اړه ویډیو
زه واقعیا دا ویډیو وړاندیز کوم ، دا ښیې چې څنګه د ارګو رول اوټس او ارګو CI یوځای کار کوي:
نتیجه
زه واقعیا د CRDs کارولو مفکوره خوښوم چې د اضافي ډولونو ګمارلو یا نقلونو رامینځته کولو اداره کوي ، ټرافيکي لارښود کوي ، او داسې نور. د دوی سره کار په اسانۍ سره پرمخ ځي. بل زه غواړم د ارګو CI سره ادغام ازموینه وکړم.
په هرصورت ، داسې بریښي چې د ارګو CI او فلکس CI لوی ادغام راځي ، نو زه ممکن انتظار وکړم تر هغه چې نوې خوشې شي:
ایا تاسو د ارګو رول آؤټس یا ارګو CI سره کومه تجربه لرئ؟
زموږ په بلاګ کې نورې مقالې هم ولولئ:
د نګینکس ویب سرور سره د پسرلي غوښتنلیکونو نیلي شنه ځای په ځای کول Kubernetes: ولې د سیسټم سرچینې مدیریت تنظیم کول خورا مهم دي؟ د هاشیکورپ قونسل د کوبرنیټس واک پیژندنه د ټیکټن پایپ لاین - کوبرنیټس - اصلي پایپ لاین د Nginx لپاره د متحرک ماډلونو جوړول د ریډمین لپاره د ټیلیګرام بوټ. څنګه د ځان او نورو لپاره ژوند ساده کړئ
سرچینه: www.habr.com