ProHoster > Blog > Ma'muriyat > Kubernetesda kanareykalarni joylashtirish β2: Argo Rollouts
Kubernetesda kanareykalarni joylashtirish β2: Argo Rollouts
Kubernetes-ga Canary-ni joylashtirishni ishga tushirish uchun biz k8s-ning mahalliy Argo Rollouts joylashtirish boshqaruvchisi va GitlabCI-dan foydalanamiz.
Jenkins-X Istio Flagger yordamida Canary Deployment
Kanareykalarni joylashtirish
O'qiysiz degan umiddamiz birinchi qism, bu erda biz Canary Deployments nima ekanligini qisqacha tushuntirdik. Biz buni standart Kubernetes resurslaridan foydalangan holda qanday amalga oshirishni ham ko'rsatdik.
Argo Rollouts
Argo Rollouts - bu Kubernetes mahalliy tarqatish boshqaruvchisi. U Kubernetes uchun CRD (Maxsus Resurs Ta'rifi) ni taqdim etadi. Buning yordamida biz yangi ob'ektdan foydalanishimiz mumkin: Rollout, turli xil konfiguratsiya variantlari bilan ko'k-yashil va kanareykalarni joylashtirishni boshqaradi.
Maxsus resurs tomonidan ishlatiladigan Argo Rollouts kontrolleri Rollout, Kubernetes uchun ko'k-yashil va kanareyka kabi qo'shimcha joylashtirish strategiyalariga ruxsat beradi. Manba Rollout funksionallik ekvivalentini ta'minlaydi Deployment, faqat qo'shimcha joylashtirish strategiyalari bilan.
resurs Deployments joylashtirish uchun ikkita strategiyaga ega: RollingUpdate ΠΈ Recreate. Garchi bu strategiyalar ko'p hollarda mos bo'lsa-da, serverlarga juda keng miqyosda joylashtirish uchun qo'shimcha strategiyalar qo'llaniladi, masalan, ko'k-yashil yoki kanareyka, ular Deployment controller-da mavjud emas. Kubernetes-da ushbu strategiyalardan foydalanish uchun foydalanuvchilar o'zlarining joylashtirishlari ustiga skript yozishlari kerak edi. Argo Rollouts Controller bu strategiyalarni oddiy, deklarativ, sozlanishi parametrlar sifatida namoyon qiladi. https://argoproj.github.io/argo-rollouts
Rollouts bilan foydalanish uchun qulay veb-interfeysni ta'minlovchi Argo CI ham mavjud, biz buni keyingi maqolada ko'rib chiqamiz.
Bizning infratuzilma sholg'omimizga (pastga qarang) biz allaqachon install.yaml ni i/k8s/argo-rollouts/install.yaml sifatida qo'shdik. Shu tarzda GitlabCI uni klasterga o'rnatadi.
Bu JSON sifatida javob qaytaradigan juda oddiy Python+Flask API. Biz paketni GitlabCI yordamida quramiz 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 JSON fayli qaytarilgan. Biz ushbu ilovadan qaysi versiya bilan muloqot qilayotganimizni imkon qadar oson tasavvur qilish uchun foydalanamiz.
Infratuzilma ombori
Ushbu omborda biz Kubernetes-ga joylashtirish uchun GitlabCI-dan foydalanamiz, .gitlab-ci.yml quyidagicha ko'rinadi:
Rollout Deployment bilan bir xil ishlaydi. Agar biz yangilash strategiyasini o'rnatmasak (bu yerda kanareyka kabi) u standart prokat yangilanishi Deployment kabi ishlaydi.
Biz kanareykalarni joylashtirish uchun yamlda ikki bosqichni belgilaymiz:
Kanareyka trafigining 10% (qo'lda OK ni kuting)
Kanareykaga 50% trafik (2 daqiqa kuting, keyin 100% gacha davom eting)
Dastlabki joylashtirishni amalga oshirish
Dastlabki joylashtirishdan so'ng bizning resurslarimiz quyidagicha ko'rinadi:
Va biz faqat ilovaning birinchi versiyasidan javob olamiz:
Kanareykalarni joylashtirishni amalga oshirish
1-qadam: 10% trafik
Kanareykalarni joylashtirishni boshlash uchun biz odatda joylashtirishda bo'lgani kabi rasm versiyasini o'zgartirishimiz kerak:
Men ushbu videoni haqiqatan ham tavsiya qilaman, u Argo Rollouts va Argo CI qanday ishlashini ko'rsatadi:
Xulosa
Menga qo'shimcha joylashtirish turlarini yoki replikasetlarni yaratish, trafikni qayta yo'naltirish va hokazolarni boshqaradigan CRD-lardan foydalanish g'oyasi juda yoqadi. Ular bilan ishlash muammosiz ketadi. Keyin men Argo CI bilan integratsiyani sinab ko'rmoqchiman.
Biroq, Argo CI va Flux CI ning katta birlashishi kutilmoqda, shuning uchun men yangi versiya chiqquncha kutishim mumkin: Argo Flux.
Argo Rollouts yoki Argo CI bilan tajribangiz bormi?
Shuningdek, bizning blogimizdagi boshqa maqolalarni o'qing: