Argo CD의 모든 것: 쿠버네티스를 위한 최고의 GitOps 도구
쿠버네티스 환경에서 애플리케이션을 효율적으로 배포하고 관리하는 것은 현대 DevOps의 핵심 과제입니다. 이러한 과제를 해결하기 위해 등장한 Argo CD는 GitOps 기반의 지속적 배포(Continuous Delivery) 도구로, 많은 기업과 개발자들에게 사랑받고 있습니다. 이 글에서는 Argo CD의 개념부터 아키텍처, 설치 방법, 주요 기능, 그리고 실제 활용 사례까지 상세히 알아보겠습니다.
Argo CD란 무엇인가?
Argo CD는 쿠버네티스를 위한 선언적 지속적 배포(Continuous Delivery) 도구로, GitOps 원칙을 기반으로 설계되었습니다[^3]. CNCF(Cloud Native Computing Foundation)의 Graduated 프로젝트인 Argo의 일부로, 쿠버네티스 네이티브 환경에서 워크플로우와 클러스터를 관리하고 GitOps를 구현할 수 있게 해주는 도구입니다[^3].
GitOps란?
GitOps는 Git 리포지토리를 단일 진실 공급원(Single Source of Truth)으로 사용하여 인프라를 코드로 제공하는 방법론입니다[^3][^16]. 이 접근 방식은 인프라와 애플리케이션 구성을 버전화하고, 선언적으로 표시하며, 자동으로 가져오는 것을 핵심으로 합니다[^16].
Argo CD의 핵심 개념
Argo CD는 쿠버네티스 컨트롤러로 구현되어 있으며, 애플리케이션을 지속적으로 모니터링하여 실제(live) 상태와 Git 리포지토리에 선언된 원하는(desired) 상태를 비교합니다[^3]. 만약 배포된 애플리케이션의 상태가 Git에 정의된 상태와 다르다면, Argo CD는 이를 OutOfSync
상태로 표시하고 사용자가 수동으로 또는 자동으로 동기화할 수 있도록 합니다[^3].
Argo CD의 아키텍처
Argo CD는 여러 컴포넌트로 구성된 마이크로서비스 형태로 제공됩니다[^1]. 각 컴포넌트는 특정 기능을 담당하며, 전체적으로 GitOps 기반의 CD 파이프라인을 구축합니다.
주요 컴포넌트
- API Server[^3]:
- 애플리케이션 관리 및 상태 보고
- 동기화, 롤백, 사용자 정의 액션 수행
- 쿠버네티스 자격 증명을 시크릿으로 저장
- RBAC(Role-Based Access Control)을 통한 접근 제어
- Git 웹훅 이벤트의 리스너 역할
- UI나 CLI를 통한 REST/gRPC 요청 처리
- Repository Server[^3]:
- Git 리포지토리 URL 관리
- 리비전(브랜치, 커밋, 태그) 관리
- 애플리케이션 경로 관리
- Helm, Kustomize 등과 같은 템플릿 도구 지원
- Application Controller[^3]:
- Git 리포지토리와 현재 배포된 애플리케이션을 비교하여 상태 모니터링
- 사용자 정의 액션(PreSync, Sync, PostSync 훅) 라이프사이클 관리
Argo CD Application
Argo CD Application은 매니페스트가 저장된 Git 또는 Helm 차트와 동기화할 쿠버네티스 클러스터 정보를 저장하는 Argo CD만의 커스텀 리소스(CR)입니다[^1]. Application에는 크게 source
와 destination
이 저장되어 있습니다:
source
: Git 리포지토리 또는 Helm 차트 정보destination
: 동기화할 쿠버네티스 클러스터 정보
Argo CD 설치하기
Argo CD를 설치하는 방법은 크게 두 가지가 있습니다: 매니페스트 파일을 사용하는 방법과 Helm을 사용하는 방법입니다[^14]. 여기서는 매니페스트 파일을 사용한 설치 방법을 살펴보겠습니다.
사전 요구사항
- 쿠버네티스 클러스터가 설치되어 있어야 합니다[^4].
- kubectl CLI가 설치되어 있어야 합니다[^4].
설치 단계
- 네임스페이스 생성:
kubectl create namespace argocd
- Argo CD 매니페스트 파일 적용:
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
- 외부 접근 설정:
Argo CD는 기본적으로 외부에서 접근할 수 없으므로, 다음과 같은 방법 중 하나를 선택하여 외부 접근을 설정해야 합니다[^4][^5]:- 서비스 타입을 LoadBalancer로 변경:
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'
- NodePort로 설정
- Ingress 설정
- Port Forwarding 설정:
kubectl port-forward svc/argocd-server -n argocd 8080:443
- 초기 비밀번호 확인:
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d
또는
argocd admin initial-password -n argocd
- Argo CD CLI 설치 (선택사항):
# macOS
brew install argocd
# Linux
curl -sSL -o argocd-linux-amd64 https://github.com/argoproj/argo-cd/releases/latest/download/argocd-linux-amd64
sudo install -m 555 argocd-linux-amd64 /usr/local/bin/argocd
rm argocd-linux-amd64
Argo CD의 주요 기능
Argo CD는 다양한 기능을 제공하여 쿠버네티스 환경에서의 애플리케이션 배포와 관리를 간소화합니다.
1. 자동 동기화
Git 리포지토리에 정의된 쿠버네티스 자원 상태와 실제 클러스터의 상태를 동기화하여 관리의 일관성을 보장합니다[^13]. 변경 사항이 Git에 커밋되면 Argo CD는 이를 감지하고 자동으로 클러스터에 반영합니다[^7].
2. 다양한 매니페스트 형식 지원
Argo CD는 다양한 형식의 쿠버네티스 매니페스트를 지원합니다[^1][^9]:
- 일반적인 JSON/YAML 파일
- Kustomize
- Helm 차트
- 기타 템플릿 도구
3. 멀티 클러스터 지원
Argo CD는 여러 쿠버네티스 클러스터를 관리할 수 있어, 중앙에서 여러 환경의 애플리케이션을 배포하고 관리할 수 있습니다[^3][^9]. CLI를 통해 쉽게 클러스터를 추가할 수 있습니다:
argocd cluster add <CLUSTER_NAME>
4. 시각화 UI
Argo CD는 애플리케이션의 배포 상태를 시각적으로 확인할 수 있는 웹 UI를 제공합니다[^12]. 이를 통해 애플리케이션의 실시간 상태, 동기화 상태, 헬스 상태를 한눈에 파악할 수 있습니다.
5. 보안 기능
Argo CD는 다양한 보안 기능을 제공합니다[^9]:
- SSO 통합
- 멀티테넌시와 RBAC을 통한 인증
- 시크릿을 통한 쿠버네티스 자격 증명 저장
- 애플리케이션 이벤트 및 API 호출에 대한 감사 기능
6. 다양한 배포 전략 지원
Argo CD는 Blue/Green 배포, Canary 배포 등 다양한 배포 전략을 지원하여 안전하고 효율적인 애플리케이션 업데이트를 가능하게 합니다[^3][^7].
7. 웹훅 통합
GitHub, GitLab, Bitbucket 등의 Git 서비스와 웹훅을 통합하여 코드 변경 시 자동으로 배포 프로세스를 트리거할 수 있습니다[^9].
8. 애플리케이션 헬스 체크
Argo CD는 배포된 애플리케이션의 상태를 지속적으로 모니터링하고, 다음과 같은 상태로 표시합니다[^3]:
- Unknown
- Missing
- Degraded
- Healthy
- Progessing
- Suspended
Argo CD의 실제 활용 사례
Argo CD는 다양한 기업과 조직에서 쿠버네티스 애플리케이션의 배포와 관리를 위해 활용되고 있습니다.
기업 사례
국내외 여러 기업들이 Argo CD를 활용하고 있습니다[^6]:
- 핀다
- 뤼이드
- 당근
- 버즈빌
- 쏘카
- 메쉬코리아
- Uber
- Carbon
- Gartner
- Alasco
- KubeSphere
활용 시나리오
- 구성 관리:
여러 클러스터에서 애플리케이션 구성을 관리하고 동기화하는 데 활용됩니다[^17]. - 암호 관리자와 동기화:
쿠버네티스 시크릿을 Vault와 같은 암호 관리자와 지속적으로 동기화합니다[^16]. - 구성 드리프트 감지:
클러스터 구성이 Git 리포지토리와 동기화되지 않을 때 경고를 감지하고 표시합니다[^16]. - 단일 레지스트리 내 여러 클러스터:
단일 Git 리포지토리에서 여러 쿠버네티스 클러스터 구성을 정의하고 클러스터에 선택적으로 적용합니다[^16]. - 클러스터 구성 계층 구조:
Git 리포지토리에 클러스터 구성의 계층 구조를 정의하여 상속을 포함한 단계, 프로덕션, 애플리케이션 포트폴리오 등을 관리합니다[^16].
Argo CD의 장점
Argo CD는 다양한 장점을 제공하여 쿠버네티스 환경에서의 애플리케이션 배포와 관리를 간소화합니다.
1. Git 중심의 배포 관리
Argo CD의 가장 큰 강점은 Git을 기준으로 모든 배포 상태를 관리한다는 점입니다[^7]. 모든 애플리케이션의 상태와 배포 과정이 Git에 기록되어 있으므로, 버전 관리가 매우 용이하며 배포 이력을 추적할 수 있습니다.
2. 자동화된 동기화
GitOps 원칙을 바탕으로 한 자동 동기화 기능은 배포와 관리를 매우 간편하게 만들어 줍니다[^7]. Git에 변경 사항이 발생하면 Argo CD는 이를 감지하여 자동으로 쿠버네티스 클러스터를 업데이트합니다.
3. 다양한 배포 전략 지원
Argo CD는 Canary 배포, Blue-Green 배포 등 다양한 배포 전략을 지원합니다[^7]. 이를 통해 애플리케이션의 새로운 버전을 점진적으로 배포하고 모니터링할 수 있습니다.
4. 확장성과 유연성
Argo CD는 대규모 쿠버네티스 클러스터에서도 유연하게 확장할 수 있는 아키텍처를 제공합니다[^7]. 여러 클러스터에서 동시에 애플리케이션을 관리할 수 있으며, 각 클러스터마다 다른 설정을 적용할 수 있습니다.
5. 강력한 보안성
Argo CD는 Git 저장소를 기준으로 모든 애플리케이션 상태를 관리하기 때문에, 누가 언제 어떤 상태를 배포했는지 추적할 수 있습니다[^7]. 이를 통해 운영 환경에서 발생할 수 있는 배포 실수나 보안 사고를 미연에 방지할 수 있습니다.
결론
Argo CD는 쿠버네티스 환경에서 GitOps 기반의 지속적 배포를 구현하기 위한 강력한 도구입니다. Git 리포지토리를 단일 진실 공급원으로 사용하여 애플리케이션의 상태를 관리하고, 자동화된 동기화를 통해 배포 프로세스를 간소화합니다.
다양한 기능과 장점을 제공하는 Argo CD는 현대 DevOps 환경에서 쿠버네티스 애플리케이션의 배포와 관리를 위한 필수 도구로 자리매김하고 있습니다. 특히 대규모 클러스터와 복잡한 애플리케이션 환경에서 그 가치를 더욱 발휘합니다.
쿠버네티스를 사용하는 조직이라면 Argo CD를 도입하여 GitOps 방식의 지속적 배포를 구현하고, 개발자와 운영팀 간의 협업을 강화하며, 안정적이고 효율적인 애플리케이션 배포 파이프라인을 구축해보세요.
[^8]: https://kylo8.tistory.com/entry/Argo-Argo-CD란-개념-및-Argo-CD-설치-방법
[^12]: https://jennifersoft.com/ko/blog/kubernetes/2023-08-30-jennifer-kubernetes-3/
[^13]: https://blog.blux.ai/argo-cd와-깃옵스를-활용한-블럭스의-쿠버네티스-자원-관리-노하우-41764
[^16]: https://www.redhat.com/ko/topics/devops/what-is-argocd
[^17]: https://itsjustblog.com/argocd를-통한-배포-효율성-극대화-주요-기능-실제-사용-사/
[^18]: https://www.semanticscholar.org/paper/99df02bdcf2ae3c21135792e255666e43512a596
[^20]: https://www.redhat.com/ko/topics/devops/what-is-argocd
[^24]: https://devocean.sk.com/blog/techBoardDetail.do?ID=164752\&boardType=techBlog
[^26]: https://itsjustblog.com/argocd를-통한-배포-효율성-극대화-주요-기능-실제-사용-사/
[^30]: https://findstar.pe.kr/2023/06/04/argocd-installation/
[^31]: https://kylo8.tistory.com/entry/Argo-Argo-CD-설치-방법-install
[^33]: https://jennifersoft.com/ko/blog/kubernetes/2023-08-30-jennifer-kubernetes-3/
[^34]: https://www.infograb.net/a0d49393-b97a-4512-8552-6a7e3b8cbfe3
[^36]: https://basketdeveloper.tistory.com/entry/Kubernetes-ArgoCD-설치-해보기with-Minikube
[^39]: https://realyun99.tistory.com/entry/Kubernetes-ArgoCD-설치
[^42]: https://beer1.tistory.com/49
[^46]: https://techblog.uplus.co.kr/통합-argocd-구축기-3bd300074cb5
[^48]: https://tech.cloudmt.co.kr/2023/02/27/juunini-why-argo/
[^49]: https://www.semanticscholar.org/paper/951197deb365afa409f1ee404a7a2b037625075b
[^50]: https://www.semanticscholar.org/paper/80f60148130fe0bdbf3aba340c401c643c7ae274
[^51]: https://www.semanticscholar.org/paper/dea7f38459121589107abc8ed183609ccc8ebf1b
[^52]: https://www.semanticscholar.org/paper/a670f0667ef5d2cdf5459ecd54e445a98128bd1d
[^53]: https://www.semanticscholar.org/paper/269f4289375eef5022b78e33123b4535218a0dfa
[^54]: https://www.semanticscholar.org/paper/33d4b314774f628357f5670e4d0b89609e3792ef
[^55]: https://www.semanticscholar.org/paper/4fd8e2816d3f0de9ce4d90883d405616f31fdc44
[^56]: https://www.semanticscholar.org/paper/75424f94a27cf376d76e0d370dcd00e919968ee6
[^57]: https://www.semanticscholar.org/paper/3781bcf596addc29ee8f6197093cce16e374eac2
[^58]: https://www.semanticscholar.org/paper/158aaf41c14a7755ac9982e16523abc1241ab312
[^59]: https://devocean.sk.com/blog/techBoardDetail.do?ID=166251\&boardType=techBlog
'프로그래밍 > 일반' 카테고리의 다른 글
다양한 해시 알고리즘의 장단점과 용도 (0) | 2025.03.07 |
---|---|
gRPC란? (0) | 2025.02.20 |
gRPC: 현대적인 분산 시스템을 위한 강력한 RPC 프레임워크 (0) | 2025.02.20 |
k6: 강력하고 유연한 성능 테스트 도구 (0) | 2025.02.20 |