[Home-K8S] #22 FluxCD 계층과 분리 / 다중 클러스터 리소스 공유와 설정 분리
FluxCD - yaml 앞서 fluxcd 를 이용해서 helm chart 를 구성했습니다. 그 외에 일반적인 yaml
요즘 k8s의 cd 는 ArgoCD 를 많이 사용하는 것 같아요. 아무래도 UI가 있다는 게 개발자들도 같이 사용하기 좋고 보기도 좋죠.
저도 ArgoCD 를 구성했다가 리소스를 생각보다 많이 사용해서 Flux 로 변경했습니다.
curl -s https://fluxcd.io/install.sh | sudo FLUX_VERSION=2.0.0 bash
flux cd 는 git repository를 사용합니다. (github, gitlab, bitbucket 등) 여기서는 github repo를 사용합니다.
권한을 주기 위해 github 의 token 을 생성합니다.
github 프로필 -> settings -> developer settings -> Personal access tokens -> Fine-grained tokens 여기서 token 을 새로 만들어 줍니다.

권한을 하나하나 다 추가해 줍니다. (출처: Claude.ai)
설치 전에 미리 체크하는 게 있습니다.
(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 check 과 kubectl get 으로 잘 설치되었는지도 한번 확인해 봅니다.


처음 구성하고 나면 아래와 같은 파일 구조를 가지고 있을 겁니다.
clusters/
└── my-cluster/
└── flux-system/
├── gotk-components.yaml
├── gotk-sync.yaml
└── kustomization.yamlmy-cluster 경로 위에 k8s 에 설정할 yaml 파일들을 추가해주면 됩니다.
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=10flux 는 kustomization 과 helm 둘 다 사용할 수 있고, 자동 배포부터 Rollback 도 가능합니다.
주기적으로 확인해서 업데이트 알림을 줄 수도 있고, 자동 업데이트도 진행할 수 있습니다.
Comments