본문 바로가기
IT & Tech 정보

Git 커밋도 없이 배포된다: Argo CD Image Updater로 완전 자동 GitOps 구축하기

by 지식과 지혜의 나무 2025. 5. 28.
반응형





🧭 왜 GitOps의 자동화를 다시 고민해야 하는가

GitOps는 인프라 및 애플리케이션 상태를 Git에 저장하고, Git의 변경이 곧 배포로 이어지는 구조입니다. 그러나 대부분의 GitOps 환경에서는 다음과 같은 병목이 존재합니다:
• CI 파이프라인에서 버전 태그를 업데이트하기 위해 YAML을 수정하고 커밋해야 함
• 자동 빌드 후에도 운영자가 Git에 수동 커밋 → PR → 리뷰 → 배포 트리거

즉, GitOps는 선언적이지만 실질적으로 버전 추적과 배포 간의 자동화가 단절된 구조로 운영됩니다. 이를 해결하는 핵심 툴이 Argo CD Image Updater입니다.



🔧 핵심 구성 요소와 흐름 요약

구성 요소 설명
Argo CD Kubernetes 배포 상태를 Git 기준으로 동기화
Image Updater 이미지 레지스트리에서 태그 변화 감지 후 Git YAML 자동 수정
Docker Registry 이미지 태그 업데이트 트리거
GitOps 리포지토리 Kustomize / Helm 기반 Kubernetes manifest 정의
CI 빌드 GitHub Actions, GitLab CI 등으로 이미지 빌드 및 푸시

최종 목표는 다음과 같습니다:

“이미지 푸시만 하면, Git YAML 자동 수정 → Git Push → Argo CD가 자동 배포”



📄 실전 YAML 구성 예시 (Kustomize 기준)

1. deployment.yaml

spec:
  containers:
  - name: web
    image: ghcr.io/myorg/webapp:1.0.0

2. .argocd-image-updater.yaml

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: webapp
  annotations:
    argocd-image-updater.argoproj.io/image-list: web=ghcr.io/myorg/webapp
    argocd-image-updater.argoproj.io/web.update-strategy: latest
    argocd-image-updater.argoproj.io/write-back-method: git:push
    argocd-image-updater.argoproj.io/git-branch: main
    argocd-image-updater.argoproj.io/web.force-update: "true"
spec:
  ...

Image Updater는 주기적으로 레지스트리의 태그를 확인한 후 YAML 내 이미지 태그를 자동으로 수정하고, Git에 푸시합니다.



🛠 GitHub Actions: CI → 이미지 푸시

name: Build & Push

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - run: |
          docker build -t ghcr.io/myorg/webapp:${{ github.sha }} .
          echo ${{ secrets.GITHUB_TOKEN }} | docker login ghcr.io -u USERNAME --password-stdin
          docker push ghcr.io/myorg/webapp:${{ github.sha }}

→ github.sha를 태그로 활용하면 고유 이미지 추적 가능



🔁 Argo CD 자동 동기화 설정

Argo CD Application에 다음 설정을 추가하면 커밋 즉시 배포됩니다:

syncPolicy:
  automated:
    prune: true
    selfHeal: true

• prune: 삭제된 리소스를 자동 정리
• selfHeal: 클러스터 상태와 Git이 다를 경우 자동 복구



📦 Helm 사용자용 Image Updater 설정

argocd-image-updater.argoproj.io/image-list: web=ghcr.io/myorg/webapp
argocd-image-updater.argoproj.io/web.helm.image-name: image.repository
argocd-image-updater.argoproj.io/web.helm.tag-name: image.tag

Helm chart 내 values.yaml에서 image.repository, image.tag 항목을 자동 업데이트하도록 구성 가능



📊 운영 시 고려할 설정들

항목 설정 예 설명
Tag SemVer allow-tags: '^v[0-9]+\.[0-9]+\.[0-9]+$' 안정된 SemVer만 사용
주기 설정 interval: 30s 너무 짧으면 Git 과부하, 1~5분 권장
Git 인증 GitHub PAT / SSH Key Git push에 필요한 권한
Write-back 방식 git:push vs git:pull-request 자동 커밋 또는 PR 방식 선택 가능
Slack 알림 연동 Webhook / Argo Notifications 배포 성공/실패 통합 모니터링 가능




💡 고급 운영 팁
• Argo Rollouts + Image Updater 조합으로 Canary 배포까지 자동화
• GitOps 리포지토리를 infra / services 등 논리적 경계로 분리
• PR 기반 업데이트 시 GitHub 자동 머지 조건과 통합
• 패치 로그에 변경 사유 자동 주입: feat: update webapp to $newTag
• Slack과 Argo CD Notifications 연동하여 배포 이벤트 감시



🚀 결론

Argo CD Image Updater는 GitOps를 보다 실질적인 “DevOps 자동화”로 진화시킵니다.
Git 커밋 없이도, 운영자 개입 없이도 → 새 이미지가 Git에 반영되고 곧바로 배포까지 이어지는, 완전 자율 배포 파이프라인을 구축할 수 있습니다.

이 구조는 단순한 YAML 업데이트 자동화가 아닌:
• 배포 속도 최소화
• 커밋 품질 관리
• Canary · Rollback과의 통합

등과 함께 SRE 수준의 실시간 운영 대응력까지 갖추는 전략적 구조입니다.


반응형