Спадзяемся, што Вы чыталі першую частку, дзе мы коратка тлумачылі што такое Canary Deployments. Мы таксама паказвалі як яго рэалізаваць выкарыстоўваючы стандартныя рэсурсы Kubernetes.
Argo Rollouts
Argo Rollouts – гэта Kubernetes-натыўны кантролер разгортвання. Ён дае CRD (Custom Resource Definition) для Kubernetes. Дзякуючы яму, мы можам выкарыстоўваць новую сутнасць: Rollout, якая кіруе blue-green і сanary deployments з рознымі варыянтамі наладкі.
Кантролер Argo Rollouts, які выкарыстоўваецца кастамным рэсурсам Rollout, дазваляе выкарыстоўваць дадатковыя стратэгіі разгортвання, такія як blue-green і сanary для Kubernetes. Рэсурс Rollout дае функцыянал раўназначны Deployment, толькі з дадатковымі стратэгіямі разгортвання.
Рэсурс Deployments мае дзве стратэгіі для разгортвання: RollingUpdate и Recreate. Нягледзячы на тое, што гэтыя стратэгіі падыходзяць для большасці выпадкаў, для дэплою на сервера ў вельмі вялікім маштабе выкарыстоўваюць дадатковыя стратэгіі, такія як blue-green ці canary, якіх няма ў Deployment кантролеры. Каб выкарыстоўваць гэтыя стратэгіі ў Kubernetes, карыстачам прыходзілася пісаць скрыпты па-над сваім Deployments. Кантролер Argo Rollouts дае гэтыя стратэгіі ў выглядзе простых дэкларатыўных наладжвальных параметраў. https://argoproj.github.io/argo-rollouts
Існуе таксама Argo CI, які дае зручны вэб-інтэрфейс для выкарыстання разам з Rollouts, мы зірнем на яго ў наступным артыкуле.
Гэта вельмі простая API на Python+Flask, якая вяртае адказ у выглядзе JSON. Мы збяром пакет, выкарыстоўваючы GitlabCI і запушым вынік у Gitlab Registry. У рэгістры ў нас ёсць дзве розныя версіі рэлізаў:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
Адзіная розніца паміж імі гэта які вяртаецца JSON-файл. Мы выкарыстоўваем гэта дадатак для максімальна простай візуалізацыі таго, з якой версіяй мы маем зносіны.
Інфраструктурны рэпазітар
У гэтым рэпазітары мы будзем выкарыстоўваць GitlabCI для дэплою ў Kubernetes, .gitlab-ci.yml выглядае наступным чынам:
Rollout працуе гэтак жа як і Deployment. Калі мы не зададзім стратэгію абнаўлення (як canary тут) ён будзе паводзіць сябе як дэфолтны rolling-update Deployment.
Мы вызначаем два крокі ў yaml для canary deployment:
10% трафіку на canary (wait for manual OK)
50% трафіку на canary (wait 2 minutes then continue to 100%)
Выкананне пачатковага дэплою
Пасля пачатковага дэплою нашы рэсурсы будуць выглядаць так:
І атрымліваем адказ толькі ад першай версіі прыкладання:
Выконваем Canary Deployment
Крок 1: 10% трафіку
Каб пачаць canary разгортванне, нам проста трэба змяніць версію выявы, як мы звычайна робім з разгортваннямі:
Я сапраўды рэкамендую гэта відэа, у ім паказваецца як Argo Rollouts і Argo CI працуюць разам:
Вынік
Мне вельмі падабаецца ідэя выкарыстання CRDs, якія кіруюць стварэннем дадатковых тыпаў deployments ці replicasets, перанакіроўваюць трафік ітд. Праца з імі праходзіць гладка. Далей мне б хацелася пратэставаць інтэграцыю з Argo CI.
Аднак, судзячы па ўсім, будзе вялікае зліццё Argo CI і Flux CI, так што я мог бы пачакаць, пакуль не выйдзе новы рэліз: Argo Flux.
А ці быў у Вас досвед з Argo Rollouts або Argo CI?