Jenkins-X Istio Flagger yordamida Canary Deployment
Biz Canary joylashtirishni GitOps orqali qo'lda bajaramiz va asosiy Kubernetes resurslarini yaratamiz/o'zgartiramiz. Ushbu maqola birinchi navbatda kirish uchun mo'ljallangan Kubernetes Canary-da joylashtirish qanday ishlashi bilan, chunki avtomatlashtirishning yanada samarali usullari mavjud, biz ularni keyingi maqolalarda ko'rib chiqamiz.
Canary strategiyasi bilan yangilanishlar birinchi navbatda foydalanuvchilarning faqat bir qismiga qo'llaniladi. Monitoring, jurnal ma'lumotlari, qo'lda test yoki boshqa fikr-mulohaza kanallari orqali reliz barcha foydalanuvchilarga chiqarilishidan oldin sinovdan o'tkaziladi.
Kubernetes Deployment (tezkor yangilanish)
Kubernetes Deployment uchun standart strategiya yangilanish bo'lib, unda tasvirlarning yangi versiyalari bilan ma'lum miqdordagi podlar ishga tushiriladi. Agar ular muammosiz yaratilgan bo'lsa, rasmlarning eski versiyalari bo'lgan podalar tugatiladi va parallel ravishda yangi podlar yaratiladi.
GitOps
Biz ushbu misolda GitOps-dan foydalanamiz, chunki biz:
Git-dan haqiqatning yagona manbai sifatida foydalanish
Biz Git Operations dan yaratish va joylashtirish uchun foydalanamiz (git tag/birlashtirishdan boshqa buyruqlar kerak emas)
misol
Keling, yaxshi amaliyotni ko'rib chiqaylik - bitta dastur kodi va infratuzilma uchun bitta omborga ega bo'lish.
Ilovalar ombori
Bu JSON sifatida javob qaytaradigan juda oddiy Python+Flask API. Biz paketni GitlabCI orqali yaratamiz va natijani Gitlab registriga yuboramiz. Ro'yxatga olish kitobida bizda ikkita turli xil versiyalar mavjud:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
Ularning orasidagi yagona farq qaytarilgan JSON faylidagi o'zgarishdir. Biz ushbu ilovadan qaysi versiya bilan muloqot qilayotganimizni imkon qadar oson tasavvur qilish uchun foydalanamiz.
Infratuzilma ombori
Ushbu sholg'omda biz GitlabCI orqali Kubernetes-ga joylashtiramiz, .gitlab-ci.yml quyidagilar:
Ilova-deploy-da hali aniqlangan replika yo'qligini unutmang.
Dastlabki joylashtirishni amalga oshirish
Dastlabki joylashtirishni boshlash uchun siz GitlabCI quvur liniyasini asosiy filialda qo'lda boshlashingiz mumkin. Bundan keyin kubectl quyidagilarni chiqarishi kerak:
Ko'ramiz app 10 ta replika va 0 bilan ilova-kanareykalarni joylashtirish. Shuningdek, LoadBalancer ham mavjud bo'lib, biz undan foydalanishimiz mumkin. curl Tashqi IP orqali:
while true; do curl -s 35.198.149.232 | grep label; sleep 0.1; done
Bizning test dasturimiz faqat "v1" ni qaytarayotganini ko'ramiz.
Canary joylashtirishni amalga oshirish
1-qadam: ba'zi foydalanuvchilar uchun yangi versiyani chiqaring
Biz deploy-canary.yaml faylida va yangi versiya tasvirida replikalar sonini 1 ga o'rnatdik:
Biz ushbu o'zgarishlarni joylashtirish boshlanadigan (GitlabCI orqali) omborga suramiz va natijada:
Bizning xizmatimiz ikkala o'rnatishga ishora qiladi, chunki ikkalasida ham ilova selektori mavjud. Kubernetesning sukut bo'yicha tasodifiyligi tufayli biz so'rovlarning ~10% uchun turli javoblarni ko'rishimiz kerak:
Ilovamizning hozirgi holati (GitOps, Git-dan haqiqatning yagona manbasi sifatida olingan) har bir versiya uchun bittadan faol replikalarga ega ikkita o'rnatishning mavjudligi.
~10% foydalanuvchi yangi versiya bilan tanishadi va uni beixtiyor sinab ko'radi. Endi muammolarni topish uchun jurnallar va monitoring ma'lumotlaridagi xatolarni tekshirish vaqti keldi.
2-qadam: Yangi versiyani barcha foydalanuvchilarga chiqaring
Biz hamma narsa yaxshi bo'ldi deb qaror qildik va endi yangi versiyani barcha foydalanuvchilarga tarqatishimiz kerak. Buning uchun biz shunchaki yangilaymiz deploy.yaml tasvirning yangi versiyasini o'rnatish va replikatsiyalar soni 10 ga teng. In deploy-canary.yaml replikalar sonini 0 ga qaytaramiz. Joylashtirishdan so'ng natija quyidagicha bo'ladi:
sarhisob qilar ekanmiz
Men uchun tarqatishni qo'lda shu tarzda ishga tushirish k8s yordamida uni qanchalik oson sozlash mumkinligini tushunishga yordam beradi. Kubernetes sizga API orqali hamma narsani yangilash imkonini berganligi sababli, bu qadamlarni skriptlar orqali avtomatlashtirish mumkin.
Amalga oshirish kerak bo'lgan yana bir narsa bu testerning kirish nuqtasi (LoadBalancer yoki Ingress orqali), u orqali faqat yangi versiyaga kirish mumkin. U qo'lda ko'rish uchun ishlatilishi mumkin.
Kelgusi maqolalarda biz qilgan ishlarning aksariyatini amalga oshiradigan boshqa avtomatlashtirilgan echimlarni ko'rib chiqamiz.
Shuningdek, bizning blogimizdagi boshqa maqolalarni o'qing: