1.4. 푸시 및 가져오기 모델을 사용하여 Argo CD 배포
푸시 모델을 사용하여 허브 클러스터의 Argo CD 서버는 관리 클러스터에 애플리케이션 리소스를 배포합니다. Pull 모델 의 경우 manifestWork
를 사용하여 Propagation 컨트롤러에서 관리 클러스터에 의해 애플리케이션 리소스를 전파합니다.
두 모델 모두에서 동일한 ApplicationSet
CRD를 사용하여 애플리케이션을 관리 클러스터에 배포합니다.
필수 액세스: 클러스터 관리자
1.4.1. 사전 요구 사항
Argo CD Pull 모델에 대한 다음 사전 요구 사항을 확인합니다.
중요:
-
openshift-gitops-ArgoCD-application-controller
서비스 계정이 클러스터 관리자로 할당되지 않은 경우 GitOps 애플리케이션 컨트롤러에서 리소스를 배포하지 않을 수 있습니다. 애플리케이션 상태는 다음과 유사한 오류를 보낼 수 있습니다.
cannot create resource "services" in API group "" in the namespace "mortgage",deployments.apps is forbidden: User "system:serviceaccount:openshift-gitops:openshift-gitops-Argo CD-application-controller"
-
관리 클러스터에
OpenShift Gitops
Operator를 설치한 후 동일한 관리 클러스터에서ClusterRoleBinding
클러스터 관리자 권한을 생성해야 합니다. 관리 클러스터에
ClusterRoleBinding
클러스터 관리자 권한을 추가하려면 다음 예제 YAML을 참조하십시오.kind: ClusterRoleBinding apiVersion: rbac.authorization.k8s.io/v1 metadata: name: argo-admin subjects: - kind: ServiceAccount name: openshift-gitops-argocd-application-controller namespace: openshift-gitops roleRef: apiGroup: rbac.authorization.k8s.io kind: ClusterRole name: cluster-admin
클러스터 관리자가 아니며 이 문제를 해결해야 하는 경우 다음 단계를 완료합니다.
- Argo CD 애플리케이션이 배포될 각 관리형 클러스터에서 모든 네임스페이스를 생성합니다.
각 네임스페이스에
managed-by
레이블을 추가합니다. Argo CD 애플리케이션이 여러 네임스페이스에 배포된 경우 Argo CD에서 각 네임스페이스를 관리해야 합니다.managed-by
레이블을 사용하여 다음 예제를 참조하십시오.
apiVersion: v1 kind: Namespace metadata: name: mortgage2 labels: argocd.argoproj.io/managed-by: openshift-gitops
-
애플리케이션의 리포지토리에 있는 모든 애플리케이션 대상 네임스페이스를 선언하고 네임스페이스에
managed-by
레이블을 포함해야 합니다. 네임스페이스를 선언하는 방법을 알아보려면 추가 리소스 를 참조하십시오.
Argo CD Pull 모델을 사용하려면 다음 요구 사항을 참조하십시오.
-
GitOps Operator는 hub 클러스터 및
openshift-gitops
네임스페이스의 대상 관리 클러스터에 설치해야 합니다. - 필수 허브 클러스터 OpenShift Container Platform GitOps Operator는 버전 1.9.0 이상이어야 합니다.
- 필요한 관리 클러스터 OpenShift Container Platform GitOps Operator는 hub 클러스터와 동일한 버전이어야 합니다.
- ApplicationSet 컨트롤러가 관리 클러스터의 Argo CD 애플리케이션 템플릿을 전파해야 합니다.
모든 관리 클러스터는 hub 클러스터의 Argo CD 서버 네임스페이스에 클러스터 시크릿이 있어야 합니다. 이 보안은 ArgoCD 애플리케이션 세트 컨트롤러에서 관리 클러스터의 Argo CD 애플리케이션 템플릿을 전파하는 데 필요합니다.
클러스터 보안을 생성하려면
배치
리소스에 대한 참조가 포함된gitOpsCluster
리소스를 생성합니다.placement
리소스는 Pull 모델을 지원하는 데 필요한 모든 관리 클러스터를 선택합니다. GitOps 클러스터 컨트롤러가 조정되면 Argo CD 서버 네임스페이스에서 관리 클러스터에 대한 클러스터 시크릿을 생성합니다.
1.4.2. 아키텍처
푸시 및 Pull 모델의 경우 hub 클러스터의 Argo CD ApplicationSet 컨트롤러가 조정되어 각 대상 관리 클러스터에 대한 애플리케이션 리소스를 생성합니다. 두 모델의 아키텍처에 대한 다음 정보를 참조하십시오.
1.4.2.1. 아키텍처 푸시 모델
- 푸시 모델을 사용하면 OpenShift Container Platform GitOps가 중앙 집중식 허브 클러스터에서 관리 클러스터에 직접 리소스를 적용합니다.
- hub 클러스터에서 실행 중인 Argo CD 애플리케이션은 GitHub 리포지토리와 통신하고 매니페스트를 관리 클러스터에 직접 배포합니다.
- 푸시 모델 구현에는 hub 클러스터에 Argo CD 애플리케이션만 포함되어 있으며 관리 클러스터에 대한 인증 정보가 있습니다. hub 클러스터의 Argo CD 애플리케이션은 애플리케이션을 관리 클러스터에 배포할 수 있습니다.
- 중요: 리소스 애플리케이션이 필요한 다수의 관리형 클러스터에서는 OpenShift GitOps GitOps 컨트롤러 메모리 및 CPU 사용량에 대한 잠재적인 부담을 고려하십시오. 리소스 관리를 최적화하려면 Red Hat OpenShift GitOps 설명서의 리소스 할당량 또는 요청 구성 을 참조하십시오.
-
기본적으로 푸시 모델은
ApplicationSet
의 템플릿 섹션에apps.open-cluster-management.io/ocm-managed-cluster
및apps.open-cluster-management.io/pull-to-ocm-managed-cluster
주석을 추가하지 않는 한 애플리케이션을 배포하는 데 사용됩니다.
1.4.2.2. 아키텍처 가져오기 모델
- 풀 모델은 허브 클러스터의 컨트롤러에 대한 부담을 줄임으로써 푸시 모델에 비해 확장성 완화를 제공할 수 있지만 더 많은 요청 및 상태 보고가 필요합니다.
- Pull 모델을 사용하면 OpenShift Container Platform GitOps 는 중앙 집중식 허브 클러스터에서 관리 클러스터에 직접 리소스를 적용하지 않습니다. Argo CD 애플리케이션은 hub 클러스터에서 관리 클러스터로 전파됩니다.
-
가져오기 모델 구현은 OpenShift Cluster Manager 등록, 배치 및
manifestWork
API를 적용하여 허브 클러스터와 관리 클러스터 간에 보안 통신 채널을 사용하여 리소스를 배포할 수 있습니다. - 각 관리형 클러스터는 리소스 매니페스트를 로컬로 배포하기 위해 GitHub 리포지토리와 개별적으로 통신하므로 각 관리 클러스터에 GitOps Operator를 설치하고 구성해야 합니다.
-
Argo CD 서버는 각 대상 관리 클러스터에서 실행 중이어야 합니다. Argo CD 애플리케이션 리소스는 관리 클러스터에서 복제되며 로컬 Argo CD 서버에서 배포합니다. 관리 클러스터의 분산 Argo CD 애플리케이션은 허브 클러스터에 단일 Argo CD
ApplicationSet
리소스를 사용하여 생성됩니다. -
관리형 클러스터는
ocm-managed-cluster
주석의 값으로 결정됩니다. -
Pull 모델을 성공적으로 구현하려면 Argo CD 애플리케이션 컨트롤러에서
ApplicationSet
의 template 섹션에 있는argocd.argoproj.io/skip-reconcile
주석을 사용하여 푸시 모델 애플리케이션 리소스를 무시 해야 합니다. - Pull 모델의 경우 관리형 클러스터의 Argo CD 애플리케이션 컨트롤러가 애플리케이션을 배포하도록 조정됩니다.
- hub 클러스터의 Pull 모델 리소스 동기화 컨트롤러는 각 관리 클러스터의 OpenShift Cluster Manager 검색 V2 구성 요소를 주기적으로 쿼리하여 각 Argo CD 애플리케이션에 대한 리소스 목록 및 오류 메시지를 검색합니다.
-
hub 클러스터의 집계 컨트롤러는 리소스 동기화 컨트롤러의 데이터와
manifestWork
의 상태 정보를 사용하여 클러스터 전체에서MulticlusterApplicationSetReport
를 생성하고 업데이트합니다. - 배포 상태는 hub 클러스터로 다시 수집되지만 모든 세부 정보가 전송되지는 않습니다. 개요를 제공하기 위해 추가 상태 업데이트가 주기적으로 스크랩됩니다. 상태 피드백은 실시간이 아니며 각 관리 클러스터 GitOps Operator는 Git 리포지토리와 통신해야 하므로 여러 요청이 발생합니다.
1.4.3. ApplicationSet 사용자 정의 리소스 생성
Argo CD ApplicationSet
리소스는 관리 클러스터 목록을 가져오는 데 사용되는 generator 필드에서 Push 또는 Pull 모델을 사용하여 관리 클러스터에 애플리케이션을 배포하는 데 사용됩니다.
- Pull 모델의 경우 다음 예에 표시된 대로 애플리케이션의 대상을 기본 로컬 Kubernetes 서버로 설정합니다. 애플리케이션은 관리 클러스터의 애플리케이션 컨트롤러에서 로컬로 배포합니다.
템플릿 주석과 함께 Pull 모델을 사용하는 다음 예제
ApplicationSet
YAML에 표시된 대로 기본 푸시 모델을 재정의하는 데 필요한 주석을 추가합니다.apiVersion: argoproj.io/v1alpha1 kind: `ApplicationSet` metadata: name: guestbook-allclusters-app-set namespace: openshift-gitops spec: generators: - clusterDecisionResource: configMapRef: ocm-placement-generator labelSelector: matchLabels: cluster.open-cluster-management.io/placement: aws-app-placement requeueAfterSeconds: 30 template: metadata: annotations: apps.open-cluster-management.io/ocm-managed-cluster: '{{name}}'1 apps.open-cluster-management.io/ocm-managed-cluster-app-namespace: openshift-gitops argocd.argoproj.io/skip-reconcile: "true" 2 labels: apps.open-cluster-management.io/pull-to-ocm-managed-cluster: "true" 3 name: '{{name}}-guestbook-app' spec: destination: namespace: guestbook server: https://kubernetes.default.svc project: default sources: [ { repoURL: https://github.com/argoproj/argocd-example-apps.git targetRevision: main path: guestbook } ] syncPolicy: automated: {} syncOptions: - CreateNamespace=true
1.4.4. MulticlusterApplicationSetReport
-
Pull 모델의 경우
MulticlusterApplicationSetReport
은 관리되는 클러스터 전체에서 애플리케이션 상태를 집계합니다. - 보고서에는 리소스 목록과 각 관리 클러스터의 애플리케이션 전체 상태가 포함됩니다.
-
각 Argo CD ApplicationSet 리소스에 대해 별도의 보고서 리소스가 생성됩니다. 보고서는
ApplicationSet
과 동일한 네임스페이스에 생성됩니다. 보고서에는 다음 항목이 포함됩니다.
- Argo CD 애플리케이션의 리소스 목록
- 각 Argo CD 애플리케이션의 전체 동기화 및 상태
-
전체 상태가
동기화
되지 않았거나비정상인
각 클러스터에 대한 오류 메시지 - 관리 클러스터의 모든 상태 요약 상태
- 리소스 동기화 컨트롤러와 집계 컨트롤러는 모두 10초마다 실행하여 보고서를 생성합니다.
다음 예제 출력에 표시된 대로 두 컨트롤러는 Propagation 컨트롤러와 동일한
다중 클러스터 통합 Pod의
별도의 컨테이너에서 실행됩니다.NAMESPACE NAME READY STATUS open-cluster-management multicluster-integrations-7c46498d9-fqbq4 3/3 Running
다음은 guestbook
애플리케이션의 MulticlusterApplicationSetReport
YAML 파일의 예입니다.
apiVersion: apps.open-cluster-management.io/v1alpha1 kind: MulticlusterApplicationSetReport metadata: labels: apps.open-cluster-management.io/hosting-applicationset: openshift-gitops.guestbook-allclusters-app-set name: guestbook-allclusters-app-set namespace: openshift-gitops statuses: clusterConditions: - cluster: cluster1 conditions: - message: 'Failed sync attempt: one or more objects failed to apply, reason: services is forbidden: User "system:serviceaccount:openshift-gitops:openshift-gitops-Argo CD-application-controller" cannot create resource "services" in API group "" in the namespace "guestbook",deployments.apps is forbidden: User <name> cannot create resource "deployments" in API group "apps" in the namespace "guestboo...' type: SyncError healthStatus: Missing syncStatus: OutOfSync - cluster: pcluster1 healthStatus: Progressing syncStatus: Synced - cluster: pcluster2 healthStatus: Progressing syncStatus: Synced summary: clusters: "3" healthy: "0" inProgress: "2" notHealthy: "3" notSynced: "1" synced: "2"
참고: 리소스를 배포하지 못하면 리소스가 리소스 목록에 포함되지 않습니다. 자세한 내용은 오류 메시지를 참조하십시오.
1.4.5. 추가 리소스
- Red Hat OpenShift GitOps 설명서에서 클러스터 구성으로 애플리케이션을 배포하여 OpenShift 클러스터 구성 을 참조하십시오.
- Red Hat OpenShift GitOps 설명서에서 Argo CD 인스턴스 설정을 참조하십시오.