Jenkins-X Istio Flagger yordamida Canary Deployment
Kanareykalarni joylashtirish
O'qiysiz degan umiddamiz birinchi qism, bu erda biz Kanareykalarni joylashtirish nima ekanligini qisqacha tushuntirdik va standart Kubernetes resurslaridan foydalangan holda ularni qanday amalga oshirishni ko'rsatdik.
Istio
Va biz ushbu maqolani o'qish orqali siz Istio nima ekanligini allaqachon bilasiz deb o'ylaymiz. Agar yo'q bo'lsa, unda siz bu haqda o'qishingiz mumkin shu yerda.
Sinovlar uchun ariza
Har bir pod ikkita konteynerdan iborat: bizning ilovamiz va istio-proksi.
Biz frontend-nginx va backend python pods bilan oddiy sinov ilovasidan foydalanamiz. Nginx pod har bir so'rovni orqa qismga yo'naltiradi va proksi sifatida ishlaydi. Tafsilotlarni quyidagi yamllarda topish mumkin:
Agar siz mening misolimga ergashmoqchi bo'lsangiz va ushbu test dasturidan o'zingiz foydalanmoqchi bo'lsangiz, qarang Readme loyihasi.
Dastlabki joylashtirish
Birinchi Deploymentni ishga tushirganimizda, biz ilovamizning podslarida faqat 2 ta konteyner borligini ko'ramiz, ya'ni Istio sidecar endigina amalga oshirilmoqda:
Shuningdek, biz nomlar maydonida Istio Gateway Loadbalancer-ni ko'ramiz istio-system:
Trafikni shakllantirish
Biz old panellar tomonidan qabul qilinadigan va orqa panellarga yo'naltiriladigan trafikni yaratish uchun quyidagi IP-dan foydalanamiz:
while true; do curl -s --resolve 'frontend.istio-test:80:35.242.202.152' frontend.istio-test; sleep 0.1; done
Biz ham qo'shamiz frontend.istio-test xostlar faylimizga.
Kiali orqali Mesh-ni ko'ring
Biz test dasturini va Istio-ni Tracing, Grafana, Prometey va Kiali bilan birga o'rnatdik (batafsil ma'lumot uchun pastga qarang). Readme loyihasi). Shuning uchun biz Kiali-dan foydalanishimiz mumkin:
istioctl dashboard kiali # admin:admin
Kiali Mesh orqali joriy trafikni tasavvur qiladi
Ko'rib turganimizdek, trafikning 100% frontend xizmatiga, keyin v1 yorlig'i bo'lgan frontend pod'larga ketadi, chunki biz so'rovlarni backend xizmatiga yo'naltiruvchi oddiy nginx proksi-serveridan foydalanmoqdamiz, bu esa o'z navbatida ularni backend podslariga yo'naltiradi. v1 yorlig'i bilan.
Kiali Istio bilan ajoyib ishlaydi va qutidagi Mesh renderlash yechimini taqdim etadi. Shunchaki ajoyib.
Kanareykalarni joylashtirish
Bizning serverimizda allaqachon ikkita k8s joylashuvi mavjud, biri v1 va biri v2 uchun. Endi biz Istio-ga so'rovlarning ma'lum foizini v2 ga yuborishni aytishimiz kerak.
1-qadam: 10%
Va biz qilishimiz kerak bo'lgan yagona narsa - VirtualService vaznini sozlash istio.yaml:
Endi Canary-ni joylashtirish tugallangan deb hisoblanishi mumkin va barcha trafik v2 ga yo'naltiriladi:
Kanareykani qo'lda sinab ko'rish
Aytaylik, biz barcha so'rovlarning 2 foizini v10 serveriga yuboramiz. Hammasi biz kutgandek ishlashiga ishonch hosil qilish uchun v2 ni qo'lda sinab ko'rmoqchi bo'lsak-chi?
HTTP sarlavhalariga asoslangan maxsus mos qoidani qo'shishimiz mumkin:
Endi curl yordamida biz sarlavhani yuborish orqali v2 so'rovini majburlashimiz mumkin:
Sarlavhasiz so'rovlar hali ham 1/10 nisbatiga asoslanadi:
Ikki qaram versiyalar uchun kanareyka
Endi biz old va backend uchun v2 versiyasiga ega bo'lgan variantni ko'rib chiqamiz. Ikkalasi uchun biz trafikning 10% v2 ga o'tishi kerakligini aniqladik:
Biz v1 va v2 frontendlari v1 va v10 backendlariga 1/2 nisbatda oldingi trafikni ko'ramiz.
Trafikni frontend-v2 dan faqat backend-v2 ga yo'naltirishimiz kerak bo'lsa-chi, chunki u v1 bilan mos kelmaydi? Buni amalga oshirish uchun biz frontend uchun 1/10 nisbatini o'rnatamiz, u muzokaralar yordamida backend-v2 ga qanday trafik kelishini boshqaradi. sourceLabels :
Π birinchi qism Biz Canary joylashtirishni qo'lda, shuningdek ikkita k8s joylashtirishdan foydalangan holda amalga oshirdik. U erda biz replikalar sonini o'zgartirish orqali so'rovlar nisbatini nazorat qildik. Ushbu yondashuv ishlaydi, lekin jiddiy kamchiliklarga ega.
Istio replikalar sonidan qat'iy nazar so'rovlar nisbatini aniqlash imkonini beradi. Bu, masalan, biz HPA (Gorizontal Pod Autoscalers) dan foydalanishimiz mumkinligini va Canary joylashuvining joriy holatiga ko'ra sozlanishi shart emasligini anglatadi.
Xulosa
Istio ajoyib ishlaydi va uni Kiali bilan birgalikda ishlatish juda kuchli kombinatsiyani yaratadi. Mening qiziqishlarim ro'yxatidan keyingi navbatda Spinnakerni avtomatlashtirish va Canary analitikasi uchun Istio bilan birlashtirish.