ArgoCD는 GitOps 기반의 Kubernetes 배포 관리 도구입니다. Git 저장소를 **싱글 소스 오브 트루스(Single Source of Truth)**로 활용하여 자동화된 배포 및 지속적인 동기화를 제공합니다.
ArgoCD의 핵심 원리
Git의 파일, 구조, 코드가 변경되면 → ArgoCD가 이를 감지하고 자동으로 Kubernetes에 배포
즉, **Git이 Kubernetes 배포의 기준(Single Source of Truth)이 되며, Git 변경 사항이 자동으로 반영되는 방식(GitOps)**입니다.
ArgoCD를 사용하는 이유
GitOps 방식으로 Kubernetes 애플리케이션을 관리
- 기존 CI/CD 방식과 달리 Git을 실시간으로 Kubernetes 배포와 동기화합니다.
- Git 저장소의 상태가 실제 Kubernetes 상태와 다르면 자동으로 조정하여 배포를 안정적으로 유지.
자동 배포 및 동기화 (Self-Healing)
- Kubernetes 클러스터에서 배포 상태를 자동 감지 및 수정합니다.
- 예를 들어, 누군가 수동으로 변경을 가해도 ArgoCD가 Git 상태로 복원하여 일관성 유지.
Kubernetes 환경에 최적화된 UI & CLI 지원
- ArgoCD는 웹 UI와 **CLI(Command Line Interface)**를 제공하여 손쉽게 애플리케이션을 배포 및 관리할 수 있음.
ArgoCD를 사용하면 좋은 경우
✅ Kubernetes에서 GitOps를 적용하고 싶은 경우
✅ 배포의 일관성과 신뢰성을 높이고 싶은 경우
✅ CI/CD에서 Kubernetes 배포를 더 자동화하고 싶은 경우
✅ 운영자가 직접 배포하는 대신 Git에서 관리하고 싶은 경우
✅ 멀티클러스터 환경에서 애플리케이션을 배포해야 하는 경우
Install Argo CD
kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml
설명:
- 첫 번째 명령어: argocd 네임스페이스 생성
- 두 번째 명령어: ArgoCD 관련 리소스(파드, 서비스 등) 설치
이제 kubectl get pods -n argocd 로 설치 상태 확인
kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'
- kubectl patch svc argocd-server -n argocd → ArgoCD 서버의 서비스(argocd-server)를 수정
- -p '{"spec": {"type": "LoadBalancer"}}' → 서비스 타입을 LoadBalancer로 변경
왜 필요한가?
- ArgoCD 설치 후 기본 서비스 타입이 ClusterIP라 내부에서만 접근 가능
- LoadBalancer로 변경하면 **외부에서 접근 가능한 IP(External IP)**가 할당됨
- 이후 웹 UI(ArgoCD 대시보드)에 브라우저로 접속 가능
ArgoCD CLI를 설치해야 하는 이유
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
ArgoCD CLI를 설치해야 하는 이유
ArgoCD CLI는 터미널에서 ArgoCD를 쉽게 관리할 수 있도록 도와주는 도구입니다.
설치하는 이유:
- GitOps 자동화 → 터미널에서 argocd app sync 명령어로 애플리케이션 동기화
- ArgoCD 서버 제어 → 로그인, 앱 배포, 롤백 등을 CLI에서 직접 실행 가능
- 자동화 스크립트 사용 → CI/CD 파이프라인에서 활용 가능
- 빠른 문제 해결 → 웹 UI 없이 CLI로 직접 상태 확인 및 디버깅 가능
즉, ArgoCD를 효과적으로 운영하고 배포 자동화를 하기 위해 CLI가 필요합니다
ArgoCD 초기 관리자 비밀번호 가져오기
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo
이 명령어는 ArgoCD의 초기 관리자(admin) 계정의 비밀번호를 가져오는 역할을 합니다.
🔹 세부 설명:
- kubectl -n argocd get secret argocd-initial-admin-secret
→ argocd 네임스페이스에서 초기 관리자 비밀번호가 저장된 시크릿(Secret) 조회 - -o jsonpath="{.data.password}"
→ JSON 형식에서 비밀번호 데이터만 추출 - | base64 -d
→ 비밀번호가 Base64로 인코딩되어 있어 디코딩(복호화) - ; echo
→ 줄바꿈 추가하여 보기 편하게 출력
결과: admin 계정의 초기 비밀번호가 출력됨 → ArgoCD UI 또는 CLI 로그인 시 사용!
ArgoCD 레포지토리 인증 및 추가 과정
argocd login <IP>
cat > key.json
ls | grep key.json
argocd repo add asia-northeast3-docker.pkg.dev --type helm --name registry --enable-oci --username _json_key --password "$(cat key.json)"
- ArgoCD 서버에 로그인
- <IP>는 ArgoCD argocd-server의 EXTERNAL-IP (예: argocd login 35.226.XX.XX)
- 로그인 후 ArgoCD CLI 사용 가능
- Google Cloud의 서비스 계정 키(JSON)를 생성하여 입력
- 입력 후 Ctrl + D를 눌러 저장
- 이 파일을 사용하여 ArgoCD가 **GCP Artifact Registry (Helm Repo)**에 인증
- 현재 디렉토리에서 key.json 파일이 존재하는지 확인
ArgoCD에 GCP Artifact Registry(Helm) 추가
- GCP **Artifact Registry(Helm Repository)**를 ArgoCD에 추가
- asia-northeast3-docker.pkg.dev → GCP Artifact Registry 주소
- --type helm → Helm 차트 저장소 추가
- --enable-oci → OCI(Helm Registry) 사용
- --username _json_key → GCP 서비스 계정 인증 방식 사용
- --password "$(cat key.json)" → key.json의 내용을 비밀번호로 사용하여 인증
이 명령어들은 ArgoCD에서 GCP Artifact Registry(Helm) 인증 및 저장소 추가를 위한 과정
Helm 애플리케이션 추가 과정
- ArgoCD에서 Helm Chart를 사용하여 Kubernetes에 애플리케이션을 배포하는 과정
- Git 또는 Helm Registry에서 가져온 Helm Chart를 기반으로 ArgoCD에서 관리
- CREATE 버튼을 누르면 ArgoCD가 Helm Chart를 배포
이제 Sync를 실행하면 ArgoCD가 Helm을 통해 배포를 진행
Helm을 활용한 ArgoCD 애플리케이션 추가 완료
- nlp-service 애플리케이션이 ArgoCD를 통해 Helm Chart로 추가됨
- Helm 저장소: asia-northeast3-docker.pkg.dev
- 사용된 Chart: mlops-project-447713/helm/chart
- 버전: 0.1.0
- 네임스페이스: api
ArgoCD에서 Helm을 통해 애플리케이션을 추가한 상태이며, 배포 구성이 완료됨
SYNC를 실행하면 Helm Chart가 Kubernetes 클러스터에 반영됨
'시스템 개발 및 관리 > 이커머스 효율화: NLP 모델 적용' 카테고리의 다른 글
Setup.py (0) | 2025.03.03 |
---|---|
[Kubernetes 배포 환경 구축] Kubernetes 생성 및 실행 (0) | 2025.03.02 |
[Kubernetes 배포 환경 구축] Helm 생성 (0) | 2025.03.01 |
[Kubernetes 배포 환경 구축] GCP Docker 이미지 빌드 (0) | 2025.03.01 |
[Kubernetes 배포 환경 구축] Kubernetes 클러스터 생성 (0) | 2025.03.01 |