په کوبرنیټس #3 کې د کانري ګمارنه: اسټیو

د کانري ګمارنې پیل او لید لپاره د اسټیو + کیالي کارول

په کوبرنیټس #3 کې د کانري ګمارنه: اسټیو

په دې لړ کې مقالې

  1. په کبرنیټس #1 کې د کانري ګمارنه: ګیټلاب CI
  2. په کوبرنیټس #2 کې د کانري ګمارنه: د ارګو رول آوټ
  3. (دا مقاله)
  4. د جینکنز - ایکس اسټیو فلیګر په کارولو سره د کانري ګمارل

د کانري ګمارل

موږ هیله لرو چې تاسو یې ولولئ لومړۍ برخه، چیرې چې موږ په لنډ ډول تشریح کړل چې د کانري ګمارنې څه دي او دا یې وښودله چې څنګه د معیاري Kubernetes سرچینو په کارولو سره پلي کول.

اسټیټو

او موږ فرض کوو چې د دې مقالې په لوستلو سره تاسو دمخه پوهیږئ چې اسټیو څه شی دی. که نه، نو تاسو کولی شئ د هغې په اړه ولولئ دلته.

د ازموینې لپاره غوښتنلیک

په کوبرنیټس #3 کې د کانري ګمارنه: اسټیو

هر پوډ دوه کانټینرونه لري: زموږ غوښتنلیک او اسټیو پراکسي.

موږ به د فرنټ اینډ-نګینکس او بیکینډ پایتون پوډونو سره د ساده ازموینې غوښتنلیک وکاروو. د نګینکس پوډ به په ساده ډول هره غوښتنه د بیک انډ پوډ ته واړوي او د پراکسي په توګه کار وکړي. جزئیات په لاندې یاملونو کې موندل کیدی شي:

د ازموینې غوښتنلیک پخپله چلول

که تاسو غواړئ زما مثال تعقیب کړئ او دا ازموینې غوښتنلیک پخپله وکاروئ، وګورئ پروژه لوستل.

ابتدايي ګومارنه

کله چې موږ لومړی ګمارنه پیل کړه ، موږ ګورو چې زموږ د غوښتنلیک پوډ یوازې 2 کانټینرونه لري ، دا دی ، د اسټیو سایډ کار یوازې پلي کیږي:

په کوبرنیټس #3 کې د کانري ګمارنه: اسټیو

او موږ په نوم ځای کې د اسټیو ګیټ وے لوډ بیلانسر هم ګورو istio-system:

په کوبرنیټس #3 کې د کانري ګمارنه: اسټیو

د ترافیکو تولید

موږ به لاندې 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

په کوبرنیټس #3 کې د کانري ګمارنه: اسټیو

کیالي د میش له لارې اوسنی ترافیک لید کوي

لکه څنګه چې موږ لیدلی شو، د ټرافیک 100٪ د فرنټ انډ خدمت ته ځي، بیا د لیبل v1 سره د مخکني پوډونو ته ځي، ځکه چې موږ یو ساده نګینکس پراکسي کاروو چې غوښتنې یې د بیک انډ خدمت ته لیږل کیږي، چې په پایله کې یې د پس منظر پوډونو ته لیږل کیږي. د لیبل v1 سره.

کیالي د اسټیو سره عالي کار کوي او د بکس شوي میش رینډرینګ حل چمتو کوي. یوازې عالي.

د کانري ګمارل

زموږ شالید لا دمخه دوه k8s ځای په ځای شوي ، یو د v1 لپاره او بل د v2 لپاره. اوس موږ اړتیا لرو چې اسټیو ته ووایو چې v2 ته د غوښتنې ټاکلې سلنه لیږلو لپاره.

لومړی ګام: 1٪

او ټول هغه څه چې موږ یې کولو ته اړتیا لرو د VirtualService وزن تنظیم کول دي istio.yaml:

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

په کوبرنیټس #3 کې د کانري ګمارنه: اسټیو

موږ ګورو چې 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 کې د کانري ګمارنه: اسټیو

لومړی ګام: 3٪

اوس د کانري پلي کول بشپړ ګڼل کیدی شي او ټول ترافیک v2 ته لیږل کیږي:

په کوبرنیټس #3 کې د کانري ګمارنه: اسټیو

په لاسي ډول د کانري ازموینه

راځئ چې ووایو موږ اوس د ټولو غوښتنو 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 غوښتنه مجبور کړو:

په کوبرنیټس #3 کې د کانري ګمارنه: اسټیو

د سرلیک پرته غوښتنې به لاهم د 1/10 تناسب لخوا پرمخ وړل کیږي:

په کوبرنیټس #3 کې د کانري ګمارنه: اسټیو

د دوه انحصاري نسخو لپاره کانري

اوس موږ به هغه اختیار په پام کې ونیسو چیرې چې موږ د مخکني او پس منظر دواړو لپاره v2 نسخه لرو. د دواړو لپاره، موږ مشخص کړي چې د ټرافیک 10٪ باید v2 ته لاړ شي:

په کوبرنیټس #3 کې د کانري ګمارنه: اسټیو

موږ ګورو چې مخکنی 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

د پایلې په توګه، موږ هغه څه ترلاسه کوو چې موږ ورته اړتیا لرو:

په کوبرنیټس #3 کې د کانري ګمارنه: اسټیو

د لاسي کانري طریقې څخه توپیر

В لومړی برخه موږ د کانري ګمارنه په لاسي ډول ترسره کړه، د دوه k8s ګمارنې په کارولو سره. هلته موږ د عکسونو شمیر بدلولو سره د غوښتنو تناسب کنټرول کړ. دا طریقه کار کوي، مګر جدي نیمګړتیاوې لري.

Istio دا ممکنه کوي چې د غوښتنو تناسب وټاکي پرته لدې چې د عکسونو شمیر ته پام وکړي. دا پدې مانا ده، د بیلګې په توګه، موږ کولی شو HPAs (افقی پوډ آټوسکلر) وکاروو او اړتیا نلرو چې د کانري ګمارنې اوسني حالت سره سم تنظیم شي.

نتیجه

اسټیو عالي کار کوي او د کیالي سره یوځای کارول خورا پیاوړي ترکیب رامینځته کوي. زما د ګټو په لیست کې بل د اتوماتیک او کانري تحلیلونو لپاره د اسټیو سره سپنیکر ترکیب کول دي.

سرچینه: www.habr.com

Add a comment