본문 바로가기
WIKI 기술 지식 베이스

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가 클러스터에서 부하 테스터 배포를 삭제합니다.

더 알아보기 (Learn more)