티스토리 뷰

IT/Devops

[cicd] 4주차 - Argo CD

Hayley Shim 2025. 11. 9. 00:22

안녕하세요, CICD 학습을 위해 CloudNetaStudy 스터디 모임을 통해 진행한 내용을 정리하였습니다.

 

4주차는 [Argo CD] 1~3장(101p) - Argo CD 시작하기에 대해 중점적으로 학습합니다.

 

[실습환경]

# kind k8s 배포
kind create cluster --name myk8s --image kindest/node:v1.32.8 --config - <<EOF
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  extraPortMappings:
  - containerPort: 30000
    hostPort: 30000
  - containerPort: 30001
    hostPort: 30001
  - containerPort: 30002
    hostPort: 30002
  - containerPort: 30003
    hostPort: 30003
EOF

# kube-ops-view
helm repo add geek-cookbook https://geek-cookbook.github.io/charts/
helm install kube-ops-view geek-cookbook/kube-ops-view --version 1.2.2 --set service.main.type=NodePort,service.main.ports.http.nodePort=30001 --set env.TZ="Asia/Seoul" --namespace kube-system

# kube-ops-view 접속 URL 확인 (1.5 , 2 배율)
open "http://127.0.0.1:30001/#scale=1.5"
open "http://127.0.0.1:30001/#scale=2"

 

  • 깃옵스의 정의는 정말 다양합니다. 풀 리퀘스트 PR, Pull Request 를 통한 운영으로 정의하기도 하고, 개발 관행(버전 제어, 협업, 규정 준수, CI/CD)을 인프라 자동화에 적용하는 것으로 정의하기도 합니다. - Link
  • 가장 중요한 정의는 CNCF의 Application Delivery TAG에 속한 그룹인 깃옵스 워킹 그룹 GitOps Working Group 에서 정의한 것입니다. - Home

 

[ArgoCD]

1. Argo CD란 무엇인가?

Argo CD는 선언적(Declarative) GitOps 접근 방식을 따르는 쿠버네티스 지속적 배포(CD) 도구입니다.

  • 핵심 원칙: 애플리케이션의 의도한 상태 (Target State)를 Git 리포지터리에 보관하고, Argo CD 컨트롤러가 이 상태를 쿠버네티스 클러스터의 현재 상태 (Live State)와 지속적으로 일치시키도록 자동으로 조정(Reconciliation)합니다.
  • 배경 문제 해결: 기존의 개발/테스트/운영 환경 분리 시 발생할 수 있는 구성 드리프트(Configuration Drift) 문제를 해결하고, 배포 이력을 Git에서 단일 소스(Source of Truth)로 관리하여 복잡성을 줄입니다.
  • 사용 사례:
    • 배포 자동화: Git 커밋이나 수동 동기화 트리거 후, Argo CD 컨트롤러가 클러스터를 Git의 의도한 상태로 자동으로 푸시(Push)합니다.
    • 관찰 가능성(Observability): UI/CLI를 통해 애플리케이션 상태와 동기화 여부를 식별하고 알림 엔진을 제공합니다.
    • 멀티 테넌시(Multi-tenancy): RBAC 정책을 사용해 여러 쿠버네티스 클러스터를 관리하고 배포할 수 있습니다.

 

2. 핵심 개념 및 용어

용어 정의
타깃 상태
(Target State)
애플리케이션의 의도한 상태. Git 리포지터리(Source of Truth)에 정의된 내용입니다.
현재 상태
(Live State)
애플리케이션의 현재 상태. 쿠버네티스 클러스터에 실제로 배포된 상태입니다.
조정
(Reconciliation)
Argo CD가 Git의 타깃 상태와 클러스터의 현재 상태를 비교하고 일치시키는 과정입니다.
동기화 상태
(Sync Status)
현재 상태와 타깃 상태가 일치하는지 여부입니다. 불일치할 경우 OutOfSync로 표시됩니다.
동기화
(Sync)
불일치 상태(OutOfSync)를 해결하기 위해 쿠버네티스 클러스터에 변경 사항을 적용하여 현재 상태타깃 상태로 만드는 작업입니다.
애플리케이션 소스 타입 애플리케이션 매니페스트를 구축하는 도구 (예: Helm, Kustomize, jsonnet 등). Argo CD는 kubectl apply를 사용하여 선언적 배포를 수행합니다.
Health Status 애플리케이션이 요청을 받을 수 있고 운영 중인 상태인지를 나타냅니다.

 

3. Argo CD 아키텍처 및 구성 요소

Argo CD는 쿠버네티스 컨트롤러 모델을 기반으로 작동하며, 클러스터의 상태를 관찰하고 의도한 상태로 유지하려고 합니다.

핵심 구성 요소

  1. API 서버:
    • 웹 UI, CLI, CI/CD 시스템 등의 상호 작용을 위한 관문입니다.
    • 애플리케이션 관리, 상태 보고, 트리거 작업, Git/클러스터 관리, 인증(SSO), RBAC 정책 강화 역할을 합니다.
  2. 리포지터리 서버 (Repository Server):
    • 애플리케이션 매니페스트가 있는 Git 리포지터리의 로컬 캐시를 유지합니다.
    • 다른 Argo CD 컴포넌트의 요청에 따라 리포지터리 URL, 버전, 경로, 템플릿 설정 등을 기반으로 쿠버네티스 매니페스트를 가져와 제공합니다.
  3. 애플리케이션 컨트롤러 (Application Controller):
    • Argo CD의 핵심입니다. 애플리케이션의 현재 상태를 지속적으로 확인하고 Git의 의도한 상태와 비교합니다.
    • 상태가 동기화되지 않은 경우, 현재 상태를 의도한 상태와 일치시키려고 시도합니다 (조정/동기화).
    • 기본적으로 3분마다 Git 리포지터리를 확인합니다. (지연 방지를 위해 수동 UI/CLI 동기화 또는 웹훅을 설정할 수 있습니다.)

4. Argo CD 핵심 오브젝트 (CRD)

Argo CD는 자체적인 쿠버네티스 CRD(Custom Resource Definition)를 사용하여 설정을 선언적으로 관리합니다.

CRD/리소스 설명
Application 실제 쿠버네티스 클러스터에 배포하려는 애플리케이션의 인스턴스를 정의합니다.
(Git 소스, 대상 클러스터/네임스페이스 등 명시)
AppProject 관련 애플리케이션을 논리적으로 그룹화하고, 배포할 수 있는 소스 리포지터리대상 클러스터/네임스페이스를 제한하는 정책(Whitelist)을 정의합니다.
Repository Secret Argo CD가 프라이빗 Git 리포지터리에 접근하기 위한 자격 증명 (HTTPS 토큰 또는 SSH 키)을 담는 쿠버네티스 Secret입니다. (argocd.argoproj.io/secret-type: repository 레이블 사용)
Cluster Secret Argo CD가 다른 쿠버네티스 클러스터를 관리하고 배포하기 위한 접근 권한 (API 서버 주소, Bearer Token 등)을 담는 Secret입니다. (argocd.argoproj.io/secret-type: cluster 레이블 사용)

 

Argo CD 설치

#
kubectl create ns argocd
cat <<EOF > argocd-values.yaml
server:
  service:
    type: NodePort
    nodePortHttps: 30002
  extraArgs:
    - --insecure  # HTTPS 대신 HTTP 사용
EOF

# 설치 : Argo CD v3.1.9 , (참고) 책 버전 Argo CD v2.1 ~ v2.2
# https://github.com/argoproj/argo-helm/blob/main/charts/argo-cd/values.yaml
helm repo add argo https://argoproj.github.io/argo-helm
helm install argocd argo/argo-cd --version 9.0.5 -f argocd-values.yaml --namespace argocd

# 각 구성요소 확인
kubectl get-all -n argocd
kubectl get pod,svc,ep,secret,cm -n argocd

# crd 확인
kubectl get crd | grep argo


kubectl get appproject -n argocd -o yaml

# sa
kubectl get sa -n argocd
NAME                               SECRETS   AGE
argocd-application-controller      0         3m48s
argocd-applicationset-controller   0         3m48s
argocd-dex-server                  0         3m48s
argocd-notifications-controller    0         3m48s
argocd-redis-secret-init           0         3m52s
argocd-repo-server                 0         3m48s
argocd-server                      0         3m48s

# Summarize RBAC roles for subjects : ServiceAccount(default), User, Group
kubectl rolesum -h
kubectl rolesum aws-node -n kube-system    # sa
kubectl rolesum -k User system:kube-proxy  # user
kubectl rolesum -k Group system:masters    # group

kubectl rolesum -n argocd argocd-server
kubectl rolesum -n argocd argocd-application-controller
kubectl rolesum -n argocd argocd-applicationset-controller
kubectl rolesum -n argocd argocd-repo-server

kubectl rolesum -n argocd argocd-server

# 최초 접속 암호 확인
kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d ;echo

# Argo CD 웹 접속 주소 확인 : 초기 암호 입력 (admin 계정)
open "http://127.0.0.1:30002" # macOS
## Windows OS경우 직접 웹 브라우저에서 http://<Ubuntu Eth0 IP>:30002 접속

 

Argo CLI 설치

# mac
brew install argocd

# windows wsl2 ubuntu 
VERSION=$(curl -L -s https://raw.githubusercontent.com/argoproj/argo-cd/stable/VERSION)
curl -sSL -o argocd-linux-amd64 https://github.com/argoproj/argo-cd/releases/download/v$VERSION/argocd-linux-amd64
sudo install -m 555 argocd-linux-amd64 /usr/local/bin/argocd
rm argocd-linux-amd64

# (공통) 버전 정보 확인
argocd version --client

 

 

[Argo CD Autopilot]

Argo CD Autopilot은 GitOps 원칙을 Argo CD 자체의 설치 및 관리에 적용하여 초기 설정의 복잡성을 해결하고 전체 GitOps 환경의 수명 주기를 자동화하는 도구입니다.

 

1. 배경 및 해결하는 문제: "닭이 먼저냐, 달걀이 먼저냐" 문제

  • 문제: 일반적인 Argo CD 설치에서, Argo CD의 설정을 GitOps 방식으로 관리하려면, 그 설정을 적용할 Argo CD 애플리케이션이 먼저 존재해야 합니다. 즉, **"Argo CD를 설치/관리하기 위해 Argo CD가 필요하다"**는 순환 의존성 문제가 발생합니다.
  • 해결책: Argo CD Autopilot은 이 문제를 해결하고 Argo CD 설치 자체를 GitOps 방식으로 관리할 수 있게 해줍니다.

 

2. 주요 제공 기능

Argo CD Autopilot은 단순한 설치 도구를 넘어 전체 GitOps 환경을 관리하는 기능을 제공합니다.

  • 자동 부트스트랩 (Self-Management):
    • Argo CD 설치 자동화GitOps 환경 초기화를 수행합니다.
    • autopilot bootstrap 명령을 실행하면, Argo CD 설치 매니페스트를 대상 쿠버네티스 클러스터에 배포하고, 동시에 이 설치를 관리하는 Argo CD 애플리케이션 매니페스트를 GitOps 저장소의 특정 폴더에 커밋합니다.
    • 이 커밋이 완료되면, Argo CD는 스스로 자신의 배포를 감시하고 관리하게 됩니다 (자기 관리).
  • 환경 관리 및 승격 (Promotion):
    • Git 리포지터리를 짜여진 구조로 설정하여 새로운 서비스를 쉽게 추가합니다.
    • 애플리케이션을 여러 환경에서 업데이트 및 승격(Promote)할 수 있도록 지원합니다.
  • 재해 복구 지원 (Failover):
    • 재해 복구 시나리오를 대비하여 필요한 유틸리티와 애플리케이션에 대한 장애 조치(Failover) 클러스터를 부트스트랩할 수 있습니다.
  • 향후 지원 예정: 시크릿 암호화, Kustomize 외에 Helm과 같은 다른 템플릿 선택지 지원.

 

3. Argo CD Autopilot 아키텍처 (동작 방식)

Argo CD Autopilot은 부트스트랩 단계에서만 쿠버네티스 클러스터에 직접 접근하고, 그 이후에는 완전히 GitOps 기반으로 전환됩니다.

단계 동작 주체 상세 내용
1. 부트스트랩 autopilot bootstrap 명령 대상 쿠버네티스 클러스터에 Argo CD 매니페스트를 배포하고, GitOps 저장소에 Argo CD 애플리케이션 매니페스트를 커밋합니다.
2. 운영 Argo CD 커밋된 Git 리포지터리의 매니페스트를 감시하여 자기 자신의 설치를 포함한 모든 애플리케이션을 자동으로 클러스터에 적용합니다.
결론 사용자 부트스트랩 후에는 사용자가 클러스터에 직접 접근할 필요 없이, GitOps 리포지터리에만 접근하여 프로젝트 및 애플리케이션 매니페스트를 커밋하면 Argo CD가 모든 것을 자동 관리합니다.

 

argocd-autopilot CLI 설치 - Docs

# install : mac
brew install argocd-autopilot
argocd-autopilot version


# install : Linux and WSL (using curl)
VERSION=$(curl --silent "https://api.github.com/repos/argoproj-labs/argocd-autopilot/releases/latest" | grep '"tag_name"' | sed -E 's/.*"([^"]+)".*/\1/')
curl -L --output - https://github.com/argoproj-labs/argocd-autopilot/releases/download/"$VERSION"/argocd-autopilot-linux-amd64.tar.gz | tar zx
mv ./argocd-autopilot-* /usr/local/bin/argocd-autopilot
argocd-autopilot version


# Docker : you have to provide the .kube and .gitconfig directories as mounts to the running container
docker run \
  -v ~/.kube:/home/autopilot/.kube \
  -v ~/.gitconfig:/home/autopilot/.gitconfig \
  -it quay.io/argoprojlabs/argocd-autopilot <cmd> <flags>

 

Git 레포지토리 (GitOps 환경으로 사용할 레포지토리) & Git Token 준비

 

Getting Started : Bootstrap Argo-CD - Docs

# (참고) HA 모드 지원 You can bootstrap Argo CD in high-availability mode using the App Specifier:
argocd-autopilot repo bootstrap --app https://github.com/argoproj-labs/argocd-autopilot/manifests/ha

# 각자 자신의 Git 정보 사용하자
export GIT_TOKEN=<자신의 Git Token>
export GIT_REPO=<자신의 Repo>


# Bootstrap Argo-CD
argocd-autopilot repo bootstrap


# 신규 터미널
kubectl port-forward -n argocd svc/argocd-server 8080:80


# 기존터미널 : 설치 확인
kubectl get pod -n argocd

#
kubectl get appprojects.argoproj.io -n argocd
NAME      AGE
default   17m

kubectl get applications.argoproj.io -n argocd -owide

kubectl get applications.argoproj.io -n argocd autopilot-bootstrap -o yaml | kubectl neat | yq
  source:
    path: bootstrap
    repoURL: https://github.com/gasida/autopilot.git
...

kubectl get applications.argoproj.io -n argocd argo-cd -o yaml | kubectl neat | yq
  source:
    path: bootstrap/argo-cd
    repoURL: https://github.com/gasida/autopilot.git
...

kubectl get applications.argoproj.io -n argocd cluster-resources-in-cluster -o yaml | kubectl neat | yq
  source:
    path: bootstrap/cluster-resources/in-cluster
    repoURL: https://github.com/gasida/autopilot.git
...

kubectl get applications.argoproj.io -n argocd root -o yaml | kubectl neat | yq
  source:
    path: projects
    repoURL: https://github.com/gasida/autopilot.git
...

# applications 그룹핑을 app of apps 패턴이라고 부름 : 이 패턴은 다른 애플리케이션을 생성하는 메인 애플리케이션을 구축할 수 있다는 것.
# 애플리케이션 선언적 방식으로 애플리케이션 그룹을 관리할 수 있도록 해주고 구성과 배포를 함께 할 수 있음.
kubectl get applicationsets.argoproj.io -n argocd
NAME                AGE
cluster-resources   15m

kubectl get applicationsets.argoproj.io -n argocd -o yaml | k neat | yq
apiVersion: v1
items:
  - apiVersion: argoproj.io/v1alpha1
    kind: ApplicationSet
    metadata:
      annotations:
        argocd.argoproj.io/sync-wave: "0"
        argocd.argoproj.io/tracking-id: autopilot-bootstrap:argoproj.io/ApplicationSet:argocd/cluster-resources
      name: cluster-resources
      namespace: argocd
    spec:
      generators:
        - git:
            files:
              - path: bootstrap/cluster-resources/*.json
            repoURL: https://github.com/gasida/autopilot.git
            requeueAfterSeconds: 20
            revision: ""
            template:
              spec:
                project: ""
      syncPolicy:
        preserveResourcesOnDeletion: true
      template:
        metadata:
          labels:
            app.kubernetes.io/managed-by: argocd-autopilot
            app.kubernetes.io/name: cluster-resources-{{name}}
          name: cluster-resources-{{name}}
          namespace: argocd
        spec:
          destination:
            server: '{{server}}'
          ignoreDifferences:
            - group: argoproj.io
              jsonPointers:
                - /status
              kind: Application
          project: default
          source:
            path: bootstrap/cluster-resources/{{name}}
            repoURL: https://github.com/gasida/autopilot.git
          syncPolicy:
            automated:
              allowEmpty: true
              selfHeal: true

# 위 초기 접속 암호 확인 후 웹 접속 후 확인
http://localhost:8080

 

App of Apps 패턴과 Argo CD Autopilot 디렉터리 구조

1. App of Apps 패턴 (핵심 개념)

App of Apps (AoA) 패턴은 Argo CD의 Application 리소스를 사용하여 다른 Application 리소스를 관리하는 방식입니다.

  • 중앙 집중식 관리: 하나의 최상위(Root) Argo CD Application이 정의됩니다.
  • 하위 애플리케이션 제어: 이 최상위 Application은 GitOps 리포지터리의 특정 디렉터리를 참조하며, 이 디렉터리에는 배포할 모든 하위 애플리케이션 (Application CRD)의 매니페스트가 포함됩니다.
  • 장점:
    • 모든 배포를 단일 지점에서 확인하고 관리할 수 있습니다.
    • 새로운 애플리케이션이나 환경을 추가할 때, Git 리포지터리의 해당 폴더에 새로운 Application 매니페스트만 추가하면 최상위 앱이 이를 자동으로 배포합니다.

2. Argo CD Autopilot과 App of Apps 구조

Argo CD Autopilot은 App of Apps 패턴을 활용하여 초기 환경을 구성하고 Argo CD 자체를 관리합니다.

기본 디렉터리 구조

디렉터리 내용 역할
apps 애플리케이션 관련 리소스 정의 실제 비즈니스 애플리케이션의 매니페스트를 저장합니다.
bootstrap Argo CD 설치 파일 및 초기 설정 Argo CD의 자체 설치 및 핵심 클러스터 리소스를 정의합니다.
projects 환경별 프로젝트 정의 Argo CD AppProject CRD를 저장하여 RBAC 및 배포 대상을 정의합니다.

 

3. Autopilot에 의한 App of Apps 계층 구조

Autopilot은 GitOps 리포지터리 내부에 다음과 같은 3단계의 Application 계층 구조를 만듭니다.

Application 이름 참조 디렉터리 관리 대상 역할
autopilot-bootstrap bootstrap argo-cd, root 애플리케이션 최상위 앱 (Root of Roots): Argo CD 초기 설정 및 핵심 관리 앱(argo-cd, root)의 생명 주기를 관리합니다.
argo-cd bootstrap/argo-cd Argo CD Deployment, ApplicationSet 등 자기 관리 앱: Argo CD의 자체 배포 및 구성(HA, Controller, Server 등)을 관리합니다.
root projects AppProject CRD
(환경 정의)
환경 관리 앱: projects 디렉터리에 정의된 환경별 프로젝트(AppProject)를 클러스터에 배포하여 테넌시와 RBAC을 설정합니다.
(초기에는 비어있음)

 

Argo CD Autopilot: Project 생성 

프로젝트는 애플리케이션을 논리적으로 그룹화하고, 기본값 및 제한 사항을 제어하며, 특정 쿠버네티스 클러스터에 배포하는 데 사용되는 핵심 개념입니다.

 

1. 전제 조건 설정

새로운 프로젝트를 생성하기 위해 사용자는 자신의 Git 정보를 환경 변수로 설정했습니다.

  • export GIT_TOKEN=...
  • export GIT_REPO=

이 정보는 argocd-autopilot이 GitOps 리포지터리에 접근하고 변경 사항(새로운 프로젝트 매니페스트)을 커밋하는 데 사용됩니다.

 

2. 프로젝트 생성 명령어 및 결과

사용자는 dev와 prd 두 개의 환경별 프로젝트를 생성했습니다.

  • 명령어:
  •  
    argocd-autopilot project create dev
    argocd-autopilot project create prd
    
  • Bash
  • 결과:
    • argocd-autopilot은 지정된 Git 리포지토리를 복제하고, 새로운 프로젝트 매니페스트를 생성한 후, 이를 리포지토리에 푸시(push)합니다.
    • INFO project created: 'prd'와 같은 메시지는 GitOps 리포지터리에 새로운 AppProject 정의가 성공적으로 커밋되었음을 나타냅니다.

3. 프로젝트 생성 확인

생성된 프로젝트는 Argo CD의 AppProject CRD로 클러스터에 배포됩니다. 이는 Argo CD의 App of Apps 패턴에 따라 자동으로 적용됩니다.

  • 확인 명령어: kubectl get appprojects.argoproj.io -n argocd
  • 확인 결과:출력 결과에서 dev와 prd라는 이름의 AppProject가 argocd 네임스페이스에 성공적으로 생성되었음을 확인할 수 있습니다.
  • NAME      AGE
    default   29m
    dev       104s
    prd       101s
    

4. 다음 단계: Application 추가

프로젝트가 생성된 후의 논리적인 다음 단계는 이 프로젝트(예: dev 또는 prd)를 대상으로 하는 Application을 추가하는 것입니다. Application 추가는 일반적으로 argocd-autopilot app create 명령을 사용하여 수행됩니다. 이 명령은 GitOps 리포지터리의 apps 디렉터리 내부에 해당 애플리케이션의 매니페스트를 생성하고 커밋합니다.

 

 

[Argo CD 운영]

- 고가용성 HA 매니페스트를 사용해 Argo CD를 설치해보고, 가장 최적의 구성 옵션이 무엇인지 알아봅니다.

 

[실습환경] - kind k8s 배포 : worker 3대

# kind k8s 배포
kind create cluster --name myk8s --image kindest/node:v1.32.8 --config - <<EOF
kind: Cluster
apiVersion: kind.x-k8s.io/v1alpha4
nodes:
- role: control-plane
  extraPortMappings:
  - containerPort: 30000
    hostPort: 30000
  - containerPort: 30001
    hostPort: 30001
  - containerPort: 30002
    hostPort: 30002
  - containerPort: 30003
    hostPort: 30003
- role: worker
- role: worker
- role: worker
EOF

# kube-ops-view
helm repo add geek-cookbook https://geek-cookbook.github.io/charts/
helm install kube-ops-view geek-cookbook/kube-ops-view --version 1.2.2 --set service.main.type=NodePort,service.main.ports.http.nodePort=30001 --set env.TZ="Asia/Seoul" --namespace kube-system

# kube-ops-view 접속 URL 확인 (1.5 , 2 배율)
open "http://127.0.0.1:30001/#scale=1.5"
open "http://127.0.0.1:30001/#scale=2"

 

Argo CD HA (고가용성) 모드

1. HA 목표

Argo CD HA 모드의 핵심은 서비스의 중단 없는 운영수평적 확장을 통해 고가용성을 확보하는 것입니다. 이는 주요 구성 요소인 Controller, Repo-server, Server를 다중화하고, Redis 캐시에 HA 구성을 적용함으로써 달성됩니다.

 

2. HA 동작 방식

구성요소 그룹 HA 동작 방식 상세 설명
Server
/ Repo-server
수평 확장 (Deployment/StatefulSet) 여러 개의 Replica를 띄워 부하를 분산하며, Kubernetes Service Load Balancer를 통해 사용자 요청 및 내부 통신을 라우팅합니다.
Application
Controller
리더 선출 (Leader Election) StatefulSet으로 여러 Replica를 구성하지만, 오직 1개의 인스턴스만 Active Leader로 동기화(Sync) 작업을 수행하고 나머지는 Standby 상태를 유지합니다.
Redis HA Sentinel + HAProxy Redis Sentinel 구조를 통해 장애 발생 시 자동으로 마스터(Master)를 선출(Failover)하여 데이터 캐시의 고가용성을 보장합니다. HAProxy가 Redis 클러스터의 프록시 및 로드밸런싱 역할을 수행합니다.
Dex Stateless 수평 확장 OIDC 인증을 처리하며 상태가 없어 (Stateless) 여러 Replica로 쉽게 확장 가능합니다.
Notifications
/ ApplicationSet
리더 선출
(Leader Election)
여러 Controller가 동시에 실행되는 것을 방지하기 위해 Controller 간 리더 선출을 수행합니다.

 

3. HA 모드 구성 요소 (최소 2개 이상 Replica 권장)

Argo CD HA 모드는 여러 Deployment와 StatefulSet으로 구성되며, 모든 구성 요소는 Argo CD의 CRD(Application)를 감시(watch)하여 자동 GitOps를 수행합니다.

구성요소 타입 기본 Replica 주요 역할
argocd-application-controller StatefulSet 2개 이상 실제 GitOps 동기화 수행
(Git ↔ Cluster 상태 비교 및 Apply)
argocd-server Deployment 2개 이상 UI & API 서버 역할 및 사용자 요청 처리
argocd-repo-server Deployment 2개 이상 Git 저장소에서 매니페스트 가져오기 및 Helm/Kustomize 렌더링
argocd-redis-ha StatefulSet 3개
(Sentinel 포함)
App 상태, 세션 및 인증 토큰을 저장하는 캐시/세션 저장소
argocd-redis-ha-haproxy Deployment 1개 이상 Redis 클러스터에 대한 프록시 (로드밸런싱)
argocd-dex-server Deployment 1개 이상 OIDC를 통한 인증 (SSO) 제공 (Keycloak, Google 등 연동)
argocd-notifications-controller Deployment 1개 이상 Slack, Webhook 등 알림 처리
argocd-application-set-controller Deployment 1개 이상 다중 Application 자동 생성 및 관리

 

# 매니페스트 파일 작성 및 배포
cat << EOF > resources/namespace.yaml
apiVersion: v1
kind: Namespace
metadata:
  name: argocd
EOF
kubectl apply -f resources/namespace.yaml
wget https://raw.githubusercontent.com/argoproj/argo-cd/refs/heads/master/manifests/ha/install.yaml
mv install.yaml resources/
kubectl apply -f resources/install.yaml -n argocd

# 확인
watch -d kubectl get pod -n argocd
kubectl port-forward svc/argocd-server -n argocd 8080:80

#
kubectl get secret -n argocd argocd-initial-admin-secret -o jsonpath='{.data.password}' | base64 -d ; echo
UOn2CEkg0c4RCfQU
open https://127.0.0.1:8080 # 프로덕션의 경우 TLS인증서가 적용된 로드밸랜서 서비스로 오픈하자

# 원격 리포지터리에 커밋하고 푸시한다.
git add . && git commit -m "Deploy Argo CD " && git push -u origin main

 

원격 리포지터리에 커밋하고 푸시

 

최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2025/11   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
글 보관함