Flagger에서 Blue/Green 배포를 시도했습니다.

4571 단어 CICDflaggerkubernetes
요 전날 Flagger에서 Blue/Green 배치를 하는 안건이 있어, Flagger의 인스톨로부터 Blue/Green 배치의 동작을 확인하는 곳까지 한가지를 시도했으므로, 결과를 남겨 둔다.
이번은 Slack에의 통지를 설정했으므로, 갱신이 있거나 프로모션이 완료하거나 하면 Slack에 통지가 오도록 되어 있다.

Flagger 설치 및 Blue/Green 배포



Flagger 설치



기본적으로는 다음 페이지를 참조. Istio를 활성화하고 배포한 GKE 클러스터를 위한 절차도 있지만, 보다 다재다능한 절차를 시도했다.
htps : // / cs. f㎁게 r. 아 p / an s ta l / f ぁ

Flagger의 설치는 기본적으로 helm을 사용해 실시한다. 우선은 helm의 리포지토리를 추가한다.
helm repo add flagger https://flagger.app

그런 다음 Flagger에서 사용할 Canary CRD를 추가합니다. 명칭은 Canary이지만, 카나리아 배포 외에 Blue/green deployment에서도 사용한다.
kubectl apply -f https://raw.githubusercontent.com/weaveworks/flagger/master/artifacts/flagger/crd.yaml

Flagger에서 사용할 메트릭 서버로 prometheus를 사용합니다. 이번에는 istio 샘플의 prometheus 설치용 프로파일을 사용한다.
Kubectl apply -f ./istio/samples/addons/prometheus.yaml

Flagger를 helm으로 설치한다. flagger는 helm 인스톨시의 인수로 기능을 유효하게 하기 때문에, 이번은 메쉬 프로파이더로서 istio, 메트릭스 서버로서 prometheus, 통지처로서 slack를 등록한다. 미리 slack에 앱을 등록하고 webhook url을 취득해 둘 필요가 있다. 또한, 통지 목적지의 채널은 어플리케이션 측의 채널에 덮어 쓰여진다.
helm upgrade -i flagger flagger/flagger \
--namespace=istio-system \
--set crd.create=false \
--set meshProvider=istio \
--set metricsServer=http://prometheus:9090 \
--set slack.url=https://hooks.slack.com/services/your/webhook/url \
--set slack.channel=general \
--set slack.user=flagger-app

Blue/green deployment



Blue/green deployment는 이하의 페이지를 참조하면서 검증했다.
htps : // / cs. f㎁게 r. 아 p / 쓰리 아 ls / 쿠베 r
또한, 사용한 코드는 이하의 리포지토리에 보존하였다.
htps : // 기주 b. 코 m / 우 S 아이 / 아 r 고 cd an d f

Blue/green deployment의 검증은 test namespace상에서 실시하므로, 우선은 test namespace를 작성한다.
kubectl create ns test

먼저 각종 테스트에서 사용하는 Pod를 배포한다.
kubectl apply -k github.com/weaveworks/flagger//kustomize/tester

그런 다음 샘플 앱을 배포합니다.
Kubectl apply -f app -R

Podinfo 컨테이너를 포함한 deployment 리소스와 CPU 사용률을 참조하여 pod수를 2-4 범위에서 조정하는 hpa 리소스가 배포되었습니다.
flagger는 우선 progressive delivery로 관리하고 싶은 deployment를 배치해 두고 그 deployment를 spec.targetref로 지정한 canary 자원을 배치한다. 이 canary 자원은 지정된 deployment에 기초한 primary deployment(리소스명은 원래의 deployment에 -primary를 붙인 것)를 배치해, 원래의 deployment의 pod수를 0으로 스케일 한다. 그 후, 원래의 deployment에 변경이 있을 때마다, canary deployment(리소스명은 원래의 deployment에 -canary를 붙인 것)를 배치해, 메트릭스의 확인등의 동작을 행한 다음에, 트래픽을 유도한다.

Canary 리소스를 배포합니다.
Kubectl apply -f canary.yaml

그 후, 원래의 배치에 포드의 재생성이 필요한 갱신이 가해질 때마다, 캐나리 배치의 작성 이후의 동작이 행해진다. 그 상태는 다음 명령으로 확인할 수 있습니다.
kubectl -n test describe canary/podinfo

Slack에 알림



flagger의 인스톨시에 Slack의 webhook URL을 지정했으므로, 무언가가 있을 때마다 Slack에 통지가 오도록 되어 있다. 그 통지의 예는 다음과 같다.

업데이트가 성공하면

Canary alaysis가 되고 있지만, 하고 있는 것은 Blue/Green Deployment이다.

업데이트에 실패한 경우

한 번 배포했지만 메트릭 조건을 충족하지 않았기 때문에 롤백이 발생한 경우의 예입니다.

좋은 웹페이지 즐겨찾기