Распоредување на Canary со помош на Jenkins-X Istio Flagger
Распоредување на канари
Се надеваме дека ќе прочитате првиот дел, каде што накратко објаснивме што се тоа Canary Deployments. Исто така, покажавме како да го имплементираме користејќи стандардни ресурси на Кубернет.
Argo Rollouts
Argo Rollouts е природен контролер за распоредување на Kubernetes. Обезбедува CRD (Custom Resource Definition) за Kubernetes. Благодарение на него, можеме да користиме нов ентитет: Rollout, кој управува со распоредувања на сино-зелени и канаринци со различни опции за конфигурација.
Контролер на Argo Rollouts што се користи од приспособен ресурс Rollout, Овозможува дополнителни стратегии за распоредување како што се сино-зелени и канари за Кубернети. Ресурс Rollout обезбедува еквивалент на функционалност Deployment, само со дополнителни стратегии за распоредување.
ресурси Deployments има две стратегии за распоредување: RollingUpdate и Recreate. Иако овие стратегии се погодни за повеќето случаи, за распоредување на сервери во многу голем обем, се користат дополнителни стратегии, како сино-зелена или канаринска боја, кои не се достапни во контролерот за распоредување. За да ги користат овие стратегии во Kubernetes, корисниците мораа да пишуваат скрипти на врвот на нивните распоредувања. Контролорот Argo Rollouts ги изложува овие стратегии како едноставни, декларативни, конфигурабилни параметри. https://argoproj.github.io/argo-rollouts
Исто така постои и Argo CI, кој обезбедува удобен веб-интерфејс за употреба со Rollouts, ќе го разгледаме во следната статија.
Во нашата инфраструктура репка (види подолу) веќе додадовме install.yaml како i/k8s/argo-rollouts/install.yaml. На овој начин GitlabCI ќе го инсталира во кластерот.
Ова е многу едноставно Python+Flask API што враќа одговор како JSON. Ќе го изградиме пакетот користејќи GitlabCI и ќе го туркаме резултатот во регистарот Gitlab. Во регистарот имаме две различни верзии на издавање:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
Единствената разлика меѓу нив е вратената датотека JSON. Ја користиме оваа апликација за да визуализираме што е можно полесно со која верзија комуницираме.
Инфраструктурно складиште
Во ова складиште ќе користиме GitlabCI за распоредување на Kubernetes, .gitlab-ci.yml изгледа вака:
Rollout работи исто како и Deployment. Ако не поставиме стратегија за ажурирање (како што е Canary овде), таа ќе се однесува како стандардното распоредување на ажурирање.
Ние дефинираме два чекори во јамл за распоредување на канари:
10% од сообраќајот до канаринците (почекајте рачно ОК)
50% сообраќај до канаринци (почекајте 2 минути па продолжи до 100%)
Изведување на првично распоредување
По првичното распоредување, нашите ресурси ќе изгледаат вака:
И добиваме одговор само од првата верзија на апликацијата:
Изведување на распоредување на Канари
Чекор 1: 10% сообраќај
За да започнеме распоредување на канари, само треба да ја смениме верзијата на сликата како што обично правиме со распоредувањата:
Навистина го препорачувам ова видео, покажува како Argo Rollouts и Argo CI работат заедно:
Вкупно
Навистина ми се допаѓа идејата за користење на CRD кои управуваат со создавање на дополнителни видови распоредувања или репликасети, пренасочување на сообраќајот итн. Работата со нив оди без проблеми. Следно, би сакал да ја тестирам интеграцијата со Argo CI.
Сепак, се чини дека доаѓа големо спојување на Argo CI и Flux CI, па можеби ќе почекам додека не излезе новото издание: Арго флукс.
Дали сте имале искуство со Argo Rollouts или Argo CI?