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 Design: Kubernetes CI/CD 자동화 가이드
GitOps 원칙을 기반으로 Kubernetes 환경에서 CI/CD 파이프라인을 설계하고 자동화하는 방법을 상세히 안내합니다. Docker, Argo CD, Helm을 활용한 효율적인 인프라 관리 전략을 다룹니다.
ArgoCD를 활용한 Kubernetes Continuous Delivery 심층 가이드
ArgoCD를 이용한 Kubernetes 환경에서의 GitOps 기반 지속적 배포(Continuous Delivery) 전략을 심층적으로 다룹니다. 설치부터 Application 관리, 고급 기능 및 DevOps 베스트 프랙티스까지, 자동화된 인프라 배포를 위한 가이드입니다.
Kubernetes Pod Service Deployment 심층 가이드
Kubernetes의 핵심 구성 요소인 Pod, Service, Deployment를 DevOps 관점에서 심층 분석하고, 실제 예시와 CLI 명령어를 통해 컨테이너 오케스트레이션의 기본기를 다집니다.