Flux로 Flagger 설치하기
Flux로 Flagger 설치하기 (Flagger Install with Flux)
Kubernetes 클러스터에 Flagger를 GitOps 방식으로 설치하는 과정을 이 문서에서 알려드릴게요. Flux가 Flagger OCI 아티팩트를 스캔하고 최신 안정 버전을 Kubernetes에 배포하도록 구성해 봅시다.
출처: 문서
본문
Flagger OCI 아티팩트 (Flagger OCI artifacts)
Flagger OCI 아티팩트(컨테이너 이미지, Helm 차트, Kustomize 오버레이)는 GitHub Container Registry에 게시되며, 릴리스 때마다 Cosign으로 서명됩니다.
OCI 아티팩트:
ghcr.io/fluxcd/flagger:<version>멀티 아키텍처 컨테이너 이미지ghcr.io/fluxcd/flagger-manifest:<version>Kubernetes 매니페스트ghcr.io/fluxcd/charts/flagger:<version>Helm 차트
사전 준비 (Prerequisites)
이 가이드를 따라가려면 Flux가 설치된 Kubernetes 클러스터가 필요합니다. Flux 시작하기 가이드 또는 Flux 설치 가이드를 참고하세요.
Flux로 Flagger 배포 (Deploy Flagger with Flux)
먼저 Flagger가 설치될 네임스페이스를 정의합니다:
---
apiVersion: v1
kind: Namespace
metadata:
name: flagger-system
labels:
toolkit.fluxcd.io/tenant: sre-team
Flagger Helm 차트가 저장된 위치를 가리키는 Flux OCIRepository를 정의합니다:
apiVersion: source.toolkit.fluxcd.io/v1
kind: OCIRepository
metadata:
name: flagger
namespace: flagger-system
spec:
interval: 1h
url: oci://ghcr.io/fluxcd/charts/flagger
layerSelector:
mediaType: "application/vnd.cncf.helm.chart.content.v1.tar+gzip"
operation: copy
ref:
semver: "1.x" # update to the latest version
Flagger 최신 버전을 검증하고 설치하는 Flux HelmRelease를 정의합니다:
---
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
name: flagger
namespace: flagger-system
spec:
interval: 12h
releaseName: flagger
install: # override existing Flagger CRDs
crds: CreateReplace
upgrade: # update Flagger CRDs
crds: CreateReplace
chartRef:
kind: OCIRepository
name: flagger
values:
nodeSelector:
kubernetes.io/os: linux
위 매니페스트를 flagger.yaml 파일에 복사하고, Flux로 부트스트랩된 Git 리포지토리에 YAML 파일을 놓은 뒤 커밋해서 upstream으로 push합니다.
Flux가 클러스터의 변경사항을 조정한 뒤에는 다음 명령으로 Flagger가 배포되었는지 확인할 수 있습니다:
$ helm list -n flagger-system
NAME NAMESPACE REVISION STATUS CHART APP VERSION
flagger flagger-system 1 deployed flagger-1.42.0 1.42.0
Flagger를 제거하려면 리포지토리에서 flagger.yaml을 삭제하면 Flux가 Helm 릴리스를 제거하고 클러스터에서 네임스페이스를 삭제합니다.
Flux로 Flagger 부하 테스터 배포 (Deploy Flagger load tester with Flux)
Flagger에는 웹훅으로 구성했을 때 분석 중 트래픽을 발생시키는 부하 테스트 서비스가 포함되어 있습니다.
부하 테스터 컨테이너 이미지와 배포 매니페스트는 GitHub Container Registry에 게시됩니다. 컨테이너 이미지와 매니페스트는 Cosign과 GitHub Actions OIDC로 서명됩니다.
Flagger가 관리하는 앱들이 apps 네임스페이스에 있다고 가정하면, Flux가 거기에 부하 테스터를 배포하도록 구성할 수 있습니다.
Flagger Kustomize 오버레이가 저장된 위치를 가리키는 Flux OCIRepository를 정의합니다:
---
apiVersion: source.toolkit.fluxcd.io/v1
kind: OCIRepository
metadata:
name: flagger-loadtester
namespace: apps
spec:
interval: 6h # scan for new versions every six hours
url: oci://ghcr.io/fluxcd/flagger-manifests
ref:
semver: "*" # update to the latest version
Flagger 부하 테스터를 apps 네임스페이스에 배포하는 Flux Kustomization을 정의합니다:
---
apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
name: flagger-loadtester
namespace: apps
spec:
targetNamespace: apps
interval: 6h
wait: true
timeout: 5m
prune: true
sourceRef:
kind: OCIRepository
name: flagger-loadtester
path: ./tester
위 매니페스트를 flagger-loadtester.yaml 파일에 복사하고, Flux로 부트스트랩된 Git 리포지토리에 YAML 파일을 놓은 뒤 커밋해서 upstream으로 push합니다.
Flux가 클러스터의 변경사항을 조정한 뒤에는 다음 명령으로 부하 테스터가 배포되었는지 확인할 수 있습니다:
$ flux -n apps get kustomization flagger-loadtester
NAME \tREADY\tMESSAGE
flagger-loadtester\tTrue \tApplied revision: v1.23.0/a80af71e001
부하 테스터를 제거하려면 리포지토리에서 flagger-loadtester.yaml을 삭제하면 Flux가 클러스터에서 부하 테스터 배포를 삭제합니다.