Jenkins-X Istio Flagger көмегімен Canary Deployment
Canary Deployment
Сіз оқисыз деп үміттенеміз бірінші бөлім, мұнда біз Canary Deployments дегеніміз не екенін қысқаша түсіндірдік. Біз сондай-ақ стандартты Kubernetes ресурстарын пайдалану арқылы оны қалай жүзеге асыру керектігін көрсеттік.
Argo Rollouts
Argo Rollouts - Kubernetes жергілікті орналастыру контроллері. Ол Kubernetes үшін CRD (пайдаланушы ресурс анықтамасы) береді. Оның арқасында біз жаңа нысанды пайдалана аламыз: Rollout, ол әртүрлі конфигурация опциялары бар көк-жасыл және канарлы орналастыруларды басқарады.
Argo Rollouts контроллері теңшелетін ресурспен пайдаланылады Rollout, Kubernetes үшін көк-жасыл және канария сияқты қосымша орналастыру стратегияларына мүмкіндік береді. Ресурс Rollout функционалдық эквивалентті қамтамасыз етеді Deployment, тек қосымша орналастыру стратегияларымен.
ресурс Deployments орналастырудың екі стратегиясы бар: RollingUpdate и Recreate. Бұл стратегиялар көп жағдайда қолайлы болғанымен, серверлерге өте кең ауқымда орналастыру үшін, Орналастыру контроллерінде қол жетімді емес көк-жасыл немесе канар сияқты қосымша стратегиялар пайдаланылады. Kubernetes-те осы стратегияларды пайдалану үшін пайдаланушылар орналастыруларының үстіне сценарий жазуы керек болды. Argo Rollouts Controller бұл стратегияларды қарапайым, декларативті, конфигурацияланатын параметрлер ретінде көрсетеді. https://argoproj.github.io/argo-rollouts
Сондай-ақ Argo CI бар, ол Rollouts-пен пайдалану үшін ыңғайлы веб-интерфейсті қамтамасыз етеді, біз оны келесі мақалада қарастырамыз.
Біздің инфрақұрылымымызда (төменде қараңыз) install.yaml файлын i/k8s/argo-rollouts/install.yaml ретінде қостық. Осылайша GitlabCI оны кластерге орнатады.
Бұл JSON ретінде жауапты қайтаратын өте қарапайым Python+Flask API. Біз пакетті GitlabCI көмегімен құрастырамыз және нәтижені Gitlab тізіліміне жібереміз. Тізілімде екі түрлі шығарылым нұсқасы бар:
wuestkamp/k8s-deployment-example-app:v1
wuestkamp/k8s-deployment-example-app:v2
Олардың арасындағы жалғыз айырмашылық қайтарылған JSON файлы болып табылады. Біз бұл қолданбаны қай нұсқамен байланысып жатқанымызды мүмкіндігінше оңай визуализациялау үшін пайдаланамыз.
Инфрақұрылымдық репозиторий
Бұл репозиторийде біз GitlabCI-ді Kubernetes жүйесіне орналастыру үшін қолданамыз, .gitlab-ci.yml келесідей көрінеді:
Rollout Орналастыру сияқты жұмыс істейді. Жаңарту стратегиясын орнатпасақ (мұнда канария сияқты) ол әдепкі жылжыту-жаңарту Орналастыру сияқты әрекет етеді.
Канарияны орналастыру үшін yaml-де екі қадамды анықтаймыз:
Канарияға трафиктің 10% (қолмен OK күтіңіз)
Канарияға 50% трафик (2 минут күтіңіз, содан кейін 100% дейін жалғастырыңыз)
Бастапқы орналастыруды орындау
Алғашқы орналастырудан кейін ресурстарымыз келесідей болады:
Біз тек қосымшаның бірінші нұсқасынан жауап аламыз:
Canary орналастыруды орындау
1-қадам: 10% трафик
Канарияны орналастыруды бастау үшін, әдетте орналастырулардағыдай кескін нұсқасын өзгерту керек:
Мен бұл бейнені шынымен ұсынамын, ол Argo Rollouts және Argo CI бірге қалай жұмыс істейтінін көрсетеді:
Нәтиже
Маған қосымша орналастыру түрлерін немесе репликасеттерді жасауды, трафикті қайта бағыттауды және т.б. басқаратын CRD пайдалану идеясы өте ұнайды. Олармен жұмыс бірқалыпты жүреді. Содан кейін мен Argo CI-мен интеграцияны тексергім келеді.
Дегенмен, Argo CI және Flux CI үлкен бірігуі келе жатқан сияқты, сондықтан мен жаңа шығарылым шыққанша күте аламын: Арго ағыны.
Argo Rollouts немесе Argo CI-мен тәжірибеңіз болды ма?
Сондай-ақ біздің блогтағы басқа мақалаларды оқыңыз: