August 20, 2025

[Home-K8S] #15 Flux CD - Helm

[Home-K8S] #15 Flux CD - Helm

Flux CD - Helm

아무래도 Helm 을 이용한 배포가 가장 많이 쓰이고 있죠.

아무래도 저는 개인적으로 사용하다 보니 알려진 서비스들을 올리기에는 Helm 이 가장 편했습니다.

Helm 을 CLI 로 배포할 때처럼 Flux CD 에서도 Helm Repository 하고 Version 만 있으면 됩니다.

Helm Repository

helm repository 하고 helm 배포 설정하고 서로 다른 파일로 작성합니다.

이전 포스트에서 작성했던 것처럼 폴더는 아무렇게나 설정해도 됩니다.
Repository 부분하고 Releases 폴더로 나눴습니다.

https url

apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
  name: ingress-nginx
  namespace: flux-system
spec:
  interval: 1h
  url: https://kubernetes.github.io/ingress-nginx

가장 많이 사용하는 https url 로 작성된 url 은 url 만 설정해 주면 됩니다.
interval 은 helm repo를 업데이트 하는 주기에요. 새롭게 release 된 chart를 찾습니다.

oci url

apiVersion: source.toolkit.fluxcd.io/v1
kind: HelmRepository
metadata:
  name: jetstack
  namespace: flux-system
spec:
  type: "oci"
  interval: 1h
  url: oci://quay.io/jetstack/charts

oci url 을 사용하는 경우에는 type 을 넣어줘야 합니다.

Helm Release

helm add / update 를 했으니 이제 install / upgrade 를 진행하면 됩니다.

apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  name: ingress-nginx
  namespace: ingress-nginx
spec:
  interval: 1h
  chart:
    spec:
      chart: ingress-nginx
      version: "^4.13.1"  # 4.13.1 이상 5.0.0 미만 버전
      sourceRef:
        kind: HelmRepository
        name: ingress-nginx
        namespace: flux-system
  install:
    createNamespace: true
    remediation:
      retries: 3
  upgrade:
    remediation:
      retries: 3
  rollback:
    timeout: 5m
    recreate: true
  values:
    controller:
      admissionWebhooks:
        enabled: false
      allowSnippetAnnotations: true
      service:
        annotations:
          lbipam.cilium.io/ips: 192.168.5.149
        loadBalancerClass: io.cilium/l2-announcer
        type: LoadBalancer

metadata : 배포할 helm 의 이름과 namespace 입니다.
interval : 시간마다 helm repos 를 확인합니다. version 의 범위에 맞다면 자동 업데이트 합니다.
chart : sourceRef 에 helm repository와 chart 이름, 버전을 설정합니다.
install / upgrade / rollback : 각 과정의 값을 설정합니다. (자세한 건 gpt로)
values : helm chart의 values 값을 입력합니다. --set 으로 쓰이는 설정이죠.

version 범위

Masterminds/semver 라이브러리를 사용해서 버전 범위를 해석한다고 합니다.

  1. ^ : 가장 왼쪽의 0 이 아닌 번호 유지
  2. x, * : 와일드 카드로 지정, 해당 범위 내의 최신 버전 사용
  3. ~ : 패치 버전만 변경 허용
    1. ~1.2.3 : 1.2.x
    2. ~1.2 : 1.x.x
  4. 비교 연산자 (>=<) : 부등호로 세밀한 범위 가능합니다.
    1. >=1.2.0 <2.0.0 처럼 공백으로 여러 조건을 조합할 수 있습니다.
    2. 1.2.0 - 1.5.0 : 이상, 이하 로 설정됩니다.

Comments