موږ به ګیټلاب CI او لارښود GitOps په کبرنیټس کې د کانري ګمارنې پلي کولو او کارولو لپاره وکاروو
د دې لړۍ مقالې:
- (دا مقاله)
د ArgoCI په کارولو سره د کانري ګمارل - د اسټیو په کارولو سره د کانري ګمارل
- د جینکنز - ایکس اسټیو فلیګر په کارولو سره د کانري ګمارل
موږ به د کانري ګمارنه په لاسي ډول د GitOps له لارې ترسره کړو او د اصلي Kubernetes سرچینې رامینځته کول / تعدیل کوو. دا مقاله په اصل کې د پیژندنې لپاره ده په کوبرنیټس کانري کې د ګمارنې څرنګوالي سره ، ځکه چې د اتومات کولو خورا مؤثر میتودونه شتون لري ، کوم چې موږ به په لاندې مقالو کې په پام کې ونیسو.
د کانري ګمارل
د کانري ستراتیژۍ سره، تازه معلومات لومړی د کاروونکو یو فرعي برخې ته پلي کیږي. د څارنې، لاګ ډیټا، لاسي ازموینې، یا نورو فیډبیک چینلونو له لارې، خوشې کول مخکې له دې چې ټولو کاروونکو ته خپور شي ازمول کیږي.
د کوبرنیټس ګمارنه (رولینګ تازه کول)
د کوبرنیټس ګمارنې لپاره ډیفالټ ستراتیژي رولینګ تازه کول دي ، چیرې چې یو ټاکلی شمیر پوډونه د عکسونو نوي نسخو سره پیل شوي. که دوی له ستونزو پرته رامینځته شوي وي ، د عکسونو د زړو نسخو سره پوډونه ختم شوي ، او نوي پوډونه په موازي ډول رامینځته کیږي.
GitOps
موږ پدې مثال کې GitOps کاروو ځکه چې موږ:
- د حقیقت د یوې سرچینې په توګه د Git کارول
- موږ د جوړولو او پلي کولو لپاره د Git عملیات کاروو (د git ټاګ / ادغام پرته بل کوم قوماندې ته اړتیا نشته)
بېلګه:
راځئ چې یو ښه تمرین وکړو - د غوښتنلیک کوډ لپاره یو ذخیره او یو د زیربنا لپاره.
د غوښتنلیک ذخیره
دا یو خورا ساده Python + Flask API دی چې د JSON په توګه ځواب بیرته راګرځوي. موږ به بسته د GitlabCI له لارې جوړه کړو او پایله به د ګیټلاب راجسټری ته واړوو. په راجسټری کې موږ دوه مختلف خوشې نسخې لرو:
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
تاسو اړتیا لرئ چې غوښه وخورئ KUBECONFIG
په GitlabCI کې، کوم چې به د لاسرسي لپاره ترتیب ولري kubectl
ستاسو کلستر ته.
تاسو کولی شئ د کلستر (Gcloud) لپاره د اعتبار ترلاسه کولو څرنګوالي په اړه ولولئ
زیربنا یامل
د زیربنا ذخیره کې موږ خدمت لرو:
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
په یاد ولرئ چې د اپلیکیشن تعیین تر اوسه کوم نقلونه ندي تعریف شوي.
د ابتدايي ګمارنې ترسره کول
د لومړني ګمارنې پیل کولو لپاره ، تاسو کولی شئ په ماسټر برانچ کې د GitlabCI پایپ لاین په لاسي ډول پیل کړئ. وروسته لدې kubectl
باید لاندې تولید کړي:
موږ وینو app
د 10 نقلونو سره ځای په ځای کول او د 0 سره ایپ کینري. دلته یو LoadBlancer هم شتون لري چې موږ یې له لارې لاسرسی کولی شو curl
د بهرني IP له لارې:
while true; do curl -s 35.198.149.232 | grep label; sleep 0.1; done
موږ ګورو چې زموږ د ازموینې غوښتنلیک یوازې "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 د ډیفالټ تصادفي کولو له امله، موږ باید د 10٪ غوښتنو لپاره مختلف ځوابونه وګورو:
زموږ د غوښتنلیک اوسنی حالت (GitOps، د حقیقت د واحد سرچینې په توګه د Git څخه اخیستل شوی) د فعال نقلونو سره د دوه ګومارلو شتون دی، د هرې نسخې لپاره یو.
~ 10٪ کارونکي د نوي نسخې سره آشنا کیږي او په غیر ارادي ډول یې ازموینه کوي. اوس وخت دی چې د ستونزو موندلو لپاره په لاګونو کې د غلطیو او څارنې ډیټا چیک کړئ.
2 ګام: ټولو کاروونکو ته نوې نسخه خوشې کړئ
موږ پریکړه وکړه چې هرڅه سم پرمخ لاړل او اوس موږ اړتیا لرو چې نوې نسخه ټولو کاروونکو ته وړاندې کړو. د دې کولو لپاره موږ په ساده ډول تازه کوو deploy.yaml
د عکس نوې نسخه نصب کول او د 10 سره مساوي د عکسونو شمیر deploy-canary.yaml
موږ د نقلونو شمیر بیرته 0 ته وټاکو. د ځای پرځای کولو وروسته، پایله به په لاندې ډول وي:
لنډیز لپاره
زما لپاره، په لاسي ډول د ګومارنې چلول د دې په پوهیدو کې مرسته کوي چې دا د k8s په کارولو سره څومره په اسانۍ سره تنظیم کیدی شي. څرنګه چې کوبرنیټس تاسو ته اجازه درکوي د API له لارې هرڅه تازه کړئ، دا مرحلې د سکریپټونو له لارې اتومات کیدی شي.
بل شی چې پلي کولو ته اړتیا لري د ټیسټر ننوتلو نقطه ده (لوډ بیلانسر یا د انګریس له لارې) چې له لارې یې یوازې نوې نسخه لاسرسی کیدی شي. دا د لاسي لټون کولو لپاره کارول کیدی شي.
په راتلونکو مقالو کې، موږ به نور اتوماتیک حلونه وګورو چې ډیری هغه څه پلي کوي چې موږ یې کړي دي.
زموږ په بلاګ کې نورې مقالې هم ولولئ:
د ClickHouse څخه پرته د اجازې سره ClickHouse ته مهاجرت څه لامل شو؟ د Nginx لپاره د متحرک ماډلونو جوړول د nxs-build-tools تازه کول - د deb او rpm کڅوړو په جوړولو کې معاون د هاشیکورپ قونسل د کوبرنیټس واک پیژندنه هغه څه چې موږ د Csync2 کارونې کارولو پرمهال ورسره مخ وو د ریډمین لپاره د ټیلیګرام بوټ. څنګه د ځان او نورو لپاره ژوند ساده کړئ
سرچینه: www.habr.com