GitOps 워크플로우 설계 가이드: GitOps, Kubernetes, Docker 및 CI/CD 실무
GitOps 워크플로우 설계 가이드: Docker와 Kubernetes를 활용한 CI/CD, 인프라 자동화 및 Linux 환경에서의 실전 명령어와 설정 예시를 제공합니다.
GitOps 워크플로우 설계 가이드: GitOps, Kubernetes, Docker 및 CI/CD 실무
GitOps는 Git을 단일 소스 오브 트루스로 사용해 인프라와 애플리케이션 배포를 자동화하는 패턴입니다. 이 글은 DevOps 엔지니어 관점에서 Docker 이미지 빌드, CI/CD 연동, Kubernetes 배포까지 포함한 실전 워크플로우 설계 방법과 CLI 예시를 제공합니다.
GitOps 개요
GitOps는 선언적 구성(declarative configuration)과 Git 기반 변경 관리가 핵심입니다. 인프라 및 애플리케이션 상태는 Git 리포지토리에 저장되고, CD 도구(ArgoCD, Flux)가 Git을 폴링하거나 이벤트를 받아 클러스터 상태를 동기화합니다. 이 접근법은 변경 이력 추적, 감사(audit), 롤백을 단순화합니다.
주요 이점:
- 일관된 인프라 관리
- 자동화된 배포 파이프라인(CI/CD)
- 변경 가시성 및 감사 로그
- 빠른 롤백과 복구
핵심 구성 요소
Git 리포지토리
- 선언적 매니페스트(kustomize, Helm chart, plain YAML)
- 환경별 브랜치나 디렉터리 구조
- GitOps 정책(예: PR 승인, CI 통합)
CD Operator
- ArgoCD 또는 Flux 사용 권장
- Git → 클러스터 동기화, 자동 동기화, 헬스 체크 제공
CI (빌드/테스트)
- Docker 이미지 빌드 및 컨테이너 레지스트리 푸시
- 예: GitHub Actions, GitLab CI, Jenkins
컨테이너 레지스트리
- Docker Hub, GitHub Container Registry, Harbor 등
인프라 및 자동화
- Terraform 등으로 클러스터와 네트워크 인프라 관리
- Linux 서버에서의 자동화 스크립트와 사용자 권한 관리
GitOps 워크플로우 설계 원칙
- 선언적 구성 유지: 모든 리소스는 YAML/Helm/Kustomize로 선언합니다.
- 작은 단위 변경: PR을 통해 작은 변경을 배포하고, 자동화된 테스트를 통과한 후 머지합니다.
- 환경 분리: staging/prod는 별도 리포지토리 또는 디렉터리로 관리합니다.
- 보안 고려: 시크릿은 SealedSecrets, HashiCorp Vault, External Secrets로 관리합니다.
- 자동화와 관찰성: CI는 빌드와 보안 스캔, CD는 배포와 헬스 체크를 수행합니다.
CI/CD 통합(예: GitHub Actions + ArgoCD)
CI: Docker 이미지 빌드 및 푸시 (GitHub Actions 예시)
name: CI Build and Push
on:
push:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Build and push
uses: docker/build-push-action@v4
with:
context: .
push: true
tags: ghcr.io/your-org/your-app:${{ github.sha }}
CD: ArgoCD 설정 예시 (Application manifest)
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
name: your-app
namespace: argocd
spec:
destination:
namespace: default
server: https://kubernetes.default.svc
source:
repoURL: 'https://github.com/your-org/infra.git'
targetRevision: HEAD
path: apps/your-app
syncPolicy:
automated:
prune: true
selfHeal: true
실전 예제: Docker → Kubernetes 배포 파이프라인
Dockerfile (간단한 Node.js 앱)
FROM node:18-alpine
WORKDIR /app
COPY package.json yarn.lock ./
RUN yarn install --frozen-lockfile
COPY . .
RUN yarn build
CMD ["node", "dist/index.js"]
CLI: Linux에서 빌드·푸시
# 로컬 빌드
docker build -t ghcr.io/your-org/your-app:1.0.0 .
# 로그인 (GitHub Container Registry 예)
echo $GITHUB_TOKEN | docker login ghcr.io -u your-username --password-stdin
# 푸시
docker push ghcr.io/your-org/your-app:1.0.0
Kubernetes Deployment (kustomize 사용)
deployments/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: your-app
spec:
replicas: 3
selector:
matchLabels:
app: your-app
template:
metadata:
labels:
app: your-app
spec:
containers:
- name: your-app
image: ghcr.io/your-org/your-app:1.0.0
ports:
- containerPort: 3000
kustomization.yaml
resources:
- deployment.yaml
- service.yaml
images:
- name: ghcr.io/your-org/your-app
newTag: 1.0.0
GitOps 동작 흐름 (요약)
- 개발자가 feature 브랜치에서 코드 변경 → PR 생성
- CI가 유닛테스트, 빌드, 컨테이너 이미지 푸시 수행
- CI가 매니페스트(예: kustomize 변경)를 업데이트해 Git에 커밋(또는 이미지를 태그로 변경)
- ArgoCD가 Git 변경을 감지해 클러스터에 동기화
- 헬스 체크 및 모니터링으로 배포 상태 확인
ArgoCD vs Flux 비교
| 항목 | ArgoCD | Flux |
|---|---|---|
| 동기화 방식 | Pull 기반, UI 제공 | Pull 기반, GitOps toolkit |
| UI/UX | Web UI, CLI | CLI 중심, 플러그인 |
| 자동화 | 자동 동기화, self-heal | 자동화, 이벤트 기반 |
| 커뮤니티 | 강력 | 경량화 및 유연성 우수 |
보안과 인프라 관리
- 시크릿 관리: SealedSecrets, ExternalSecrets, Vault 연동 권장
- RBAC: ArgoCD와 Kubernetes RBAC 정책을 최소 권한 원칙으로 설정
- Linux 호스트 보안: Docker 데몬 접근 제어, 이미지 스캐닝 도구(Trivy, Clair) 사용
- CI 시크릿: GitHub Actions Secrets, GitLab CI Variables 암호화 및 권한 관리
모니터링과 롤백 전략
- 모니터링: Prometheus, Grafana, Alertmanager로 배포 상태와 애플리케이션 메트릭 모니터링
- 롤백: Git으로 이전 커밋으로 되돌리면 CD가 자동 동기화하여 롤백 수행
- Canary/Blue-Green: Istio/Linkerd + Argo Rollouts 또는 Flagger로 안전한 배포 전략 구현
마무리
이 가이드는 Docker, Kubernetes, CI/CD를 포함한 GitOps 워크플로우를 설계하는 데 필요한 실전 원칙과 설정 예시를 제공합니다. 핵심은 선언적 구성, 작은 변경, 자동화, 그리고 보안입니다. 이 원칙을 바탕으로 환경에 맞는 ArgoCD 또는 Flux 기반 GitOps 파이프라인을 설계해 보시기 바랍니다.
관련 게시글
GitOps Workflow 설계 가이드: Kubernetes와 CI/CD를 활용한 자동화
GitOps는 선언적 인프라 및 애플리케이션 관리를 위한 강력한 패러다임입니다. 이 가이드에서는 Git을 Single Source of Truth로 활용하여 Kubernetes 환경에서 안정적이고 효율적인 GitOps 워크플로우를 설계하는 방법을 Docker, CI/CD 자동화 예시와 함께 상세히 설명합니다.
GitHub Actions Advanced Workflows: Docker, Kubernetes CI/CD
GitHub Actions를 활용한 Docker, Kubernetes 기반 CI/CD 파이프라인 구축 심화 가이드. DevOps 엔지니어링 관점에서 자동화 전략을 탐구합니다.
Terraform Infrastructure Automation: DevOps 엔지니어링 가이드
Terraform을 활용한 인프라 자동화의 핵심 개념부터 실제 AWS 환경에서의 배포 예시까지, DevOps 엔지니어링 관점에서 자세히 알아봅니다. IaC, Docker, Kubernetes, CI/CD 파이프라인 통합 전략을 다룹니다.