Jenkins-X Istio Flagger istifadə edərək Canary Deployment
Canary Deployment
Oxumağınıza ümid edirik birinci hissə, burada Canary Deployments nə olduğunu qısaca izah etdik. Standart Kubernetes resurslarından istifadə edərək bunu necə həyata keçirəcəyimizi də göstərdik.
Argo Rollouts
Argo Rollouts Kubernetes yerli yerləşdirmə nəzarətçisidir. Kubernetes üçün CRD (Xüsusi Resurs Tərifi) təmin edir. Bunun sayəsində yeni bir varlıqdan istifadə edə bilərik: Rollout, müxtəlif konfiqurasiya seçimləri ilə mavi-yaşıl və kanareyka yerləşdirmələrini idarə edir.
Xüsusi resurs tərəfindən istifadə edilən Argo Rollouts nəzarətçisi Rollout, Kubernetes üçün mavi-yaşıl və kanareyka kimi əlavə yerləşdirmə strategiyalarına imkan verir. Resurs Rollout funksionallıq ekvivalentini təmin edir Deployment, yalnız əlavə yerləşdirmə strategiyaları ilə.
vəsait Deployments yerləşdirmə üçün iki strategiyaya malikdir: RollingUpdate и Recreate. Bu strategiyalar əksər hallarda uyğun olsa da, çox geniş miqyasda serverlərə yerləşdirmə üçün Yerləşdirmə nəzarətçisində mövcud olmayan mavi-yaşıl və ya kanarya kimi əlavə strategiyalardan istifadə olunur. Kubernetes-də bu strategiyalardan istifadə etmək üçün istifadəçilər Yerləşdirmələrinin üstünə skriptlər yazmalı idilər. Argo Rollouts Controller bu strategiyaları sadə, deklarativ, konfiqurasiya edilə bilən parametrlər kimi ifşa edir. https://argoproj.github.io/argo-rollouts
Rollouts ilə istifadə üçün rahat veb-interfeysi təmin edən Argo CI də var, biz növbəti məqalədə buna nəzər salacağıq.
İnfrastruktur şalğamımızda (aşağıya bax) biz artıq install.yaml faylını i/k8s/argo-rollouts/install.yaml kimi əlavə etmişik. Bu yolla GitlabCI onu klasterə quraşdıracaq.
Bu, cavabı JSON kimi qaytaran çox sadə Python+Flask API-dir. GitlabCI istifadə edərək paketi quracağıq və nəticəni Gitlab Reyestrinə köçürəcəyik. Reyestrdə iki fərqli buraxılış versiyası var:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
Aralarındakı yeganə fərq qaytarılan JSON faylıdır. Hansı versiya ilə əlaqə saxladığımızı mümkün qədər asanlıqla vizuallaşdırmaq üçün bu proqramdan istifadə edirik.
İnfrastruktur anbarı
Bu depoda biz Kubernetes-də yerləşdirmə üçün GitlabCI-dən istifadə edəcəyik, .gitlab-ci.yml belə görünür:
Rollout Yerləşdirmə ilə eyni işləyir. Yeniləmə strategiyası təyin etməsək (burada kanareyka kimi) o, defolt yayılan yeniləmə Yerləşdirməsi kimi davranacaq.
Kanareyka yerləşdirilməsi üçün yaml-da iki addım müəyyən edirik:
Kanaryaya gedən trafikin 10%-i (əl ilə OK üçün gözləyin)
Kanaryaya 50% trafik (2 dəqiqə gözləyin, sonra 100%-ə qədər davam edin)
İlkin yerləşdirmənin həyata keçirilməsi
İlkin yerləşdirmədən sonra resurslarımız belə görünəcək:
Və biz yalnız tətbiqin ilk versiyasından cavab alırıq:
Canary Deployment həyata keçirilir
Addım 1: 10% trafik
Kanareyka yerləşdirməyə başlamaq üçün adətən yerləşdirmələrdə etdiyimiz kimi sadəcə şəkil versiyasını dəyişdirməliyik:
Bu videonu həqiqətən tövsiyə edirəm, o, Argo Rollouts və Argo CI-nin birlikdə necə işlədiyini göstərir:
Ümumi
Əlavə yerləşdirmə növlərinin və ya replikasetlərin yaradılmasını, trafikin yönləndirilməsini və s.-ni idarə edən CRD-lərdən istifadə ideyasını çox bəyənirəm. Onlarla iş rəvan gedir. Sonra Argo CI ilə inteqrasiyanı sınamaq istərdim.
Bununla belə, Argo CI və Flux CI-nin böyük birləşməsi var, ona görə də yeni buraxılış çıxana qədər gözləyə bilərəm: Arqo axını.