குபெர்னெட்டஸில் கேனரி வரிசைப்படுத்தல் #3: இஸ்டியோ

கேனரி வரிசைப்படுத்தலைத் தொடங்கவும் காட்சிப்படுத்தவும் இஸ்டியோ+கியாலியைப் பயன்படுத்துதல்

குபெர்னெட்டஸில் கேனரி வரிசைப்படுத்தல் #3: இஸ்டியோ

இந்தத் தொடரில் உள்ள கட்டுரைகள்

  1. குபெர்னெட்டஸில் கேனரி வரிசைப்படுத்தல் #1: கிட்லாப் சிஐ
  2. குபெர்னெட்டஸில் கேனரி வரிசைப்படுத்தல் #2: ஆர்கோ ரோல்அவுட்கள்
  3. (இந்த கட்டுரை)
  4. ஜென்கின்ஸ்-எக்ஸ் இஸ்டியோ ஃபிளாக்கரைப் பயன்படுத்தி கேனரி வரிசைப்படுத்தல்

கேனரி வரிசைப்படுத்தல்

நீங்கள் படித்திருப்பீர்கள் என்று நம்புகிறோம் முதல் பகுதி, கேனரி வரிசைப்படுத்தல்கள் என்றால் என்ன என்பதை நாங்கள் சுருக்கமாக விளக்கி, நிலையான குபெர்னெட்ஸ் ஆதாரங்களைப் பயன்படுத்தி அவற்றை எவ்வாறு செயல்படுத்துவது என்பதைக் காண்பித்தோம்.

இஸ்டியோ

இந்த கட்டுரையைப் படிப்பதன் மூலம், இஸ்டியோ என்றால் என்ன என்பது உங்களுக்கு ஏற்கனவே தெரியும் என்று நாங்கள் கருதுகிறோம். இல்லையென்றால், அதைப் பற்றி நீங்கள் படிக்கலாம் இங்கே.

சோதனைகளுக்கான விண்ணப்பம்

குபெர்னெட்டஸில் கேனரி வரிசைப்படுத்தல் #3: இஸ்டியோ

ஒவ்வொரு பானிலும் இரண்டு கொள்கலன்கள் உள்ளன: எங்கள் பயன்பாடு மற்றும் istio-proxy.

ஃப்ரண்டெண்ட்-என்ஜிஎன்எக்ஸ் மற்றும் பேக்எண்ட் பைதான் காய்களுடன் கூடிய எளிய சோதனைப் பயன்பாட்டைப் பயன்படுத்துவோம். nginx பாட் ஒவ்வொரு கோரிக்கையையும் பின்தளத்தில் பாட்க்கு திருப்பி ப்ராக்ஸியாக வேலை செய்யும். பின்வரும் யாழ்களில் விவரங்களைக் காணலாம்:

சோதனை பயன்பாட்டை நீங்களே இயக்குதல்

எனது உதாரணத்தைப் பின்பற்றி, இந்த சோதனைப் பயன்பாட்டை நீங்களே பயன்படுத்த விரும்பினால், பார்க்கவும் திட்ட வாசிப்பு.

ஆரம்ப வரிசைப்படுத்தல்

நாங்கள் முதல் வரிசைப்படுத்தலைத் தொடங்கும்போது, ​​​​எங்கள் பயன்பாட்டின் காய்களில் 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 லேபிளுடன் கூடிய ஃப்ரண்ட்எண்ட் பாட்களுக்கும் செல்கிறது, ஏனெனில் நாங்கள் ஒரு எளிய nginx ப்ராக்ஸியைப் பயன்படுத்துகிறோம், இது கோரிக்கைகளை பின்தள சேவைக்கு திருப்பிவிடும். லேபிள் v1 உடன்.

கியாலி இஸ்டியோவுடன் சிறப்பாகச் செயல்படுகிறது மற்றும் பெட்டி மெஷ் ரெண்டரிங் தீர்வை வழங்குகிறது. பிரமாதம்.

கேனரி வரிசைப்படுத்தல்

எங்கள் பின்தளத்தில் ஏற்கனவே இரண்டு k8s வரிசைப்படுத்தல்கள் உள்ளன, ஒன்று v1க்கு ஒன்று மற்றும் ஒன்று v2க்கு. ஒரு குறிப்பிட்ட சதவீத கோரிக்கைகளை v2 க்கு அனுப்ப இஸ்டியோவிடம் இப்போது சொல்ல வேண்டும்.

படி 1: 10%

நாம் செய்ய வேண்டியது மெய்நிகர் சேவையின் எடையை சரிசெய்வதுதான் 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%

இப்போது அதை 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: 100%

இப்போது கேனரி வரிசைப்படுத்தல் முடிந்ததாகக் கருதலாம் மற்றும் அனைத்து போக்குவரத்தும் 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 உடன் இணங்காததால், ஃப்ரண்ட்எண்ட்-வி2 இலிருந்து பேக்கெண்ட்-வி1க்கு மட்டும் டிராஃபிக்கை ஃபார்வர்ட் செய்ய வேண்டுமானால் என்ன செய்வது? இதைச் செய்ய, முன்பக்கத்திற்கு 1/10 விகிதத்தை அமைப்போம், இது பேச்சுவார்த்தையைப் பயன்படுத்தி பின்தளத்தில்-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 வரிசைப்படுத்தல்களையும் பயன்படுத்தினோம். பிரதிகளின் எண்ணிக்கையை மாற்றுவதன் மூலம் கோரிக்கைகளின் விகிதத்தைக் கட்டுப்படுத்தினோம். இந்த அணுகுமுறை வேலை செய்கிறது, ஆனால் கடுமையான குறைபாடுகள் உள்ளன.

பிரதிகளின் எண்ணிக்கையைப் பொருட்படுத்தாமல் கோரிக்கைகளின் விகிதத்தைத் தீர்மானிக்க இஸ்டியோ சாத்தியமாக்குகிறது. இதன் பொருள், எடுத்துக்காட்டாக, நாம் HPA களை (கிடைமட்ட பாட் ஆட்டோஸ்கேலர்கள்) பயன்படுத்தலாம் மற்றும் கேனரி வரிசைப்படுத்தலின் தற்போதைய நிலைக்கு ஏற்ப கட்டமைக்க வேண்டிய அவசியமில்லை.

இதன் விளைவாக

இஸ்டியோ நன்றாக வேலை செய்கிறது மற்றும் கியாலியுடன் இதைப் பயன்படுத்துவது மிகவும் சக்திவாய்ந்த கலவையை உருவாக்குகிறது. எனது ஆர்வங்களின் பட்டியலில் அடுத்ததாக ஸ்பின்னேக்கரை இஸ்டியோவுடன் ஆட்டோமேஷன் மற்றும் கேனரி பகுப்பாய்வுகளை இணைப்பது.

ஆதாரம்: www.habr.com

கருத்தைச் சேர்