이 페이지 개선에 도움 주기
이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 GitHub에서 이 페이지 편집 링크를 선택합니다.
Argo CD 개념
Argo CD는 Git을 애플리케이션 배포의 신뢰할 수 있는 단일 소스로 처리하여 GitOps를 구현합니다. 이 주제에서는 실제 예제를 살펴본 다음 Argo CD의 EKS 기능을 사용할 때 알아야 하는 핵심 개념을 설명합니다.
Argo CD 시작하기
Argo CD 기능을 생성한 후(Argo CD 기능 생성 참조) 애플리케이션 배포를 시작할 수 있습니다. 이 예제에서는 클러스터를 등록하고 애플리케이션을 생성하는 방법을 안내합니다.
1단계: 설정
클러스터 등록(필수)
애플리케이션을 배포할 클러스터를 등록합니다. 이 예제에서는 Argo CD가 실행 중인 동일한 클러스터를 등록합니다(대부분의 Argo CD 예제와 호환 가능하도록 in-cluster 이름 사용).
# Get your cluster ARN CLUSTER_ARN=$(aws eks describe-cluster \ --name my-cluster \ --query 'cluster.arn' \ --output text) # Register the cluster using Argo CD CLI argocd cluster add $CLUSTER_ARN \ --aws-cluster-name $CLUSTER_ARN \ --name in-cluster \ --project default
참고
EKS에서 Argo CD 기능을 사용하도록 Argo CD CLI를 구성하는 방법에 대한 자세한 내용은 관리형 기능과 함께 Argo CD CLI 사용 섹션을 참조하세요.
또는 Kubernetes 보안 암호를 사용하여 클러스터를 등록합니다(자세한 내용은 대상 클러스터 등록 참조).
리포지토리 액세스 구성(선택 사항)
이 예제에서는 퍼블릭 GitHub 리포지토리를 사용하므로 리포지토리 구성이 필요하지 않습니다. 프라이빗 리포지토리의 경우 AWS Secrets Manager, CodeConnections 또는 Kubernetes 보안 암호를 사용하여 액세스를 구성합니다(자세한 내용은 리포지토리 액세스 구성 참조).
AWS 서비스(헬름 차트, CodeConnections 및 CodeCommit에 대한 ECR)의 경우 리포지토리를 생성하지 않고도 애플리케이션 리소스에서 직접 참조할 수 있습니다. 용량 역할에는 필요한 IAM 권한이 있어야 합니다. 세부 정보는 리포지토리 액세스 구성 섹션을 참조하세요.
단계 2: 애플리케이션 만들기
my-app.yaml에서 이 애플리케이션 매니페스트를 생성합니다.
apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: guestbook namespace: argocd spec: project: default source: repoURL: https://github.com/argoproj/argocd-example-apps.git targetRevision: HEAD path: guestbook destination: name: in-cluster namespace: guestbook syncPolicy: automated: prune: true selfHeal: true syncOptions: - CreateNamespace=true
애플리케이션을 적용합니다.
kubectl apply -f my-app.yaml
이 애플리케이션을 적용한 후 Argo CD에서 다음을 수행합니다. 1. Git에서 클러스터로 애플리케이션 동기화(초기 배포) 2. Git 리포지토리에서 변경 사항 모니터링 3. 후속 변경 사항을 클러스터와 자동으로 동기화 4. 원하는 상태에서 드리프트 감지 및 수정 5. UI에서 상태 및 동기화 기록 제공
애플리케이션 상태를 봅니다.
kubectl get application guestbook -n argocd
또한 Argo CD CLI 또는 Argo CD UI(EKS 콘솔의 클러스터의 기능 탭 아래에서 액세스 가능)를 사용하여 애플리케이션을 볼 수도 있습니다.
참고
관리형 기능과 함께 Argo CD CLI를 사용하는 경우 네임스페이스 접두사가 argocd app get argocd/guestbook인 애플리케이션을 지정합니다.
참고
destination.name에서 클러스터 이름(클러스터를 등록할 때 사용한 이름)을 사용합니다. 관리형 기능은 로컬 클러스터 내 기본값(kubernetes.default.svc)을 지원하지 않습니다.
핵심 개념
GitOps 원칙 및 소스 유형
Argo CD는 GitOps를 구현합니다. 여기서 애플리케이션 소스는 배포를 위한 신뢰할 수 있는 단일 소스입니다.
-
선언적 - 원하는 상태는 YAML 매니페스트, 헬름 차트 또는 Kustomize 오버레이를 사용하여 선언됨
-
버전 관리됨 - 모든 변경 사항은 전체 감사 추적을 통해 추적됨
-
자동화됨 - Argo CD가 소스를 지속적으로 모니터링하고 변경 사항을 자동으로 동기화함
-
자가 복구 - 원하는 클러스터 상태와 실제 클러스터 상태 사이의 드리프트를 감지하고 수정함
지원되는 소스 유형:
-
Git 리포지토리 - GitHub, GitLab, Bitbucket, CodeCommit(HTTPS, SSH 또는 CodeConnections)
-
헬름 레지스트리 - HTTP 레지스트리(예:
https://aws.github.io/eks-charts) 및 OCI 레지스트리(예:public.ecr.aws) -
OCI 이미지 - 매니페스트 또는 헬름 차트가 포함된 컨테이너 이미지(예:
oci://registry-1.docker.io/user/my-app)
이러한 유연성을 통해 조직은 보안 및 규정 준수 요구 사항을 충족하는 소스를 선택할 수 있습니다. 예를 들어 클러스터에서 Git 액세스를 제한하는 조직은 헬름 차트 또는 OCI 이미지에 ECR을 사용할 수 있습니다.
자세한 내용은 Argo CD 설명서의 Application Sources
동기화 및 조정
Argo CD는 소스와 클러스터를 지속적으로 모니터링하여 차이를 감지하고 수정합니다.
-
변경 사항에 대한 소스 폴링(기본값: 6분마다)
-
원하는 상태를 클러스터 상태와 비교
-
애플리케이션을
Synced또는OutOfSync로 표시 -
변경 사항을 자동으로 동기화하거나(구성된 경우) 수동 승인 대기
-
동기화 후 리소스 상태 모니터링
웨이브 동기화는 주석을 사용하여 리소스 생성 순서를 제어합니다.
metadata: annotations: argocd.argoproj.io/sync-wave: "0" # Default if not specified
리소스는 웨이브 순서(-1과 같은 음수를 포함하여 작은 숫자부터)로 적용됩니다. 지정하지 않으면 Wave 0이 기본값입니다. 이를 통해 서비스(wave 1) 이전의 배포(wave 0)보다 이전에 네임스페이스(wave -1)와 같은 종속성을 생성할 수 있습니다.
자가 복구는 수동 변경 사항을 자동으로 되돌립니다.
spec: syncPolicy: automated: selfHeal: true
참고
관리형 기능은 Kubernetes 규칙 및 기타 도구와의 호환성 개선을 위해 주석 기반 리소스 추적(레이블 기반이 아님)을 사용합니다.
동기화 단계, 후크 및 고급 패턴에 대한 자세한 내용은 Argo CD sync 설명서
애플리케이션 상태
Argo CD는 애플리케이션에 있는 모든 리소스의 상태를 모니터링합니다.
상태: * 정상 - 모든 리소스가 예상대로 실행 중임 * 진행 중 - 리소스가 생성 또는 업데이트 중임 * 성능 저하됨 - 일부 리소스가 정상이 아님(포드 충돌, 작업 실패) * 일시 중단됨 - 애플리케이션이 의도적으로 일시 중지됨 * 누락 - Git에 정의된 리소스가 클러스터에 없음
Argo CD는 일반적인 Kubernetes 리소스(배포, StatefulSets, 작업 등)에 대한 기본 제공 상태 확인 기능을 보유하며, CRD에 대한 사용자 지정 상태 확인을 지원합니다.
애플리케이션 상태는 모든 리소스에 의해 결정됩니다. 리소스가 Degraded인 경우 애플리케이션은 Degraded입니다.
자세한 내용은 Argo CD 설명서의 Resource Health
다중 클러스터 패턴
Argo CD는 다음과 같은 두 가지 주요 배포 패턴을 지원합니다.
허브 및 스포크 여러 워크로드 클러스터에 배포되는 전용 관리 클러스터에서 Argo CD 실행: * 중앙 집중식 제어 및 가시성 * 모든 클러스터에서 일관된 정책 * 관리할 하나의 Argo CD 인스턴스 * 컨트롤 플레인과 워크로드 간 명확한 분리
클러스터별 - 각 클러스터에서 Argo CD를 실행하여 해당 클러스터의 애플리케이션만 관리: * 클러스터 분리(한 곳의 장애는 다른 곳에 영향을 주지 않음) * 보다 간단한 네트워킹(클러스터 간 통신 없음) * 보다 쉬운 초기 설정(클러스터 등록 없음)
많은 클러스터를 관리하는 플랫폼 팀의 경우 허브 및 스포크를 선택하거나 독립된 팀이나 클러스터가 완전히 격리되어야 하는 경우 클러스터별 방법을 선택합니다.
자세한 다중 클러스터 구성은 Argo CD 고려 사항 섹션을 참조하세요.
Projects
프로젝트는 애플리케이션에 대한 논리적 그룹화 및 액세스 제어를 제공합니다.
-
소스 제한 사항 - 사용할 수 있는 Git 리포지토리 제한
-
대상 제한 사항 - 대상으로 지정할 수 있는 클러스터 및 네임스페이스 제한
-
리소스 제한 사항 - 배포할 수 있는 Kubernetes 리소스 유형 제한
-
RBAC 통합 - AWS Identity Center 사용자 및 그룹 ID에 프로젝트 매핑
애플리케이션은 단일 프로젝트에 속해 있습니다. 지정하지 않으면 default 프로젝트(기본적으로 제한 사항 없음)를 사용합니다. 프로덕션에서 사용하는 경우 액세스를 제한하고 적절한 제한 사항으로 새 프로젝트를 생성하도록 default 프로젝트를 편집합니다.
프로젝트 구성 및 RBAC 패턴은 Argo CD 권한 구성 섹션을 참조하세요.
동기화 옵션
일반적인 옵션을 사용하여 동기화 동작을 미세 조정합니다.
-
CreateNamespace=true- 대상 네임스페이스 자동 생성 -
ServerSideApply=true- 더 나은 충돌 해결을 위해 서버 측 적용 사용 -
SkipDryRunOnMissingResource=true- CRD가 아직 없을 때 모의 실행 건너뛰기(kro 인스턴스에 유용함)
spec: syncPolicy: syncOptions: - CreateNamespace=true - ServerSideApply=true - SkipDryRunOnMissingResource=true
동기화 옵션의 전체 목록은 Argo CD sync options 설명서
다음 단계
-
리포지토리 액세스 구성 - Git 리포지토리 액세스 구성
-
대상 클러스터 등록 - 배포에 대한 대상 클러스터 등록
-
애플리케이션 생성 - 첫 번째 애플리케이션 생성
-
Argo CD 고려 사항 - EKS 특정 패턴, Identity Center 통합 및 다중 클러스터 구성
-
Argo CD 설명서
- 동기화 후크, 상태 확인 및 고급 패턴을 포함하는 포괄적인 Argo CD 설명서