FluxCD를 이용한 GitOps 환경 설정 및 Kubernetes 애플리케이션 배포 자동화
GitOps 개념을 이해하고 FluxCD를 사용하여 Kubernetes 클러스터에 애플리케이션을 자동으로 배포하고 관리하는 방법을 안내합니다. CI/CD 파이프라인 구축에 유용합니다.
FluxCD를 이용한 GitOps 환경 설정 및 애플리케이션 배포 자동화
1. GitOps 및 FluxCD 개요
GitOps는 Git 저장소를 단일 진실 공급원(Single Source of Truth)으로 사용하여 인프라 및 애플리케이션의 선언적 구성을 관리하는 운영 방식입니다. FluxCD는 Kubernetes 네이티브 GitOps 도구로, Git 저장소의 변경 사항을 감지하여 클러스터 상태를 자동으로 동기화합니다.
2. FluxCD 설치
FluxCD CLI를 설치하고 Kubernetes 클러스터에 bootstrap 합니다.
# FluxCD CLI 설치 (macOS 예시)
brew install fluxcd/tap/flux
# Kubernetes 클러스터에 FluxCD bootstrap
# Git 저장소 URL을 GitHub, GitLab, Bitbucket 등 실제 사용하는 저장소로 변경하세요.
# --personal 깃헙 토큰을 사용하여 private 저장소 접근 권한을 부여할 수 있습니다.
flux bootstrap github \
--owner=your-github-username \
--repository=your-flux-repo \
--branch=main \
--path=./clusters/my-cluster \
--personal
Bootstrap 명령은 Git 저장소에 FluxCD 설정을 위한 기본 디렉토리 구조와 파일(kustomization.yaml 등)을 생성합니다.
3. 애플리케이션 배포 설정
애플리케이션의 Kubernetes 매니페스트(Deployment, Service 등)를 Git 저장소의 지정된 경로(예: ./clusters/my-cluster/apps)에 추가합니다.
kustomization.yaml 파일을 수정하여 애플리케이션 매니페스트를 참조하도록 설정합니다.
# clusters/my-cluster/kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- apps/my-app/deployment.yaml
- apps/my-app/service.yaml
4. FluxCD를 이용한 배포
Git 저장소에 변경 사항을 커밋하고 푸시하면 FluxCD가 이를 감지하여 자동으로 Kubernetes 클러스터에 적용합니다.
# Git에 변경 사항 커밋 및 푸시
git add .
git commit -m "Add my-app manifests"
git push origin main
FluxCD는 Git 저장소의 main 브랜치를 주기적으로 폴링하거나, GitHub/GitLab의 웹훅을 통해 변경 사항을 감지합니다.
5. 배포 상태 확인 및 롤백
FluxCD CLI를 사용하여 배포 상태를 확인합니다.
# FluxCD 컨트롤러 상태 확인
flux get kustomizations
flux get deployments
# 특정 애플리케이션 배포 상태 확인
flux get kustomization my-app -n flux-system
문제가 발생한 경우, 이전 커밋으로 되돌리거나 Git 저장소의 매니페스트를 수정하여 롤백할 수 있습니다. FluxCD는 Git 상태를 클러스터 상태와 동기화하므로 Git에서 이전 버전으로 되돌리는 것이 롤백입니다.
6. 헬스체크 및 모니터링
Kubernetes Deployment의 readinessProbe 및 livenessProbe를 설정하여 애플리케이션의 헬스체크를 활성화하세요. FluxCD는 Kubernetes 네이티브 기능을 활용하여 배포된 애플리케이션의 상태를 관리합니다. Prometheus, Grafana 등과 연동하여 클러스터 및 애플리케이션 메트릭을 모니터링할 수 있습니다.
7. 시크릿 관리
Sealed Secrets 또는 External Secrets Operator와 같은 도구를 사용하여 Git 저장소에서 시크릿을 안전하게 관리할 수 있습니다. FluxCD는 이러한 도구와의 통합을 지원합니다.
# 예시: FluxCD의 HelmRelease 컨트롤러를 사용하여 Helm 차트 배포
flux create helmrelease my-release \
--chart=nginx \
--release-name=nginx-release \
--namespace=default \
--source=HelmRepository/bitnami \
--create-namespace