Распоредување на Canary со помош на Jenkins-X Istio Flagger
Распоредувањето на Canary ќе го извршиме рачно преку GitOps и ќе ги креираме/изменуваме главните ресурси на Kubernetes. Оваа статија е наменета првенствено за вовед со тоа како функционира распоредувањето во Kubernetes Canary, бидејќи има поефикасни методи на автоматизација, кои ќе ги разгледаме во следните написи.
Со стратегијата Канарски, ажурирањата прво се применуваат само на подгрупа корисници. Преку мониторинг, податоци за евиденција, рачно тестирање или други канали за повратни информации, изданието се тестира пред да биде објавено за сите корисници.
Распоредување на Kubernetes (продолжено ажурирање)
Стандардната стратегија за Kubernetes Deployment е ажурирање на тркалање, каде што се лансираат одреден број на места со нови верзии на сликите. Ако тие се создадени без проблеми, местата со стари верзии на слики се прекинуваат, а паралелно се создаваат нови подлоги.
GitOps
Ние користиме GitOps во овој пример затоа што:
користејќи го Git како единствен извор на вистината
ние користиме Git Operations за изградба и распоредување (не се потребни други команди освен git tag/merge)
Пример
Ајде да земеме добра практика - да имаме едно складиште за код за апликација и едно за инфраструктура.
Складиште за апликации
Ова е многу едноставно Python+Flask API што враќа одговор како JSON. Ќе го изградиме пакетот преку GitlabCI и ќе го турнеме резултатот во регистарот Gitlab. Во регистарот имаме две различни верзии на издавање:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
Единствената разлика меѓу нив е промената во вратената JSON-датотека. Ја користиме оваа апликација за да визуализираме што е можно полесно со која верзија комуницираме.
Инфраструктурно складиште
Во оваа репка ќе распоредиме преку GitlabCI до Kubernetes, .gitlab-ci.yml е како што следува:
Имајте предвид дека распоредувањето на апликацијата сè уште нема дефинирани реплики.
Изведување на првично распоредување
За да го започнете првичното распоредување, можете рачно да го стартувате гасоводот GitlabCI на главната гранка. После тоа kubectl треба да го даде следново:
Ние гледаме app распоредување со 10 реплики и app-canary со 0. Има и LoadBalancer од кој можеме да пристапиме преку curl преку надворешна IP:
while true; do curl -s 35.198.149.232 | grep label; sleep 0.1; done
Гледаме дека нашата тест апликација враќа само „v1“.
Извршување на распоредување на Канари
Чекор 1: ослободете нова верзија за некои корисници
Го поставивме бројот на реплики на 1 во датотеката deploy-canary.yaml и сликата на новата верзија:
Ги туркаме овие промени во складиштето од кое ќе започне распоредувањето (преку GitlabCI) и го гледаме резултатот:
Нашата услуга ќе укаже на двете распоредувања, бидејќи и двете го имаат избирачот на апликации. Поради стандардната рандомизација на Кубернетес, треба да видиме различни одговори за ~ 10% од барањата:
Тековната состојба на нашата апликација (GitOps, преземена од Git како единствен извор на вистината) е присуството на две распоредувања со активни реплики, по една за секоја верзија.
~ 10% од корисниците се запознаваат со новата верзија и ненамерно ја тестираат. Сега е време да проверите дали има грешки во дневниците и податоците за следење за да најдете проблеми.
Чекор 2: Објавете ја новата верзија на сите корисници
Решивме дека сè помина добро и сега треба да ја претставиме новата верзија на сите корисници. За да го направите ова, ние едноставно ажурираме deploy.yaml инсталирање на нова верзија на сликата и бројот на реплики еднаков на 10. Во deploy-canary.yaml го поставивме бројот на реплики назад на 0. По распоредувањето, резултатот ќе биде како што следува:
Сумирајќи
За мене, рачно извршување на распоредувањето на овој начин помага да се разбере колку лесно може да се конфигурира со помош на k8s. Бидејќи Kubernetes ви дозволува да ажурирате сè преку API, овие чекори може да се автоматизираат преку скрипти.
Друга работа што треба да се имплементира е влезна точка на тестерот (LoadBalancer или преку Ingress) преку која може да се пристапи само до новата верзија. Може да се користи за рачно прелистување.
Во идните статии, ќе ги провериме другите автоматизирани решенија кои го спроведуваат најголемиот дел од она што сме го направиле.