검색

1.4. 푸시 및 가져오기 모델을 사용하여 Argo CD 배포

download PDF

푸시 모델을 사용하여 허브 클러스터의 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
  • 클러스터 관리자가 아니며 이 문제를 해결해야 하는 경우 다음 단계를 완료합니다.

    1. Argo CD 애플리케이션이 배포될 각 관리형 클러스터에서 모든 네임스페이스를 생성합니다.
    2. 각 네임스페이스에 managed-by 레이블을 추가합니다. Argo CD 애플리케이션이 여러 네임스페이스에 배포된 경우 Argo CD에서 각 네임스페이스를 관리해야 합니다.

      managed-by 레이블을 사용하여 다음 예제를 참조하십시오.

    apiVersion: v1
    kind: Namespace
    metadata:
      name: mortgage2
      labels:
        argocd.argoproj.io/managed-by: openshift-gitops
    1. 애플리케이션의 리포지토리에 있는 모든 애플리케이션 대상 네임스페이스를 선언하고 네임스페이스에 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 Container Platform GitOps 컨트롤러 메모리 및 CPU 사용량에 대한 잠재적인 부담을 고려하십시오. 리소스 관리를 최적화하려면 Red Hat OpenShift GitOps 설명서의 리소스 할당량 또는 요청 구성 을 참조하십시오.
  • 기본적으로 푸시 모델은 ApplicationSet 의 템플릿 섹션에 apps.open-cluster-management.io/ocm-managed-clusterapps.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 모델을 사용하여 관리 클러스터에 애플리케이션을 배포하는 데 사용됩니다.

  1. Pull 모델의 경우 다음 예에 표시된 대로 애플리케이션의 대상을 기본 로컬 Kubernetes 서버로 설정합니다. 애플리케이션은 관리 클러스터의 애플리케이션 컨트롤러에서 로컬로 배포합니다.
  2. 템플릿 주석과 함께 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
    Pull 모델에는 apps.open-cluster-management.io/ocm-managed-cluster 가 필요합니다.
    2
    푸시 모델 리소스를 무시하려면 argocd.argoproj.io/skip-reconcile 이 필요합니다.
    3
    apps.open-cluster-management.io/pull-to-ocm-managed-cluster: "true" 도 Pull 모델에 필요합니다.

1.4.4. MulticlusterApplicationSetReport

  • Pull 모델의 경우 MulticlusterApplicationSetReport 은 관리되는 클러스터 전체에서 애플리케이션 상태를 집계합니다.
  • 보고서에는 리소스 목록과 각 관리 클러스터의 애플리케이션 전체 상태가 포함됩니다.
  • 각 Argo CD ApplicationSet 리소스에 대해 별도의 보고서 리소스가 생성됩니다. 보고서는 ApplicationSet 과 동일한 네임스페이스에 생성됩니다.
  • 보고서에는 다음 항목이 포함됩니다.

    1. Argo CD 애플리케이션의 리소스 목록
    2. 각 Argo CD 애플리케이션의 전체 동기화 및 상태
    3. 전체 상태가 동기화 되지 않았거나 비정상인각 클러스터에 대한 오류 메시지
    4. 관리 클러스터의 모든 상태 요약 상태
  • 리소스 동기화 컨트롤러와 집계 컨트롤러는 모두 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 logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.