Внедряване на Canary с помощта на Jenkins-X Istio Flagger
Разгръщане на Canary
Надяваме се да прочетете първа част, където накратко обяснихме какво представляват Canary Deployments. Ние също така показахме как да го внедрим с помощта на стандартни ресурси на Kubernetes.
Argo Rollouts
Argo Rollouts е собствен контролер за внедряване на Kubernetes. Той предоставя CRD (дефиниране на потребителски ресурс) за Kubernetes. Благодарение на него можем да използваме нов обект: Rollout, който управлява синьо-зелени и канарски внедрявания с различни опции за конфигурация.
Контролерът Argo Rollouts, използван от персонализиран ресурс Rollout, Позволява допълнителни стратегии за внедряване като синьо-зелено и канарче за Kubernetes. Ресурс 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 ще го инсталира в клъстера.
Това е много прост API на Python+Flask, който връща отговор като JSON. Ще изградим пакета с помощта на GitlabCI и ще изпратим резултата в регистъра на Gitlab. В регистъра имаме две различни версии на изданието:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
Единствената разлика между тях е върнатият JSON файл. Използваме това приложение, за да визуализираме възможно най-лесно с коя версия комуникираме.
Инфраструктурно хранилище
В това хранилище ще използваме GitlabCI за внедряване в Kubernetes, .gitlab-ci.yml изглежда така:
Rollout работи по същия начин като Разгръщане. Ако не зададем стратегия за актуализиране (като канарче тук), тя ще се държи като внедряване на текуща актуализация по подразбиране.
Ние дефинираме две стъпки в yaml за внедряване на canary:
10% от трафика към canary (изчакайте ръчно OK)
50% трафик до Canary (изчакайте 2 минути, след което продължете до 100%)
Извършване на първоначално внедряване
След първоначалното внедряване нашите ресурси ще изглеждат така:
И получаваме отговор само от първата версия на приложението:
Извършване на внедряване на Canary
Стъпка 1: 10% трафик
За да започнем внедряването на canary, просто трябва да променим версията на изображението, както обикновено правим с внедряването:
Наистина препоръчвам това видео, то показва как Argo Rollouts и Argo CI работят заедно:
Общо
Наистина ми харесва идеята за използване на CRD, които управляват създаването на допълнителни типове внедрявания или репликати, пренасочват трафик и т.н. Работата с тях протича гладко. След това бих искал да тествам интеграцията с Argo CI.
Изглежда обаче, че предстои голямо сливане на Argo CI и Flux CI, така че може да изчакам, докато излезе новата версия: Арго Флукс.