August 5, 2025

[Home-K8S] #14 Flux CD

[Home-K8S] #14 Flux CD

Flux CD

요즘 k8s의 cd 는 ArgoCD 를 많이 사용하는 것 같아요. 아무래도 UI가 있다는 게 개발자들도 같이 사용하기 좋고 보기도 좋죠.

저도 ArgoCD 를 구성했다가 리소스를 생각보다 많이 사용해서 Flux 로 변경했습니다.

Flux cli 설치

curl -s https://fluxcd.io/install.sh | sudo FLUX_VERSION=2.0.0 bash

Flux github token 생성

flux cd 는 git repository를 사용합니다. (github, gitlab, bitbucket 등) 여기서는 github repo를 사용합니다.
권한을 주기 위해 github 의 token 을 생성합니다.

github 프로필 -> settings -> developer settings -> Personal access tokens -> Fine-grained tokens 여기서 token 을 새로 만들어 줍니다.

권한을 하나하나 다 추가해 줍니다. (출처: Claude.ai)

필수 권한:

  • Contents: Read and Write (파일 읽기/쓰기)
  • Metadata: Read (리포지토리 기본 정보 접근)
  • Administration: Read and Write (Deploy key 생성용)

추가 권한 (필요에 따라):

  • Pull requests: Read and Write (PR 기능 사용 시)
  • Issues: Read and Write (이슈 관리 시)
  • Actions: Read (GitHub Actions 연동 시)

flux 설치

설치 전에 미리 체크하는 게 있습니다.
(k8s 버전하고 권한 체크 같은데 있으니까 해 봅니다.)

이제 Github Token 과 User 를 환경변수로 설정하고 설치를 진행합니다.
(기본 namespace 는 flux-system 이지만 --namespace 로 변경 가능합니다. )

export GITHUB_TOKEN=<github-token>
export GITHUB_USER=<github-username>
flux bootstrap github \
  --owner=$GITHUB_USER \
  --repository=k8s-infra \               # github 에 생성될 repo이름
  --branch=main \
  --path=./clusters/my-clsuter \         # k8s cluster 의 경로
  --personal                             # 개인 저장소

이것저것 로그가 뜨다가 중간에 public key 가 뜨는데 github repo -> settings -> deploy keys 를 가보면 key가 등록되어 있습니다.

없으면 이 public key 복사해서 key를 생성해주면 됩니다.

flux deploy key

flux check 과 kubectl get 으로 잘 설치되었는지도 한번 확인해 봅니다.

예시 서비스 배포

처음 구성하고 나면 아래와 같은 파일 구조를 가지고 있을 겁니다.

clusters/
└── my-cluster/
    └── flux-system/
        ├── gotk-components.yaml
        ├── gotk-sync.yaml
        └── kustomization.yaml

my-cluster 경로 위에 k8s 에 설정할 yaml 파일들을 추가해주면 됩니다.

💡
폴더를 생성하고 yaml 파일의 위치는 상관 없습니다. my-cluster 위에 생성하면 됩니다.
apiVersion: source.toolkit.fluxcd.io/v1
kind: GitRepository
metadata:
  name: podinfo
  namespace: flux-system
spec:
  interval: 1m                                     # github repo 를 1분 마다 확인
  ref:
    branch: master                                 # 확인할 branch
  url: https://github.com/stefanprodan/podinfo

podinfo-source.yaml

apiVersion: kustomize.toolkit.fluxcd.io/v1
kind: Kustomization
metadata:
  name: podinfo
  namespace: flux-system
spec:
  interval: 10m
  path: "./kustomize"                              # "github"의 kustomize 경로
  prune: true
  sourceRef:
    kind: GitRepository
    name: podinfo                                  # 위에서 생성한 repo crd 참조
  targetNamespace: default                         # 서비스 namespace

podinfo-kustomization.yaml

git add / commit / push 하면 k8s 위에 podinfo 가 생성됩니다.

마무리

# 모든 Flux 리소스 확인
flux get all

# Git 소스 확인
flux get sources git

# 강제 동기화
flux reconcile source git flux-system

# Flux 컨트롤러 로그
flux logs --level=info --follow --tail=10

flux 는 kustomization 과 helm 둘 다 사용할 수 있고, 자동 배포부터 Rollback 도 가능합니다.

주기적으로 확인해서 업데이트 알림을 줄 수도 있고, 자동 업데이트도 진행할 수 있습니다.

Comments