개요
이 문서는 하나의 ArgoCD 서버(com 클러스터)를 통해 여러 AKS 클러스터(dev, prod)에 GitOps 방식으로 애플리케이션을 자동 배포하는 환경을 구축하는 과정을 설명합니다.
목표
- com 클러스터: ArgoCD 서버를 호스팅하는 중심 클러스터
- dev 클러스터: 개발 환경 배포 대상
- prod 클러스터: 운영 환경 배포 대상
- GitOps 기반 자동화: Git 저장소 변경 시 자동으로 각 클러스터에 배포
아키텍처

설정 단계
1. ArgoCD 설치 (com 클러스터)
- argocd 네임스페이스에 Helm으로 배포
- agentpool: infrapools 노드에 스케줄링
- cluster-secrets.yaml에 다른 클러스터 인증정보를 설정
2. 클러스터 자격증명 수집
- Dev/Prod 클러스터에 argocd-manager 서비스계정 생성
- bearerToken 및 ca.crt 추출
- Secret 형태로 com 클러스터에 등록
3. Git 저장소 등록
apiVersion: v1
kind: Secret
metadata:
name: helm-kustomize-techtf
namespace: argocd
type: Opaque
stringData:
url: https://github.com/<username>/helm-kustomize-techtf.git
username: <username>
password: <password>
4. ApplicationSet 설정
- applicationsets-dev.yaml, applicationsets-prod.yaml 파일 생성
- 클러스터/애플리케이션 매트릭스 방식으로 구성
- CreateNamespace, automated sync, self-heal, prune 설정 포함
5. dev/prod 클러스터의 ArgoCD 비활성화
- dev/prd 클러스터의 argocd/kustomization.yaml은 주석 처리하거나 제거
배포 절차
# com 클러스터로 전환
kubectl config use-context aks-techtf-com-01-admin
# ArgoCD 설치 및 설정
kubectl apply -k clusters/aks-techtf-com-01/argocd/
# 클러스터 인증 정보 적용
kubectl apply -f clusters/aks-techtf-com-01/argocd/cluster-secrets.yaml
# ApplicationSet 적용
kubectl apply -f clusters/aks-techtf-com-01/argocd/applicationsets-dev.yaml
kubectl apply -f clusters/aks-techtf-com-01/argocd/applicationsets-prod.yaml

GitOps Workflow
- Git 저장소 변경
- ArgoCD가 변경 감지
- ApplicationSet에서 클러스터별 Applications 생성
- 대상 클러스터에 자동 동기화 (자동 생성 + Self-Heal + Prune)
Git 저장소에 정의된 applicationsets-dev.yaml, applicationsets-prod.yaml을 통해 ArgoCD가 자동으로 클러스터별 Application을 생성하고 동기화한 화면입니다.


- prometheus, logging 각각의 애플리케이션이 dev/prd 클러스터로 자동 배포되었고, 상태는 모두 Synced + Healthy 입니다.
기존에는 dev, prod 클러스터마다 ArgoCD를 따로 관리하다 보니 운영 상 복잡도와 관리 비용이 높아졌습니다. 이번 구성에서는 하나의 ArgoCD 서버(com 클러스터)에서 모든 환경(dev, prod)을 GitOps 방식으로 통합 배포하도록 구성함으로써 다음과 같은 효과를 얻을 수 있었습니다.
- 중앙 집중형 배포 관리: 클러스터별 ArgoCD 중복 제거
- 환경 분리 유지 + 통합 제어: 환경별 ApplicationSet으로 관리
- Git 기반 완전 자동화: 개발-운영 간 일관성 확보
- 확장성 향상: 향후 staging, qa 등의 클러스터 추가도 용이
무엇보다도, Git 저장소만으로 클러스터 전체를 운영할 수 있다는 점에서 GitOps 방식의 실용성을 다시금 체감할 수 있었습니다. 작업이 많아 미뤄왔던 효율성 개선 과제를 하나씩 해결해나가며, 보다 편리하고 안정적인 운영 구조로 전환해가고 있습니다.
'Kubernetes' 카테고리의 다른 글
| kubeadm 기반 바닐라 Kubernetes 클러스터를 Terraform + Cloud-init 자동화로 설치/운영 (2) | 2025.08.12 |
|---|---|
| Kubernetes에서 외부로부터 들어오는 요청의 Source IP 파악하기 (0) | 2025.07.30 |
| KubeVirt VM 로그 수집 및 시각화 구성 (Promtail → Loki → Grafana) (1) | 2025.07.02 |
| FastAPI 애플리케이션을 AKS에 배포하고 Prometheus + Grafana로 모니터링 하기 (0) | 2025.06.09 |
| Spring Boot 애플리케이션을 Azure AKS에 배포하고 Prometheus + Grafana로 모니터링하기 (3) | 2025.06.05 |