د کانري ګمارنې پیل او لید لپاره د اسټیو + کیالي کارول
په دې لړ کې مقالې
په کبرنیټس #1 کې د کانري ګمارنه: ګیټلاب CI په کوبرنیټس #2 کې د کانري ګمارنه: د ارګو رول آوټ - (دا مقاله)
- د جینکنز - ایکس اسټیو فلیګر په کارولو سره د کانري ګمارل
د کانري ګمارل
موږ هیله لرو چې تاسو یې ولولئ
اسټیټو
او موږ فرض کوو چې د دې مقالې په لوستلو سره تاسو دمخه پوهیږئ چې اسټیو څه شی دی. که نه، نو تاسو کولی شئ د هغې په اړه ولولئ
د ازموینې لپاره غوښتنلیک
هر پوډ دوه کانټینرونه لري: زموږ غوښتنلیک او اسټیو پراکسي.
موږ به د فرنټ اینډ-نګینکس او بیکینډ پایتون پوډونو سره د ساده ازموینې غوښتنلیک وکاروو. د نګینکس پوډ به په ساده ډول هره غوښتنه د بیک انډ پوډ ته واړوي او د پراکسي په توګه کار وکړي. جزئیات په لاندې یاملونو کې موندل کیدی شي:
د ازموینې غوښتنلیک پخپله چلول
که تاسو غواړئ زما مثال تعقیب کړئ او دا ازموینې غوښتنلیک پخپله وکاروئ، وګورئ
ابتدايي ګومارنه
کله چې موږ لومړی ګمارنه پیل کړه ، موږ ګورو چې زموږ د غوښتنلیک پوډ یوازې 2 کانټینرونه لري ، دا دی ، د اسټیو سایډ کار یوازې پلي کیږي:
او موږ په نوم ځای کې د اسټیو ګیټ وے لوډ بیلانسر هم ګورو istio-system
:
د ترافیکو تولید
موږ به لاندې IP د ټرافیک رامینځته کولو لپاره وکاروو چې د فرنټ اینډ پوډونو لخوا به ترلاسه کیږي او د شاته پای پوډونو ته لیږل کیږي:
while true; do curl -s --resolve 'frontend.istio-test:80:35.242.202.152' frontend.istio-test; sleep 0.1; done
موږ به هم اضافه کړو frontend.istio-test
زموږ د کوربه فایل ته.
د کیالي له لارې میش وګورئ
موږ د ټیسټ غوښتنلیک او اسټیو د ټریسینګ ، ګرافانا ، پرومیټیوس او کیالي سره نصب کړ (د جزیاتو لپاره لاندې وګورئ).
istioctl dashboard kiali # admin:admin
کیالي د میش له لارې اوسنی ترافیک لید کوي
لکه څنګه چې موږ لیدلی شو، د ټرافیک 100٪ د فرنټ انډ خدمت ته ځي، بیا د لیبل v1 سره د مخکني پوډونو ته ځي، ځکه چې موږ یو ساده نګینکس پراکسي کاروو چې غوښتنې یې د بیک انډ خدمت ته لیږل کیږي، چې په پایله کې یې د پس منظر پوډونو ته لیږل کیږي. د لیبل v1 سره.
کیالي د اسټیو سره عالي کار کوي او د بکس شوي میش رینډرینګ حل چمتو کوي. یوازې عالي.
د کانري ګمارل
زموږ شالید لا دمخه دوه k8s ځای په ځای شوي ، یو د v1 لپاره او بل د v2 لپاره. اوس موږ اړتیا لرو چې اسټیو ته ووایو چې v2 ته د غوښتنې ټاکلې سلنه لیږلو لپاره.
لومړی ګام: 1٪
او ټول هغه څه چې موږ یې کولو ته اړتیا لرو د VirtualService وزن تنظیم کول دي
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: backend
namespace: default
spec:
gateways: []
hosts:
- "backend.default.svc.cluster.local"
http:
- match:
- {}
route:
- destination:
host: backend.default.svc.cluster.local
subset: v1
port:
number: 80
weight: 90
- destination:
host: backend.default.svc.cluster.local
subset: v2
port:
number: 80
weight: 10
موږ ګورو چې 10٪ غوښتنې v2 ته لیږل شوي.
لومړی ګام: 2٪
او اوس دا بس دی چې دا 50٪ ته لوړ کړئ:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: backend
namespace: default
spec:
...
- destination:
host: backend.default.svc.cluster.local
subset: v1
port:
number: 80
weight: 50
- destination:
host: backend.default.svc.cluster.local
subset: v2
port:
number: 80
weight: 50
لومړی ګام: 3٪
اوس د کانري پلي کول بشپړ ګڼل کیدی شي او ټول ترافیک v2 ته لیږل کیږي:
په لاسي ډول د کانري ازموینه
راځئ چې ووایو موږ اوس د ټولو غوښتنو 2٪ v10 بیکینډ ته لیږو. څه که موږ غواړو په لاسي ډول v2 ازموینه وکړو ترڅو ډاډ ترلاسه کړو چې هرڅه لکه څنګه چې موږ تمه لرو کار کوي؟
موږ کولی شو د HTTP سرلیکونو پراساس یو ځانګړي مطابقت قاعده اضافه کړو:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: backend
namespace: default
spec:
gateways: []
hosts:
- "backend.default.svc.cluster.local"
http:
- match:
- headers:
canary:
exact: "canary-tester"
route:
- destination:
host: backend.default.svc.cluster.local
subset: v2
port:
number: 80
weight: 100
- match:
- {}
route:
- destination:
host: backend.default.svc.cluster.local
subset: v1
port:
number: 80
weight: 90
- destination:
host: backend.default.svc.cluster.local
subset: v2
port:
number: 80
weight: 10
اوس د curl په کارولو سره موږ کولی شو د سرلیک په لیږلو سره د v2 غوښتنه مجبور کړو:
د سرلیک پرته غوښتنې به لاهم د 1/10 تناسب لخوا پرمخ وړل کیږي:
د دوه انحصاري نسخو لپاره کانري
اوس موږ به هغه اختیار په پام کې ونیسو چیرې چې موږ د مخکني او پس منظر دواړو لپاره v2 نسخه لرو. د دواړو لپاره، موږ مشخص کړي چې د ټرافیک 10٪ باید v2 ته لاړ شي:
موږ ګورو چې مخکنی v1 او v2 دواړه مخ پر وړاندې ټرافيک د 1/10 په تناسب کې د شاليد v1 او v2 سره.
څه که موږ د فرنټ اینډ-v2 څخه یوازې backend-v2 ته ترافیک لیږلو ته اړتیا ولرو ځکه چې دا د v1 سره مطابقت نلري؟ د دې کولو لپاره، موږ به د مخکینۍ برخې لپاره د 1/10 تناسب وټاکو، کوم چې کنټرول کوي چې کوم ټرافیک د خبرو اترو په کارولو سره backend-v2 ته رسیږي. sourceLabels
:
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: backend
namespace: default
spec:
gateways: []
hosts:
- "backend.default.svc.cluster.local"
http:
...
- match:
- sourceLabels:
app: frontend
version: v2
route:
- destination:
host: backend.default.svc.cluster.local
subset: v2
port:
number: 80
weight: 100
د پایلې په توګه، موږ هغه څه ترلاسه کوو چې موږ ورته اړتیا لرو:
د لاسي کانري طریقې څخه توپیر
В لومړی برخه موږ د کانري ګمارنه په لاسي ډول ترسره کړه، د دوه k8s ګمارنې په کارولو سره. هلته موږ د عکسونو شمیر بدلولو سره د غوښتنو تناسب کنټرول کړ. دا طریقه کار کوي، مګر جدي نیمګړتیاوې لري.
Istio دا ممکنه کوي چې د غوښتنو تناسب وټاکي پرته لدې چې د عکسونو شمیر ته پام وکړي. دا پدې مانا ده، د بیلګې په توګه، موږ کولی شو HPAs (افقی پوډ آټوسکلر) وکاروو او اړتیا نلرو چې د کانري ګمارنې اوسني حالت سره سم تنظیم شي.
نتیجه
اسټیو عالي کار کوي او د کیالي سره یوځای کارول خورا پیاوړي ترکیب رامینځته کوي. زما د ګټو په لیست کې بل د اتوماتیک او کانري تحلیلونو لپاره د اسټیو سره سپنیکر ترکیب کول دي.
سرچینه: www.habr.com