선언적 클러스터 구성


Red Hat OpenShift GitOps 1.15

GitOps CLI를 사용하여 OpenShift GitOps를 사용하고 기본 및 코드 모드에서 애플리케이션을 생성 및 동기화하여 클러스터 구성으로 OpenShift 클러스터 구성

Red Hat OpenShift Documentation Team

초록

이 문서에서는 Argo CD를 구성하여 Git 디렉터리의 콘텐츠를 클러스터의 사용자 지정 구성이 포함된 애플리케이션과 반복적으로 동기화하는 방법을 설명합니다. GitOps CLI를 사용하여 기본 및 코드 모드에서 애플리케이션을 생성하고 동기화하는 방법에 대해서도 설명합니다.

Red Hat OpenShift GitOps를 사용하면 Argo CD를 구성하여 Git 디렉터리의 콘텐츠를 클러스터의 사용자 지정 구성이 포함된 애플리케이션과 반복적으로 동기화할 수 있습니다.

1.1. 사전 요구 사항

  • 관리자로 OpenShift Container Platform 클러스터에 로그인했습니다.
  • OpenShift Container Platform 클러스터에 Red Hat OpenShift GitOps Operator를 설치했습니다.

1.2. Argo CD 인스턴스를 사용하여 클러스터 범위 리소스 관리

주의

별도의 사용 사례가 필요한 경우를 제외하고 Argo CD 인스턴스의 권한을 클러스터 범위로 간주하지 마십시오. cluster-admin 권한이 있는 사용자만 인스턴스를 관리해야 합니다. 클러스터 범위 인스턴스의 네임스페이스에 액세스할 수 있는 모든 사용자는 클러스터에 대한 권한을 높여 클러스터 관리자가 될 수 있습니다.

클러스터 범위 리소스를 관리하려면 Red Hat OpenShift GitOps Operator의 기존 Subscription 오브젝트를 업데이트하고 Argo CD 인스턴스의 네임스페이스를 spec 섹션의 ARGOCD_CLUSTER_CONFIG_NAMESPACES 환경 변수에 추가합니다.

프로세스

  1. 웹 콘솔의 관리자 화면에서 Operator → 설치된 OperatorRed Hat OpenShift GitOps서브스크립션 으로 이동합니다.
  2. 작업 목록을 클릭한 다음 서브스크립션 편집을 클릭합니다.
  3. openshift-gitops-operator Subscription 세부 정보 페이지의 YAML 탭에서 Argo CD 인스턴스의 네임스페이스를 spec 섹션의 ARGOCD_CLUSTER_CONFIG_NAMESPACES 환경 변수에 추가하여 서브스크립션 YAML 파일을 편집합니다.

    apiVersion: operators.coreos.com/v1alpha1
    kind: Subscription
    metadata:
      name: openshift-gitops-operator
      namespace: openshift-gitops-operator
    # ...
    spec:
      config:
        env:
        - name: ARGOCD_CLUSTER_CONFIG_NAMESPACES
          value: openshift-gitops, <list of namespaces of cluster-scoped Argo CD instances>
    # ...
    Copy to Clipboard Toggle word wrap
  4. 저장다시 로드 를 클릭합니다.
  5. 클러스터 범위 리소스를 관리하기 위해 Argo CD 인스턴스가 클러스터 역할로 구성되었는지 확인하려면 다음 단계를 수행합니다.

    1. 사용자 관리역할로 이동하여 필터 목록에서 클러스터 전체 역할을 선택합니다.
    2. 이름으로 검색 필드를 사용하여 argocd-application-controller 를 검색합니다.

      역할 페이지에는 생성된 클러스터 역할이 표시됩니다.

      작은 정보

      또는 OpenShift CLI에서 다음 명령을 실행합니다.

      oc auth can-i create oauth -n openshift-gitops --as system:serviceaccount:openshift-gitops:openshift-gitops-argocd-application-controller
      Copy to Clipboard Toggle word wrap

      출력 yes 는 클러스터 범위 리소스를 관리하기 위해 Argo 인스턴스가 클러스터 역할로 구성되어 있는지 확인합니다. 필요에 따라 구성을 확인하고 필요한 단계를 수행합니다.

1.3. Argo CD 인스턴스의 기본 권한

기본적으로 Argo CD 인스턴스에는 다음과 같은 권한이 있습니다.

  • Argo CD 인스턴스에는 배포된 네임스페이스에서만 리소스를 관리할 수 있는 admin 권한이 있습니다. 예를 들어 foo 네임스페이스에 배포된 Argo CD 인스턴스에는 해당 네임스페이스에 대한 리소스만 관리할 수 있는 admin 권한이 있습니다.
  • Argo CD에는 리소스가 제대로 작동하려면 클러스터 전체 읽기 권한이 필요하므로 Argo CD에는 다음과 같은 클러스터 범위 권한이 있습니다.

    - verbs:
        - get
        - list
        - watch
       apiGroups:
        - '*'
       resources:
        - '*'
     - verbs:
        - get
        - list
       nonResourceURLs:
        - '*'
    Copy to Clipboard Toggle word wrap
참고
  • Argo CD가 실행 중인 argocd-serverargocd-application-controller 구성 요소에서 사용하는 클러스터 역할을 편집하여 Argo CD에서 관리하려는 네임스페이스와 리소스로만 쓰기 권한이 제한됩니다.

    $ oc edit clusterrole argocd-server
    $ oc edit clusterrole argocd-application-controller
    Copy to Clipboard Toggle word wrap

1.4. 클러스터 수준에서 Argo CD 인스턴스 실행

Red Hat OpenShift GitOps Operator에서 설치한 기본 Argo CD 인스턴스 및 관련 컨트롤러는 이제 간단한 구성 토글을 설정하여 클러스터의 인프라 노드에서 실행할 수 있습니다.

프로세스

  1. 기존 노드에 레이블을 지정합니다.

    $ oc label node <node-name> node-role.kubernetes.io/infra=""
    Copy to Clipboard Toggle word wrap
  2. 선택 사항: 필요한 경우 테인트를 적용하고 인프라 노드에 워크로드를 분리하고 다른 워크로드가 이러한 노드에서 예약되지 않도록 할 수도 있습니다.

    $ oc adm taint nodes -l node-role.kubernetes.io/infra \
    infra=reserved:NoSchedule infra=reserved:NoExecute
    Copy to Clipboard Toggle word wrap
  3. GitOpsService 사용자 정의 리소스에 runOnInfra 토글을 추가합니다.

    apiVersion: pipelines.openshift.io/v1alpha1
    kind: GitopsService
    metadata:
      name: cluster
    spec:
      runOnInfra: true
    Copy to Clipboard Toggle word wrap
  4. 선택 사항: 테인트가 노드에 추가된 경우 GitOpsService 사용자 정의 리소스에 허용 오차 를 추가합니다.

    apiVersion: pipelines.openshift.io/v1alpha1
    kind: GitopsService
    metadata:
      name: cluster
      spec:
        runOnInfra: true
        tolerations:
        - effect: NoSchedule
          key: infra
          value: reserved
        - effect: NoExecute
          key: infra
          value: reserved
    Copy to Clipboard Toggle word wrap

  5. 콘솔 UI에서 Pod → Pod 세부 정보를 확인하여 openshift-gitops 네임스페이스의 워크로드가 인프라 노드에 예약되었는지 확인합니다.
참고

기본 Argo CD 사용자 정의 리소스에 수동으로 추가된 nodeSelector허용 오차GitOpsService 사용자 정의 리소스의 토글 및 허용 오차 로 덮어씁니다.

1.5. Argo CD 대시보드를 사용하여 애플리케이션 생성

Argo CD는 애플리케이션을 만들 수 있는 대시보드를 제공합니다.

이 샘플 워크플로에서는 Argo CD를 구성하여 cluster 디렉터리의 콘텐츠를 cluster-configs 애플리케이션과 반복적으로 동기화하는 프로세스를 보여줍니다. 디렉터리는 웹 콘솔의 red hat applications menu icon 메뉴에 있는 Red Hat 개발자 블로그에 링크를 추가하고 클러스터에서 Spring - petclinic 네임스페이스를 정의하는 OpenShift Container Platform 웹 콘솔 클러스터 구성을 정의합니다.

사전 요구 사항

  • 관리자로 OpenShift Container Platform 클러스터에 로그인했습니다.
  • OpenShift Container Platform 클러스터에 Red Hat OpenShift GitOps Operator를 설치했습니다.
  • Argo CD 인스턴스에 로그인했습니다.

프로세스

  1. Argo CD 대시보드에서 새 APP를 클릭하여 새 Argo CD 애플리케이션을 추가합니다.
  2. 이 워크플로의 경우 다음 구성을 사용하여 cluster-configs 애플리케이션을 생성합니다.

    애플리케이션 이름
    cluster-configs
    프로젝트
    default
    동기화 정책
    Manual
    리포지터리 URL
    https://github.com/redhat-developer/openshift-gitops-getting-started
    버전
    HEAD
    경로
    cluster
    대상
    https://kubernetes.default.svc
    네임스페이스
    spring-petclinic
    디렉토리 반복
    checked
  3. 만들기 클릭하여 애플리케이션을 생성합니다.
  4. 웹 콘솔의 관리자 화면을 열고 관리네임스페이스를 확장합니다.
  5. 네임스페이스를 검색하고 선택한 다음 레이블 필드에 argocd.argoproj.io/managed-by=openshift-gitops 를 입력하여 openshift-gitops 네임스페이스의 Argo CD 인스턴스가 네임스페이스를 관리할 수 있도록 합니다.

1.6. oc 툴을 사용하여 애플리케이션 생성

oc 툴을 사용하여 터미널에서 Argo CD 애플리케이션을 생성할 수 있습니다.

사전 요구 사항

  • OpenShift Container Platform 클러스터에 Red Hat OpenShift GitOps Operator를 설치했습니다.
  • Argo CD 인스턴스에 로그인했습니다.

프로세스

  1. 샘플 애플리케이션을 다운로드합니다.

    $ git clone git@github.com:redhat-developer/openshift-gitops-getting-started.git
    Copy to Clipboard Toggle word wrap
  2. 애플리케이션을 생성합니다.

    $ oc create -f openshift-gitops-getting-started/argo/app.yaml
    Copy to Clipboard Toggle word wrap
  3. oc get 명령을 실행하여 생성된 애플리케이션을 검토합니다.

    $ oc get application -n openshift-gitops
    Copy to Clipboard Toggle word wrap
  4. openshift-gitops 네임스페이스의 Argo CD 인스턴스에서 관리할 수 있도록 애플리케이션이 배포되는 네임스페이스에 레이블을 추가합니다.

    $ oc label namespace spring-petclinic argocd.argoproj.io/managed-by=openshift-gitops
    Copy to Clipboard Toggle word wrap

1.7. GitOps CLI를 사용하여 기본 모드에서 애플리케이션 생성

GitOps argocd CLI를 사용하여 기본 모드에서 애플리케이션을 생성할 수 있습니다.

이 샘플 워크플로에서는 Argo CD를 구성하여 cluster 디렉터리의 콘텐츠를 cluster-configs 애플리케이션과 반복적으로 동기화하는 프로세스를 보여줍니다. 디렉터리는 OpenShift Container Platform 클러스터 구성과 클러스터의 spring-petclinic 네임스페이스를 정의합니다.

사전 요구 사항

  • OpenShift Container Platform 클러스터에 Red Hat OpenShift GitOps Operator를 설치했습니다.
  • OpenShift CLI(oc)가 설치되어 있습니다.
  • Red Hat OpenShift GitOps argocd CLI를 설치했습니다.
  • Argo CD 인스턴스에 로그인했습니다.

프로세스

  1. Argo CD 서버의 관리자 계정 암호를 가져옵니다.

    $ ADMIN_PASSWD=$(oc get secret openshift-gitops-cluster -n openshift-gitops -o jsonpath='{.data.admin\.password}' | base64 -d)
    Copy to Clipboard Toggle word wrap
  2. Argo CD 서버 URL을 가져옵니다.

    $ SERVER_URL=$(oc get routes openshift-gitops-server -n openshift-gitops -o jsonpath='{.status.ingress[0].host}')
    Copy to Clipboard Toggle word wrap
  3. admin 계정 암호를 사용하여 Argo CD 서버에 로그인하고 작은따옴표로 전달합니다.

    중요

    암호를 작은따옴표로 포함하면 쉘에 의해 $ 와 같은 특수 문자가 잘못 해석되지 않습니다. 항상 작은 따옴표를 사용하여 암호의 리터럴 값을 묶습니다.

    $ argocd login --username admin --password ${ADMIN_PASSWD} ${SERVER_URL}
    Copy to Clipboard Toggle word wrap

    $ argocd login --username admin --password '<password>' openshift-gitops.openshift-gitops.apps-crc.testing
    Copy to Clipboard Toggle word wrap

  4. 모든 애플리케이션을 나열하여 기본 모드에서 argocd 명령을 실행할 수 있는지 확인합니다.

    $ argocd app list
    Copy to Clipboard Toggle word wrap

    구성이 올바르면 다음 헤더를 사용하여 기존 애플리케이션이 나열됩니다.

    샘플 출력

    NAME CLUSTER NAMESPACE  PROJECT  STATUS  HEALTH   SYNCPOLICY  CONDITIONS  REPO PATH TARGET
    Copy to Clipboard Toggle word wrap

  5. 기본 모드에서 애플리케이션을 생성합니다.

    $ argocd app create app-cluster-configs \
        --repo https://github.com/redhat-developer/openshift-gitops-getting-started.git \
        --path cluster \
        --revision main \
        --dest-server  https://kubernetes.default.svc \
        --dest-namespace spring-petclinic \
        --directory-recurse \
        --sync-policy none \
        --sync-option Prune=true \
        --sync-option CreateNamespace=true
    Copy to Clipboard Toggle word wrap
  6. openshif-gitops Argo CD 인스턴스에서 관리할 spring-petclinic 대상 네임스페이스에 레이블을 지정합니다.

    $ oc label ns spring-petclinic "argocd.argoproj.io/managed-by=openshift-gitops"
    Copy to Clipboard Toggle word wrap
  7. 사용 가능한 애플리케이션을 나열하여 애플리케이션이 성공적으로 생성되었는지 확인합니다.

    $ argocd app list
    Copy to Clipboard Toggle word wrap

    cluster-configs Argo CD 애플리케이션의 상태가 Healthy 이지만 none 동기화 정책으로 인해 자동으로 동기화되지 않아 OutOfSync 상태가 유지됩니다.

1.8. GitOps CLI를 사용하여 코어 모드에서 애플리케이션 생성

GitOps argocd CLI를 사용하여 코어 모드에서 애플리케이션을 생성할 수 있습니다.

이 샘플 워크플로에서는 Argo CD를 구성하여 cluster 디렉터리의 콘텐츠를 cluster-configs 애플리케이션과 반복적으로 동기화하는 프로세스를 보여줍니다. 디렉터리는 OpenShift Container Platform 클러스터 구성과 클러스터의 spring-petclinic 네임스페이스를 정의합니다.

사전 요구 사항

  • OpenShift Container Platform 클러스터에 Red Hat OpenShift GitOps Operator를 설치했습니다.
  • OpenShift CLI(oc)가 설치되어 있습니다.
  • Red Hat OpenShift GitOps argocd CLI를 설치했습니다.

프로세스

  1. oc CLI 툴을 사용하여 OpenShift Container Platform 클러스터에 로그인합니다.

    $ oc login -u <username> -p <password> <server_url>
    Copy to Clipboard Toggle word wrap

    $ oc login -u kubeadmin -p '<password>' https://api.crc.testing:6443
    Copy to Clipboard Toggle word wrap

  2. kubeconfig 파일에서 컨텍스트가 올바르게 설정되었는지 확인합니다.

    $ oc config current-context
    Copy to Clipboard Toggle word wrap
  3. 현재 컨텍스트의 기본 네임스페이스를 openshift-gitops:로 설정합니다.

    $ oc config set-context --current --namespace openshift-gitops
    Copy to Clipboard Toggle word wrap
  4. Argo CD 구성 요소 이름을 덮어쓰려면 다음 환경 변수를 설정합니다.

    $ export ARGOCD_REPO_SERVER_NAME=openshift-gitops-repo-server
    Copy to Clipboard Toggle word wrap
  5. 모든 애플리케이션을 나열하여 코어 모드에서 argocd 명령을 실행할 수 있는지 확인합니다.

    $ argocd app list --core
    Copy to Clipboard Toggle word wrap

    구성이 올바르면 다음 헤더를 사용하여 기존 애플리케이션이 나열됩니다.

    샘플 출력

    NAME CLUSTER NAMESPACE  PROJECT  STATUS  HEALTH   SYNCPOLICY  CONDITIONS  REPO PATH TARGET
    Copy to Clipboard Toggle word wrap

  6. 코어 모드로 애플리케이션을 생성합니다.

    $ argocd app create app-cluster-configs --core \
        --repo https://github.com/redhat-developer/openshift-gitops-getting-started.git \
        --path cluster \
        --revision main \
        --dest-server  https://kubernetes.default.svc \
        --dest-namespace spring-petclinic \
        --directory-recurse \
        --sync-policy none \
        --sync-option Prune=true \
        --sync-option CreateNamespace=true
    Copy to Clipboard Toggle word wrap
  7. openshif-gitops Argo CD 인스턴스에서 관리할 spring-petclinic 대상 네임스페이스에 레이블을 지정합니다.

    $ oc label ns spring-petclinic "argocd.argoproj.io/managed-by=openshift-gitops"
    Copy to Clipboard Toggle word wrap
  8. 사용 가능한 애플리케이션을 나열하여 애플리케이션이 성공적으로 생성되었는지 확인합니다.

    $ argocd app list --core
    Copy to Clipboard Toggle word wrap

    cluster-configs Argo CD 애플리케이션의 상태가 Healthy 이지만 none 동기화 정책으로 인해 자동으로 동기화되지 않아 OutOfSync 상태가 유지됩니다.

1.9. Git 리포지토리와 애플리케이션 동기화

Argo CD의 동기화 정책을 수정하여 Git 리포지토리와 애플리케이션을 동기화할 수 있습니다. 정책 수정을 통해 Git 리포지토리의 클러스터 구성 변경 사항을 클러스터에 자동으로 적용합니다.

프로세스

  1. Argo CD 대시보드에서 cluster-configs Argo CD 애플리케이션은 MissingOutOfSync 상태입니다. 애플리케이션이 수동 동기화 정책으로 구성되었으므로 Argo CD는 자동으로 동기화되지 않습니다.
  2. cluster-configs 타일에서 SYNC 를 클릭하고 변경 사항을 검토한 다음 SYNCHRONIZE 를 클릭합니다. Argo CD는 Git 리포지토리의 모든 변경 사항을 자동으로 감지합니다. 구성이 변경되면 Argo CD는 cluster-configs의 상태를 OutOfSync로 변경합니다. Argo CD의 동기화 정책을 수정하여 Git 리포지토리에서 클러스터에 변경 사항을 자동으로 적용할 수 있습니다.
  3. cluster-configs Argo CD 애플리케이션이 이제 HealthySynced 상태가 됩니다. cluster-configs 타일을 클릭하여 동기화된 리소스의 세부 정보와 클러스터의 상태를 확인합니다.
  4. OpenShift Container Platform 웹 콘솔로 이동하여 red hat applications menu icon 를 클릭하여 Red Hat 개발자 블로그(Kubernetes )에 대한 링크가 있는지 확인합니다.
  5. 프로젝트 페이지로 이동하여 spring-petclinic 네임스페이스를 검색하여 클러스터에 추가되었는지 확인합니다.

    클러스터 구성이 클러스터에 성공적으로 동기화됩니다.

1.10. GitOps CLI를 사용하여 기본 모드에서 애플리케이션 동기화

GitOps argocd CLI를 사용하여 기본 모드에서 애플리케이션을 동기화할 수 있습니다.

이 샘플 워크플로에서는 Argo CD를 구성하여 cluster 디렉터리의 콘텐츠를 cluster-configs 애플리케이션과 반복적으로 동기화하는 프로세스를 보여줍니다. 디렉터리는 OpenShift Container Platform 클러스터 구성과 클러스터의 spring-petclinic 네임스페이스를 정의합니다.

사전 요구 사항

  • OpenShift Container Platform 클러스터에 Red Hat OpenShift GitOps Operator를 설치했습니다.
  • Argo CD 인스턴스에 로그인했습니다.
  • OpenShift CLI(oc)가 설치되어 있습니다.
  • Red Hat OpenShift GitOps argocd CLI를 설치했습니다.

프로세스

  1. Argo CD 서버의 관리자 계정 암호를 가져옵니다.

    $ ADMIN_PASSWD=$(oc get secret openshift-gitops-cluster -n openshift-gitops -o jsonpath='{.data.admin\.password}' | base64 -d)
    Copy to Clipboard Toggle word wrap
  2. Argo CD 서버 URL을 가져옵니다.

    $ SERVER_URL=$(oc get routes openshift-gitops-server -n openshift-gitops -o jsonpath='{.status.ingress[0].host}')
    Copy to Clipboard Toggle word wrap
  3. admin 계정 암호를 사용하여 Argo CD 서버에 로그인하고 작은따옴표로 전달합니다.

    중요

    암호를 작은따옴표로 포함하면 쉘에 의해 $ 와 같은 특수 문자가 잘못 해석되지 않습니다. 항상 작은 따옴표를 사용하여 암호의 리터럴 값을 묶습니다.

    $ argocd login --username admin --password ${ADMIN_PASSWD} ${SERVER_URL}
    Copy to Clipboard Toggle word wrap

    $ argocd login --username admin --password '<password>' openshift-gitops.openshift-gitops.apps-crc.testing
    Copy to Clipboard Toggle word wrap

  4. 애플리케이션이 none 동기화 정책으로 구성되므로 동기화 작업을 수동으로 트리거해야 합니다.

    $ argocd app sync openshift-gitops/app-cluster-configs
    Copy to Clipboard Toggle word wrap
  5. 애플리케이션을 나열하여 애플리케이션에 HealthySynced 상태가 있는지 확인합니다.

    $ argocd app list
    Copy to Clipboard Toggle word wrap

1.11. GitOps CLI를 사용하여 코어 모드에서 애플리케이션 동기화

GitOps argocd CLI를 사용하여 코어 모드에서 애플리케이션을 동기화할 수 있습니다.

이 샘플 워크플로에서는 Argo CD를 구성하여 cluster 디렉터리의 콘텐츠를 cluster-configs 애플리케이션과 반복적으로 동기화하는 프로세스를 보여줍니다. 디렉터리는 OpenShift Container Platform 클러스터 구성과 클러스터의 spring-petclinic 네임스페이스를 정의합니다.

사전 요구 사항

  • OpenShift Container Platform 클러스터에 Red Hat OpenShift GitOps Operator를 설치했습니다.
  • OpenShift CLI(oc)가 설치되어 있습니다.
  • Red Hat OpenShift GitOps argocd CLI를 설치했습니다.

프로세스

  1. oc CLI 툴을 사용하여 OpenShift Container Platform 클러스터에 로그인합니다.

    $ oc login -u <username> -p <password> <server_url>
    Copy to Clipboard Toggle word wrap

    $ oc login -u kubeadmin -p '<password>' https://api.crc.testing:6443
    Copy to Clipboard Toggle word wrap

  2. kubeconfig 파일에서 컨텍스트가 올바르게 설정되었는지 확인합니다.

    $ oc config current-context
    Copy to Clipboard Toggle word wrap
  3. 현재 컨텍스트의 기본 네임스페이스를 openshift-gitops:로 설정합니다.

    $ oc config set-context --current --namespace openshift-gitops
    Copy to Clipboard Toggle word wrap
  4. Argo CD 구성 요소 이름을 덮어쓰려면 다음 환경 변수를 설정합니다.

    $ export ARGOCD_REPO_SERVER_NAME=openshift-gitops-repo-server
    Copy to Clipboard Toggle word wrap
  5. 애플리케이션이 none 동기화 정책으로 구성되므로 동기화 작업을 수동으로 트리거해야 합니다.

    $ argocd app sync --core openshift-gitops/app-cluster-configs
    Copy to Clipboard Toggle word wrap
  6. 애플리케이션을 나열하여 애플리케이션에 HealthySynced 상태가 있는지 확인합니다.

    $ argocd app list --core
    Copy to Clipboard Toggle word wrap

1.12. 클러스터 구성에 대한 기본 제공 권한

기본적으로 Argo CD 인스턴스에는 클러스터 Operator, 선택적 OLM Operator 및 사용자 관리와 같은 특정 클러스터 범위 리소스를 관리할 수 있는 권한이 있습니다.

참고
  • Argo CD에는 cluster-admin 권한이 없습니다.
  • GitOps Operator에서 관리하는 모든 Argo CD 인스턴스에 바인딩된 권한을 확장할 수 있습니다. 그러나 Operator에서 초기 상태로 다시 조정할 수 있으므로 GitOps Operator에서 생성한 역할 또는 클러스터 역할과 같은 권한 리소스를 수정해서는 안 됩니다. 대신 전용 역할 및 클러스터 역할 오브젝트를 생성하여 애플리케이션 컨트롤러에서 사용하는 적절한 서비스 계정에 바인딩합니다.

Argo CD 인스턴스에 대한 권한:

Expand
Resources설명

리소스 그룹

사용자 또는 관리자 구성

operators.coreos.com

OLM에서 관리하는 선택적 Operator

user.openshift.io , rbac.authorization.k8s.io

그룹, 사용자 및 해당 권한

config.openshift.io

클러스터 전체 빌드 구성, 레지스트리 구성 및 스케줄러 정책을 구성하는 데 사용되는 CVO에서 관리하는 컨트롤 플레인 Operator

storage.k8s.io

스토리지

console.openshift.io

콘솔 사용자 지정

1.13. 클러스터 구성에 대한 권한 추가

Argo CD 인스턴스에 대한 권한을 부여하여 클러스터 구성을 관리할 수 있습니다. 추가 권한이 있는 클러스터 역할을 생성한 다음 새 클러스터 역할 바인딩을 생성하여 클러스터 역할을 서비스 계정과 연결합니다.

사전 요구 사항

  • cluster-admin 권한이 있고 웹 콘솔에 로그인한 OpenShift Container Platform 클러스터에 액세스할 수 있습니다.
  • OpenShift Container Platform 클러스터에 Red Hat OpenShift GitOps Operator를 설치했습니다.

프로세스

  1. 웹 콘솔에서 사용자 관리역할 → 역할 생성 을 선택합니다. 다음 ClusterRole YAML 템플릿을 사용하여 추가 권한을 지정하는 규칙을 추가합니다.

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: secrets-cluster-role
    rules:
    - apiGroups: [""]
      resources: ["secrets"]
      verbs: ["*"]
    Copy to Clipboard Toggle word wrap
  2. 생성 을 클릭하여 클러스터 역할을 추가합니다.
  3. 클러스터 역할 바인딩을 생성하려면 사용자 관리역할 바인딩 → 바인딩 생성 을 선택합니다.
  4. 프로젝트 목록에서 모든 프로젝트를 선택합니다.
  5. 바인딩 생성을 클릭합니다.
  6. 바인딩 유형을 Cluster-wide 역할 바인딩(ClusterRoleBinding) 으로 선택합니다.
  7. RoleBinding 이름의 고유 값을 입력합니다.
  8. 드롭다운 목록에서 새로 생성된 클러스터 역할 또는 기존 클러스터 역할을 선택합니다.
  9. 주체ServiceAccount 로 선택하고 주체 네임스페이스이름을 제공합니다.

    1. subject namespace:openshift-gitops
    2. 제목 이름:openshift-gitops-argocd-application-controller

      참고

      주체 이름 값은 클러스터 역할 및 클러스터 역할 바인딩을 생성하는 GitOps 컨트롤 플레인 구성 요소에 따라 다릅니다.

  10. 생성을 클릭합니다. ClusterRoleBinding 오브젝트의 YAML 파일은 다음과 같습니다.

    kind: ClusterRoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: cluster-role-binding
    subjects:
      - kind: ServiceAccount
        name: openshift-gitops-argocd-application-controller
        namespace: openshift-gitops
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: secrets-cluster-role
    Copy to Clipboard Toggle word wrap

1.14. Red Hat OpenShift GitOps를 사용하여 OLM Operator 설치

클러스터 구성이 포함된 Red Hat OpenShift GitOps는 특정 클러스터 범위 리소스를 관리하고 클러스터 Operator 또는 네임스페이스 범위 OLM Operator를 설치합니다.

클러스터 관리자는 Tekton과 같은 OLM Operator를 설치해야 하는 경우를 고려하십시오. OpenShift Container Platform 웹 콘솔을 사용하여 Tekton Operator 또는 OpenShift CLI를 수동으로 설치하여 클러스터에 Tekton 서브스크립션 및 Tekton Operator group을 수동으로 설치합니다.

Red Hat OpenShift GitOps는 Kubernetes 리소스를 Git 리포지토리에 배치합니다. 클러스터 관리자는 Red Hat OpenShift GitOps를 사용하여 수동 절차 없이 다른 OLM Operator 설치를 관리하고 자동화합니다. 예를 들어 Red Hat OpenShift GitOps를 사용하여 Git 리포지토리에 Tekton 서브스크립션을 배치하면 Red Hat OpenShift GitOps는 Git 리포지토리에서 이 Tekton 서브스크립션을 자동으로 가져와서 클러스터에 Tekton Operator를 설치합니다.

1.14.1. 클러스터 범위 Operator 설치

OLM(Operator Lifecycle Manager)은 클러스터 범위 Operator의 openshift-operators 네임스페이스에서 기본 global-operators Operator 그룹을 사용합니다. 따라서 Gitops 리포지토리에서 OperatorGroup 리소스를 관리할 필요가 없습니다. 그러나 네임스페이스 범위의 Operator의 경우 해당 네임스페이스에서 OperatorGroup 리소스를 관리해야 합니다.

클러스터 범위 Operator를 설치하려면 필요한 Operator의 서브스크립션 리소스를 생성하고 Git 리포지토리에 배치합니다.

예: Grafana Operator 서브스크립션

apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: grafana
spec:
  channel: v4
  installPlanApproval: Automatic
  name: grafana-operator
  source: redhat-operators
  sourceNamespace: openshift-marketplace
Copy to Clipboard Toggle word wrap

1.14.2. namepace-scoped Operator 설치

네임스페이스 범위의 Operator를 설치하려면 Git 리포지토리에 필요한 Operator의 서브스크립션OperatorGroup 리소스를 생성하고 배치합니다.

예: Ansible Automation Platform Resource Operator

# ...
apiVersion: v1
kind: Namespace
metadata:
  labels:
    openshift.io/cluster-monitoring: "true"
  name: ansible-automation-platform
# ...
apiVersion: operators.coreos.com/v1
kind: OperatorGroup
metadata:
  name: ansible-automation-platform-operator
  namespace: ansible-automation-platform
spec:
  targetNamespaces:
    - ansible-automation-platform
# ...
apiVersion: operators.coreos.com/v1alpha1
kind: Subscription
metadata:
  name: ansible-automation-platform
  namespace: ansible-automation-platform
spec:
  channel: patch-me
  installPlanApproval: Automatic
  name: ansible-automation-platform-operator
  source: redhat-operators
  sourceNamespace: openshift-marketplace
# ...
Copy to Clipboard Toggle word wrap

중요

Red Hat OpenShift GitOps를 사용하여 여러 Operator를 배포할 때 해당 네임스페이스에 단일 Operator 그룹만 생성해야 합니다. 단일 네임스페이스에 두 개 이상의 Operator group이 있는 경우 해당 네임스페이스에서 생성된 모든 CSV는 TooManyOperatorGroups 이유와 함께 실패 상태로 전환됩니다. 해당 네임스페이스의 Operator 그룹 수가 1에 도달하면 이전의 모든 실패 상태 CSV가 pending 상태로 전환됩니다. Operator 설치를 완료하려면 보류 중인 설치 계획을 수동으로 승인해야 합니다.

기본 클러스터 범위 인스턴스의 경우 Red Hat OpenShift GitOps Operator는 특정 클러스터 범위 리소스를 관리하기 위한 추가 권한을 부여합니다. 결과적으로 클러스터 관리자는 Argo CD를 클러스터 범위 인스턴스로 배포할 때 Operator는 GitOps 컨트롤 플레인 구성 요소에 대한 추가 클러스터 역할 및 클러스터 역할 바인딩을 생성합니다. 이러한 클러스터 역할 및 클러스터 역할 바인딩은 Argo CD가 클러스터 수준에서 작동하는 데 필요한 추가 권한을 제공합니다.

클러스터 범위 인스턴스에 모든 Operator 지원 권한이 있고 클러스터 전체 리소스에 대한 권한을 추가하거나 제거하도록 선택하는 경우 먼저 클러스터 범위 인스턴스의 기본 클러스터 역할 생성을 비활성화해야 합니다. 그런 다음 다음 클러스터 범위 인스턴스에 대한 권한을 사용자 지정할 수 있습니다.

  • 기본 ArgoCD 인스턴스 (기본 클러스터 범위 인스턴스)
  • 사용자 정의 클러스터 범위 Argo CD 인스턴스

이 가이드에서는 사용자 정의 클러스터 범위 Argo CD 인스턴스를 생성하고, 클러스터의 사용자 지정 구성이 포함된 정의된 네임스페이스에 Argo CD 애플리케이션을 배포하고, 클러스터 범위의 인스턴스의 기본 클러스터 역할 생성을 비활성화하고, GitOps 컨트롤 플레인 구성 요소에 대한 새 클러스터 역할 및 클러스터 역할 바인딩을 생성하여 사용자 정의 클러스터 범위 인스턴스에 대한 권한을 사용자 지정하는 데 필요한 예제를 제공합니다.

참고

개발자로서 Argo CD 애플리케이션을 생성하고 클러스터 전체 리소스를 배포하는 경우 클러스터 관리자가 필요한 권한을 부여해야 합니다.

그러지 않으면 Argo CD 조정 후 다음 예와 유사한 애플리케이션의 상태 필드에 인증 오류 메시지가 표시됩니다.

인증 오류 메시지의 예

persistentvolumes is forbidden: User "system:serviceaccount:gitops-demo:argocd-argocd-application-controller" cannot create resource "persistentvolumes" in API group "" at the cluster scope.
Copy to Clipboard Toggle word wrap

2.1. 사전 요구 사항

  • OpenShift Container Platform 클러스터에 Red Hat OpenShift GitOps 1.13.0 이상을 설치했습니다.
  • OpenShift CLI(oc)가 설치되어 있습니다.
  • Red Hat OpenShift GitOps argocd CLI를 설치했습니다.
  • 정의된 네임스페이스에 클러스터 범위의 Argo CD 인스턴스가 설치되어 있습니다. 예를 들어 Spring -petclinic 네임스페이스입니다.
  • 사용자 정의 클러스터 범위 인스턴스가 다음 구성 요소에 대한 클러스터 역할 및 클러스터 역할 바인딩으로 구성되었는지 확인했습니다.

    • Argo CD 애플리케이션 컨트롤러
    • Argo CD 서버
    • Argo CD ApplicationSet Controller (ApplicationSet Controller 제공)
  • spring-petclinic 네임스페이스에 customclusterrole 경로를 사용하여 cluster-configs Argo CD 애플리케이션을 배포하고 test-gitops-ns 네임스페이스 및 test-gitops-pv 영구 볼륨 리소스를 생성했습니다.

    참고

    cluster-configs Argo CD 애플리케이션은 다음 매개변수가 설정된 사용자 정의 클러스터 범위 인스턴스에서 관리해야 합니다.

    • true로 설정된 selfHeal 필드 값
    • syncPolicy 필드 값이 automated로 설정
    • app.kubernetes.io/part-of=argocd 값으로 설정된 Label 필드
    • 정의된 네임스페이스의 Argo CD 인스턴스가 네임스페이스를 관리할 수 있도록 argocd.argoproj.io/managed-by=<user_defined_namespace > 값으로 설정된 Label 필드
    • app.kubernetes.io/name=<user_argocd_instance > 값으로 설정된 라벨 필드

2.2. 클러스터 범위 인스턴스의 기본 클러스터 역할 생성 비활성화

필요에 따라 클러스터 전체 리소스에 대한 권한을 추가하거나 제거하려면 Argo CD 사용자 정의 리소스(CR)의 YAML 파일을 편집하여 클러스터 범위 인스턴스의 기본 클러스터 역할 생성을 비활성화해야 합니다.

프로세스

  1. Argo CD CR에서 .spec.defaultClusterScopedRoleDisabled 필드의 값을 true 로 설정합니다.

    Argo CD CR의 예

    apiVersion: argoproj.io/v1beta1
    kind: ArgoCD
    metadata:
      name: example 
    1
    
      namespace: spring-petclinic 
    2
    
    # ...
    spec:
      defaultClusterScopedRoleDisabled: true 
    3
    
    # ...
    Copy to Clipboard Toggle word wrap

    1
    클러스터 범위 인스턴스의 이름입니다.
    2
    클러스터 범위 인스턴스를 실행할 네임스페이스입니다.
    3
    클러스터 범위 인스턴스의 기본 클러스터 역할 생성을 비활성화하는 플래그 값입니다. Operator에서 클러스터 범위 인스턴스의 기본 클러스터 역할 및 클러스터 역할 바인딩을 다시 생성하려면 필드 값을 false 로 설정합니다.

    샘플 출력

    argocd.argoproj.io/example configured
    Copy to Clipboard Toggle word wrap

  2. 다음 명령을 실행하여 Red Hat OpenShift GitOps Operator가 GitOps 컨트롤 플레인 구성 요소의 기본 클러스터 역할 및 클러스터 역할 바인딩을 삭제했는지 확인합니다.

    $ oc get ClusterRoles/<argocd_name>-<argocd_namespace>-<control_plane_component>
    Copy to Clipboard Toggle word wrap
    $ oc get ClusterRoleBindings/<argocd_name>-<argocd_namespace>-<control_plane_component>
    Copy to Clipboard Toggle word wrap

    샘플 출력

    No resources found
    Copy to Clipboard Toggle word wrap

    클러스터 범위 인스턴스의 기본 클러스터 역할 및 클러스터 역할 바인딩이 생성되지 않습니다. 클러스터 관리자는 GitOps 컨트롤 플레인 구성 요소에 대한 새 클러스터 역할 및 클러스터 역할 바인딩을 생성하여 클러스터 범위 인스턴스에 대한 권한을 생성하고 사용자 지정할 수 있습니다.

2.3. 클러스터 범위 인스턴스에 대한 권한 사용자 정의

클러스터 관리자는 클러스터 범위 인스턴스에 대한 권한을 사용자 지정하려면 GitOps 컨트롤 플레인 구성 요소에 대한 새 클러스터 역할 및 클러스터 역할 바인딩을 생성해야 합니다.

예를 들어 다음 명령은 사용자 정의 클러스터 범위 인스턴스에만 중점을 둡니다.

프로세스

  1. 웹 콘솔의 관리자 화면을 열고 사용자 관리역할 → 역할 생성 으로 이동합니다.
  2. 다음 ClusterRole YAML 템플릿을 사용하여 추가 권한을 지정하는 규칙을 추가합니다.

    클러스터 역할 YAML 템플릿의 예

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: example-spring-petclinic-argocd-application-controller 
    1
    
    rules:
      - verbs:
          - get
          - list
          - watch
        apiGroups:
          - '*'
        resources:
          - '*'
      - verbs:
          - '*'
        apiGroups:
          - ''
        resources: 
    2
    
          - namespaces
          - persistentvolumes
    Copy to Clipboard Toggle word wrap

    1
    <argocd_name>-<argocd_namespace>-<control_plane_component> 이름 지정 규칙에 따른 클러스터 역할의 이름입니다.
    2
    클러스터 수준에서 권한을 부여할 리소스입니다.
  3. 생성 을 클릭하여 클러스터 역할을 추가합니다.
  4. 다음 단계를 수행하여 권한을 사용자 지정하는 컨트롤 플레인 구성 요소에서 사용하는 서비스 계정을 찾습니다.

    1. 워크로드Pod 로 이동합니다.
    2. 프로젝트 목록에서 사용자 정의 클러스터 범위 인스턴스가 설치된 프로젝트를 선택합니다.
    3. 컨트롤 플레인 구성 요소의 Pod를 클릭하고 YAML 탭으로 이동합니다.
    4. spec.ServiceAccount 필드를 찾아 서비스 계정을 기록해 둡니다.
  5. 사용자 관리RoleBindings바인딩 생성 으로 이동합니다.
  6. 바인딩 생성을 클릭합니다.
  7. 바인딩 유형을 Cluster-wide 역할 바인딩(ClusterRoleBinding) 으로 선택합니다.
  8. <argocd_ name>-<argocd_namespace>-<control_plane_component> 이름 지정 규칙에 따라 RoleBinding 이름의 고유 값을 입력합니다.
  9. 역할 이름의 드롭다운 목록에서 새로 생성된 클러스터 역할을 선택합니다.
  10. 주체ServiceAccount 로 선택하고 주체 네임스페이스이름을 제공합니다.

    1. subject namespace:spring-petclinic
    2. 제목 이름:example-argocd-application-controller

      참고

      주체 이름 의 경우 구성한 값이 권한을 사용자 지정하는 컨트롤 플레인 구성 요소의 spec.ServiceAccount 필드 값과 같은지 확인합니다.

  11. 생성을 클릭합니다.

    컨트롤 플레인 구성 요소의 서비스 계정 및 네임스페이스에 필요한 권한이 생성되어 있습니다. ClusterRoleBinding 오브젝트의 YAML 파일은 다음 예와 유사합니다.

    클러스터 역할 바인딩의 YAML 파일의 예

    kind: ClusterRoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: example-spring-petclinic-argocd-application-controller
    subjects:
      - kind: ServiceAccount
        name: example-argocd-application-controller
        namespace: spring-petclinic
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: ClusterRole
      name: example-spring-petclinic-argocd-application-controller
    Copy to Clipboard Toggle word wrap

3장. 집계된 클러스터 역할을 생성하여 권한 사용자 정의

Argo CD 애플리케이션 컨트롤러의 기본 클러스터 역할에는 특정 하드 코딩된 권한 세트가 있습니다. Red Hat OpenShift GitOps Operator는 이 클러스터 역할을 관리하므로 수정할 수 없습니다. 클러스터 관리자는 다음 방법 중 하나를 사용하여 권한을 사용자 지정할 수 있습니다.

3.1. 집계된 클러스터 역할

집계된 클러스터 역할을 사용하면 새 클러스터 역할을 처음부터 생성하여 권한을 정의할 필요가 없습니다. 대신 여러 클러스터 역할을 단일 클러스터 역할에 결합할 수 있습니다.

Red Hat OpenShift GitOps 1.14 이상에서는 클러스터 관리자는 집계된 클러스터 역할을 사용하고 사용자가 Argo CD 애플리케이션 컨트롤러에 대한 사용자 정의 권한을 쉽게 추가할 수 있습니다.

중요
  • 클러스터 범위 Argo CD 인스턴스의 Argo CD 애플리케이션 컨트롤러 구성 요소에 대해서만 집계된 클러스터 역할을 생성할 수 있습니다.
  • Argo CD CR(사용자 정의 리소스)에서 aggregatedClusterRoles 필드를 삭제해도 사용자 정의 클러스터 역할이 삭제되지 않습니다. CLI 또는 UI를 사용하여 사용자 정의 클러스터 역할을 수동으로 삭제해야 합니다.

3.2. 사전 요구 사항

  • 집계된 클러스터 역할을 이해하고 있습니다.
  • OpenShift Container Platform 클러스터에 Red Hat OpenShift GitOps를 설치했습니다.
  • OpenShift CLI(oc)가 설치되어 있습니다.
  • Red Hat OpenShift GitOps argocd CLI를 설치했습니다.
  • 정의된 네임스페이스에 클러스터 범위의 Argo CD 인스턴스가 설치되어 있습니다.
  • 사용자 정의 클러스터 범위 인스턴스가 다음 구성 요소에 대한 클러스터 역할 및 클러스터 역할 바인딩으로 구성되었는지 확인했습니다.

    • Argo CD 애플리케이션 컨트롤러
    • Argo CD 서버
    • Argo CD ApplicationSet Controller (ApplicationSet Controller가 생성되는 경우)
  • 클러스터 범위 인스턴스 의 기본 클러스터 역할 생성을 비활성화 했습니다.

3.3. 집계된 클러스터 역할 생성

집계된 클러스터 역할을 생성하는 프로세스는 다음 절차로 구성됩니다.

  1. 집계된 클러스터 역할 생성 활성화
  2. 사용자 정의 클러스터 역할 생성 및 애플리케이션 컨트롤러에 대한 사용자 정의 권한 구성

3.3.1. 집계된 클러스터 역할 생성 활성화

Argo CD 사용자 정의 리소스(CR)에서 .spec.aggregatedClusterRoles 필드의 값을 true 로 설정하여 집계된 클러스터 역할 생성을 활성화할 수 있습니다. 집계된 클러스터 역할 생성을 활성화하면 {gitops} Operator는 다음 작업을 수행합니다.

  • 기본적으로 사전 정의된 aggregationRule 필드를 사용하여 < argocd_name>-<argocd_namespace>-argocd-application-controller 집계 클러스터 역할을 생성합니다.
  • 해당 클러스터 역할 바인딩을 생성하고 관리합니다.
  • 애플리케이션 컨트롤러의 보기관리자 역할을 생성하여 집계된 클러스터 역할에 사용자 정의 권한을 추가합니다.

3.3.2. 사용자 정의 클러스터 역할 생성 및 사용자 정의 권한 구성

사용자 정의 권한을 < argocd_name>-<argocd_namespace>-argocd-application-controller-admin 클러스터 역할 및 집계된 클러스터 역할로 구성하려면 하나 이상의 사용자 정의 클러스터 역할을 생성한 다음 애플리케이션 컨트롤러에 대한 사용자 정의 권한을 구성해야 합니다.

참고
  • 집계된 클러스터 역할은 < argocd_name>-<argocd_namespace>-argocd-application-controller-admin 및 < argocd_name>-<argocd_namespace>-argocd-application-controller-view 클러스터 역할의 권한을 상속합니다.
  • < argocd_name>-<argocd_namespace>-argocd-application-controller-admin 클러스터 역할은 사용자 정의 클러스터 역할의 권한을 상속합니다.

3.4. 집계된 클러스터 역할 생성 활성화

클러스터 범위의 Argo CD 애플리케이션 컨트롤러 구성 요소에 대해 집계된 클러스터 역할을 생성하려면 Argo CD 사용자 정의 리소스(CR)의 YAML 파일을 편집하여 해당 필드를 구성해야 합니다.

프로세스

  1. Argo CD CR에서 .spec.aggregatedClusterRoles 필드의 값을 true 로 설정합니다.

    Argo CD CR의 예

    apiVersion: argoproj.io/v1beta1
    kind: ArgoCD
    metadata:
      name: example 
    1
    
      namespace: spring-petclinic 
    2
    
    # ...
    spec:
      aggregatedClusterRoles: true 
    3
    
    # ...
    Copy to Clipboard Toggle word wrap

    1
    클러스터 범위 인스턴스의 이름입니다.
    2
    클러스터 범위 인스턴스를 실행할 네임스페이스입니다.
    3
    value를 true 로 설정하면 집계된 클러스터 역할을 생성할 수 있습니다. 집계된 클러스터 역할 생성을 활성화하지 않으려면 이 행을 포함하지 않거나 값을 false 로 설정합니다.

    출력 예

    argocd.argoproj.io/example configured
    Copy to Clipboard Toggle word wrap

  2. 클러스터 범위의 Argo CD 인스턴스의 Status 필드가 Phase: Available 로 표시되는지 확인합니다. 다음 명령을 실행하여 사용할 수 있습니다.

    $ oc describe argocd.argoproj.io/example -n spring-petclinic
    Copy to Clipboard Toggle word wrap

    출력 예

    Name:         example
    Namespace:    spring-petclinic
    Labels:       <none>
    Annotations:  <none>
    API Version:  argoproj.io/v1beta1
    Kind:         ArgoCD
    Metadata:
      Creation Timestamp:  2024-08-14T08:20:53Z
      Finalizers:
        argoproj.io/finalizer
      Generation:        3
      Resource Version:  60437
      UID:               57940e54-d60b-4c1a-bc4a-85c81c63ab69
    Spec:
      Aggregated Cluster Roles:  true
    ...
    Status:
      Application Controller:      Running
      Application Set Controller:  Unknown
      Phase:                       Available 
    1
    
      Redis:                       Running
      Repo:                        Running
      Server:                      Running
      Sso:                         Unknown
    Events:                        <none>
    Copy to Clipboard Toggle word wrap

    1
    Available 상태는 클러스터 범위의 Argo CD 인스턴스가 정상이고 사용 가능함을 나타냅니다.
    참고

    Red Hat OpenShift GitOps Operator는 다음과 같은 기본 클러스터 역할을 생성하고 관리합니다.

    • <argocd_name>-<argocd_namespace>-argocd-application-controller 집계 클러스터 역할
    • <argocd_name>-<argocd_namespace>-argocd-application-controller-view
    • <argocd_name>-<argocd_namespace>-argocd-application-controller-admin
  3. 다음 명령을 실행하여 Operator에서 Argo CD 애플리케이션 컨트롤러 및 Argo CD 서버 구성 요소에 대한 기본 클러스터 역할 및 클러스터 역할 바인딩을 생성했는지 확인합니다.

    $ oc get ClusterRoles -l app.kubernetes.io/part-of=argocd
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                                                           CREATED AT
    example-spring-petclinic-argocd-application-controller         2024-08-14T08:20:58Z
    example-spring-petclinic-argocd-application-controller-admin   2024-08-14T09:08:38Z
    example-spring-petclinic-argocd-application-controller-view    2024-08-14T09:08:38Z
    example-spring-petclinic-argocd-server                         2024-08-14T08:20:59Z
    Copy to Clipboard Toggle word wrap

    $ oc get ClusterRoleBindings -l app.kubernetes.io/part-of=argocd
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                                                     ROLE                                                                 AGE
    example-spring-petclinic-argocd-application-controller   ClusterRole/example-spring-petclinic-argocd-application-controller   54m
    example-spring-petclinic-argocd-server                   ClusterRole/example-spring-petclinic-argocd-server                   54m
    Copy to Clipboard Toggle word wrap

    viewadmin 클러스터 역할에 대한 클러스터 역할 바인딩은 생성되지 않습니다. viewadmin 클러스터 역할은 집계된 클러스터 역할에만 권한을 추가하고 Argo CD 애플리케이션 컨트롤러에 대한 권한을 직접 구성하지 않기 때문입니다.

    작은 정보

    또는 OpenShift Container Platform 웹 콘솔을 사용하여 관리자 화면에서 확인할 수 있습니다. 사용자 관리 → 역할사용자 관리 RoleBindings 로 각각 이동할 수 있습니다. app.kubernetes.io/part-of:argocd 레이블이 있는 클러스터 역할 및 클러스터 역할 바인딩을 검색할 수 있습니다.

  4. 다음 명령을 실행하여 생성된 역할의 출력 권한을 확인하여 집계된 클러스터 역할이 생성되었는지 확인합니다.

    $ oc get ClusterRole/<cluster_role_name> -o yaml 
    1
    Copy to Clipboard Toggle word wrap
    1
    & lt;cluster_role_name >을 생성된 역할의 이름으로 바꿉니다.

    집계된 클러스터 역할의 출력 예

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      annotations:
        argocds.argoproj.io/name: example
        argocds.argoproj.io/namespace: spring-petclinic
        kubectl.kubernetes.io/last-applied-configuration: |
          {"apiVersion":"argoproj.io/v1beta1","kind":"ArgoCD","metadata":{"annotations":{},"name":"example","namespace":"spring-petclinic"},"spec":{"aggregatedClusterRoles":true}}
        rbac.authorization.kubernetes.io/autoupdate: "true"
      creationTimestamp: "2024-08-14T08:20:58Z"
      labels:
        app.kubernetes.io/managed-by: spring-petclinic
        app.kubernetes.io/name: example
        app.kubernetes.io/part-of: argocd
      name: example-spring-petclinic-argocd-application-controller 
    1
    
      resourceVersion: "78640"
      uid: aeeb2ef5-b531-4fe3-a61a-b5ad8dd8ca6e
    aggregationRule: 
    2
    
      clusterRoleSelectors:
      - matchLabels:
          app.kubernetes.io/managed-by: spring-petclinic
          argocd/aggregate-to-controller: "true"
    rules: [] 
    3
    Copy to Clipboard Toggle word wrap

    1
    집계된 클러스터 역할의 이름입니다.
    2
    사전 정의된 라벨 목록은 집계된 클러스터 역할이 다른 사용자 정의 클러스터 역할의 권한을 상속할 수 있음을 나타냅니다.
    3
    사전 정의된 권한이 설정되어 있지 않습니다. 그러나 Operator가 < argocd_name>-<argocd_namespace>-argocd-application-controller-view 클러스터 역할을 즉시 생성하면 해당 사전 정의된 보기 권한이 집계된 클러스터 역할에 추가됩니다.

    view 클러스터 역할의 출력 예

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      annotations:
        argocds.argoproj.io/name: example
        argocds.argoproj.io/namespace: spring-petclinic
        kubectl.kubernetes.io/last-applied-configuration: |
          {"apiVersion":"argoproj.io/v1beta1","kind":"ArgoCD","metadata":{"annotations":{},"name":"example","namespace":"spring-petclinic"},"spec":{"aggregatedClusterRoles":true}}
      creationTimestamp: "2024-08-14T09:59:14Z"
      labels: 
    1
    
        app.kubernetes.io/managed-by: spring-petclinic
        app.kubernetes.io/name: example
        app.kubernetes.io/part-of: argocd
        argocd/aggregate-to-controller: "true"
      name: example-spring-petclinic-argocd-application-controller-view 
    2
    
      resourceVersion: "78639"
      uid: 068b8867-7a0c-4af3-a17a-0560a00eba41
    rules: 
    3
    
    - apiGroups:
      - '*'
      resources:
      - '*'
      verbs:
      - get
      - list
      - watch
    - nonResourceURLs:
      - '*'
      verbs:
      - get
      - list
    Copy to Clipboard Toggle word wrap

    1
    레이블은 사전 정의된 기존 집계 클러스터 역할의 목록과 일치합니다.
    2
    클러스터 역할의 이름입니다.
    3
    사전 정의된 보기 권한입니다. 이러한 권한은 기존 집계된 클러스터 역할에 추가됩니다.

    admin 클러스터 역할의 출력 예

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      annotations:
        argocds.argoproj.io/name: example
        argocds.argoproj.io/namespace: spring-petclinic
        kubectl.kubernetes.io/last-applied-configuration: |
          {"apiVersion":"argoproj.io/v1beta1","kind":"ArgoCD","metadata":{"annotations":{},"name":"example","namespace":"spring-petclinic"},"spec":{"aggregatedClusterRoles":true}}
        rbac.authorization.kubernetes.io/autoupdate: "true"
      creationTimestamp: "2024-08-14T09:59:15Z"
      labels: 
    1
    
        app.kubernetes.io/managed-by: spring-petclinic
        app.kubernetes.io/name: example
        app.kubernetes.io/part-of: argocd
        argocd/aggregate-to-controller: "true"
      name: example-spring-petclinic-argocd-application-controller-admin 
    2
    
      resourceVersion: "78642"
      uid: e2d35b6f-0832-4993-8b24-915a725454f9
    aggregationRule: 
    3
    
      clusterRoleSelectors:
      - matchLabels:
          app.kubernetes.io/managed-by: spring-petclinic
          argocd/aggregate-to-admin: "true"
    rules: null 
    4
    Copy to Clipboard Toggle word wrap

    1
    레이블은 사전 정의된 기존 집계 클러스터 역할의 목록과 일치합니다.
    2
    admin 클러스터 역할의 이름입니다.
    3
    사전 정의된 라벨 목록은 기존 < argocd_name>-<argocd_namespace>-argocd-application-controller-admin 클러스터 역할이 다른 사용자 정의 클러스터 역할의 권한을 상속할 수 있음을 나타냅니다.
    4
    하나 이상의 사용자 정의 클러스터 역할에 아직 권한이 정의되어 있지 않도록 지정합니다.
    작은 정보

    또는 OpenShift Container Platform 웹 콘솔을 사용하여 관리자 화면에서 확인할 수 있습니다. 사용자 관리 → 역할로 이동하여 필터 옵션을 사용하여 클러스터 전체 역할을 선택하고 집계된 클러스터 역할을 검색하고, 사용자 관리 및 관리자 클러스터 역할을 수 있습니다. 세부 정보 및 구성을 확인하려면 클러스터 역할을 열어야 합니다.

    클러스터 관리자는 이제 하나 이상의 사용자 정의 클러스터 역할을 생성하고 Argo CD 애플리케이션 컨트롤러에 대한 사용자 정의 권한을 구성할 수 있습니다.

클러스터 관리자는 집계된 클러스터 역할에 사용자 정의 권한을 추가하려면 하나 이상의 사용자 정의 클러스터 역할을 생성한 다음 클러스터 범위 Argo CD 인스턴스의 Argo CD 애플리케이션 컨트롤러 구성 요소에 대한 사용자 정의 권한을 구성해야 합니다.

사전 요구 사항

  • 클러스터 범위 Argo CD 인스턴스의 Argo CD 애플리케이션 컨트롤러 구성 요소에 대해 집계된 클러스터 역할을 생성했습니다.
  • Red Hat OpenShift GitOps Operator에서 생성 및 관리하는 다음과 같은 기본 클러스터 역할이 있습니다.

    • < argocd_name>-<argocd_namespace>-argocd-application-controller 가 사전 정의된 aggregationRule 필드를 사용하여 클러스터 역할을 집계했습니다.
    • <argocd_name>-<argocd_namespace>-argocd-application-controller-view 및 사전 정의된 보기 권한
    • 사전 정의된 권한이 없는 < argocd_name>-<argocd_namespace>-argocd-application-controller-admin

프로세스

  1. 다음 명령을 사용하여 필수 레이블 및 권한으로 새 클러스터 역할을 생성합니다.

    $ oc apply -n <namespace> -f <cluster_role_name>.yaml
    Copy to Clipboard Toggle word wrap

    다음과 같습니다.

    <namespace>
    정의된 네임스페이스의 이름을 지정합니다.
    <cluster_role_name>

    정의된 클러스터 역할 YAML 파일의 이름을 지정합니다.

    사용자 정의 클러스터 역할 YAML의 예

    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      name: user-application-controller 
    1
    
      labels: 
    2
    
        app.kubernetes.io/managed-by: spring-petclinic
        app.kubernetes.io/name: example
        app.kubernetes.io/part-of: argocd
        argocd/aggregate-to-admin: 'true'
    rules: 
    3
    
      - verbs:
          - '*'
        apiGroups:
          - ''
        resources:
          - namespaces
          - persistentvolumeclaims
          - persistentvolumes
          - configmaps
      - verbs:
          - '*'
        apiGroups:
          - compliance.openshift.io
        resources:
          - scansettingbindings
    Copy to Clipboard Toggle word wrap

    1
    사용자 정의 클러스터 역할의 이름입니다.
    2
    레이블은 기존 < argocd_name>-<argocd_namespace>-argocd-application-controller-admin 클러스터 역할의 사전 정의된 목록과 일치합니다.
    3
    < argocd_name>-<argocd_namespace>-argocd-application-controller-admin 클러스터 역할을 통해 집계된 클러스터 역할에 추가할 사용자 정의 권한입니다.
    작은 정보

    또는 웹 콘솔을 사용하여 관리자 화면에서 사용자 정의 클러스터 역할을 생성할 수 있습니다. 사용자 관리역할 → 역할 생성 으로 이동하여 이전 YAML 템플릿을 사용하여 권한을 추가하고 생성 을 클릭합니다.

    출력 예

    clusterrole.rbac.authorization.k8s.io/user-application-controller created
    Copy to Clipboard Toggle word wrap

    사용자 정의 클러스터 역할이 생성됩니다.

  2. 다음 명령을 실행하여 < argocd_name>-<argocd_namespace>-argocd-application-controller-admin 클러스터 역할이 사용자 정의 클러스터 역할의 권한을 상속하는지 확인합니다.

    $ oc get ClusterRole/<argocd_name>-<argocd_namespace>-argocd-application-controller-admin -o yaml
    Copy to Clipboard Toggle word wrap

    다음과 같습니다.

    <argocd_name>
    사용자 정의 클러스터 범위 Argo CD 인스턴스의 이름을 지정합니다.
    <argocd_namespace>

    Argo CD가 설치된 네임스페이스를 지정합니다.

    출력 예

    aggregationRule:
      clusterRoleSelectors:
      - matchLabels:
          app.kubernetes.io/managed-by: spring-petclinic
          argocd/aggregate-to-admin: "true"
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      annotations:
        argocds.argoproj.io/name: example
        argocds.argoproj.io/namespace: spring-petclinic
        kubectl.kubernetes.io/last-applied-configuration: |
          {"apiVersion":"argoproj.io/v1beta1","kind":"ArgoCD","metadata":{"annotations":{},"name":"example","namespace":"spring-petclinic"},"spec":{"aggregatedClusterRoles":true}}
      creationTimestamp: "2024-08-14T09:59:15Z"
      labels:
        app.kubernetes.io/managed-by: spring-petclinic
        app.kubernetes.io/name: example
        app.kubernetes.io/part-of: argocd
        argocd/aggregate-to-controller: "true"
      name: example-spring-petclinic-argocd-application-controller-admin
      resourceVersion: "79202"
      uid: e2d35b6f-0832-4993-8b24-915a725454f9
    rules:
    - apiGroups:
      - ""
      resources:
      - namespaces
      - persistentvolumeclaims
      - persistentvolumes
      - configmaps
      verbs:
      - '*'
    - apiGroups:
      - compliance.openshift.io
      resources:
      - scansettingbindings
      verbs:
      - '*'
    Copy to Clipboard Toggle word wrap

    작은 정보

    또는 OpenShift Container Platform 웹 콘솔을 사용하여 관리자 화면에서 확인할 수 있습니다. 사용자 관리 → 역할로 이동하여 필터 옵션을 사용하여 클러스터 전체 역할을 선택하고 < argocd_name>-<argocd_namespace>-argocd-application-controller-admin 클러스터 역할을 검색할 수 있습니다. 세부 정보 및 구성을 확인하려면 클러스터 역할을 열어야 합니다.

  3. 다음 명령을 실행하여 < argocd_name>-<argocd_namespace>-argocd_application-controller 집계 클러스터 역할에서 < argocd_name>-<argocd_namespace>-argocd_namespace>-argocd-application-controller-admin 및 < argocd_name>-<argocd_namespace>-argocd_controller-view 의 권한을 상속하는지 확인합니다.

    $ oc get ClusterRole/<argocd_name>-<argocd_namespace>-argocd-application-controller -o yaml
    Copy to Clipboard Toggle word wrap

    다음과 같습니다.

    <argocd_name>
    사용자 정의 클러스터 범위 Argo CD 인스턴스의 이름을 지정합니다.
    <argocd_namespace>

    Argo CD가 설치된 네임스페이스를 지정합니다.

    집계된 클러스터 역할의 출력 예

    aggregationRule:
      clusterRoleSelectors:
      - matchLabels:
          app.kubernetes.io/managed-by: spring-petclinic
          argocd/aggregate-to-controller: "true"
    apiVersion: rbac.authorization.k8s.io/v1
    kind: ClusterRole
    metadata:
      annotations:
        argocds.argoproj.io/name: example
        argocds.argoproj.io/namespace: spring-petclinic
        kubectl.kubernetes.io/last-applied-configuration: |
          {"apiVersion":"argoproj.io/v1beta1","kind":"ArgoCD","metadata":{"annotations":{},"name":"example","namespace":"spring-petclinic"},"spec":{"aggregatedClusterRoles":true}}
        rbac.authorization.kubernetes.io/autoupdate: "true"
      creationTimestamp: "2024-08-14T08:20:58Z"
      labels:
        app.kubernetes.io/managed-by: spring-petclinic
        app.kubernetes.io/name: example
        app.kubernetes.io/part-of: argocd
      name: example-spring-petclinic-argocd-application-controller
      resourceVersion: "79203"
      uid: aeeb2ef5-b531-4fe3-a61a-b5ad8dd8ca6e
    rules:
    - apiGroups:
      - ""
      resources:
      - namespaces
      - persistentvolumeclaims
      - persistentvolumes
      - configmaps
      verbs:
      - '*'
    - apiGroups:
      - compliance.openshift.io
      resources:
      - scansettingbindings
      verbs:
      - '*'
    - apiGroups:
      - '*'
      resources:
      - '*'
      verbs:
      - get
      - list
      - watch
    - nonResourceURLs:
      - '*'
      verbs:
      - get
      - list
    Copy to Clipboard Toggle word wrap

    작은 정보

    또는 OpenShift Container Platform 웹 콘솔을 사용하여 관리자 화면에서 확인할 수 있습니다. 사용자 관리 → 역할로 이동하여 필터 옵션을 사용하여 클러스터 전체 역할을 선택한 다음 집계된 클러스터 역할을 검색할 수 있습니다. 세부 정보 및 구성을 확인하려면 클러스터 역할을 열어야 합니다.

4장. Argo CD Application Controller 복제본에 클러스터 분할

컨트롤러가 너무 많은 클러스터를 관리하고 너무 많은 메모리를 사용하는 경우 여러 Argo CD Application Controller 복제본에 클러스터를 분할할 수 있습니다.

4.1. 라운드 로빈 분할 알고리즘 활성화

중요

라운드 로빈 분할 알고리즘은 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.

Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.

기본적으로 Argo CD 애플리케이션 컨트롤러는 비균일 레거시 해시 기반 샤딩 알고리즘을 사용하여 클러스터를 shard에 할당합니다. 이로 인해 클러스터 배포가 해제될 수 있습니다. 라운드 로빈 샤딩 알고리즘을 활성화하여 모든 shard에서 동일한 클러스터 배포를 수행할 수 있습니다.

Red Hat OpenShift GitOps에서 라운드 로빈 샤딩 알고리즘을 사용하면 다음과 같은 이점이 있습니다.

  • 보다 균형 있는 워크로드 분배를 보장합니다.
  • shard가 과부하되거나 활용도가 낮은 것을 방지
  • 컴퓨팅 리소스의 효율성 최적화
  • 병목 현상의 위험 감소
  • Argo CD 시스템의 전반적인 성능 및 안정성 개선

대체 샤딩 알고리즘을 도입하면 특정 사용 사례에 따라 추가 사용자 정의가 가능합니다. 배포 요구 사항에 가장 적합한 알고리즘을 선택할 수 있으므로 다양한 운영 시나리오에서 유연성 및 조정 가능성이 향상됩니다.

작은 정보

GitOps의 대체 샤딩 알고리즘의 이점을 활용하려면 배포 중에 샤딩을 활성화하는 것이 중요합니다.

4.1.1. 웹 콘솔에서 라운드 로빈 분할 알고리즘 활성화

OpenShift Container Platform 웹 콘솔을 사용하여 라운드 로빈 분할 알고리즘을 활성화할 수 있습니다.

사전 요구 사항

  • OpenShift Container Platform 클러스터에 Red Hat OpenShift GitOps Operator를 설치했습니다.
  • OpenShift Container Platform 웹 콘솔에 액세스할 수 있습니다.
  • cluster-admin 권한이 있는 클러스터에 액세스할 수 있습니다.

프로세스

  1. 웹 콘솔의 관리자 화면에서 Operator설치된 Operator 로 이동합니다.
  2. 설치된 Operator에서 Red Hat OpenShift GitOps 를 클릭하고 Argo CD 탭으로 이동합니다.
  3. 라운드 로빈 샤딩 알고리즘을 활성화하려는 Argo CD 인스턴스를 클릭합니다(예: openshift-gitops ).
  4. YAML 탭을 클릭하고 다음 예와 같이 YAML 파일을 편집합니다.

    라운드 로빈 분할 알고리즘이 활성화된 Argo CD 인스턴스의 예

    apiVersion: argoproj.io/v1beta1
    kind: ArgoCD
    metadata:
      name: openshift-gitops
      namespace: openshift-gitops
    spec:
      controller:
        sharding:
          enabled: true 
    1
    
          replicas: 3 
    2
    
        env: 
    3
    
          - name: ARGOCD_CONTROLLER_SHARDING_ALGORITHM
            value: round-robin
        logLevel: debug 
    4
    Copy to Clipboard Toggle word wrap

    1
    sharding.enabled 매개변수를 true 로 설정하여 sharding을 활성화합니다.
    2
    복제본 수를 원하는 값으로 설정합니다(예: 3 ).
    3
    분할 알고리즘을 라운드 로빈 으로 설정합니다.
    4
    각 클러스터가 연결된 shard를 확인할 수 있도록 로그 수준을 debug 로 설정합니다.
  5. 저장을 클릭합니다.

    성공 알림 경고 openshift-gitops가 <version> 버전으로 업데이트되었습니다.

    참고

    기본 openshift-gitops 인스턴스를 편집하면 Managed 리소스 대화 상자가 표시됩니다. 저장을 다시 클릭하여 변경 사항을 확인합니다.

  6. 다음 단계를 수행하여 shard링 알고리즘으로 라운드 로빈 을 사용하여 shard링이 활성화되었는지 확인합니다.

    1. 워크로드StatefulSets 로 이동합니다.
    2. 프로젝트 드롭다운 목록에서 Argo CD 인스턴스를 설치한 네임스페이스를 선택합니다.
    3. < instance_name>-application-controller (예: openshift-gitops-application-controller )를 클릭하고 Pod 탭으로 이동합니다.
    4. 생성된 애플리케이션 컨트롤러 Pod 수를 확인합니다. 세트 복제본 수에 해당해야 합니다.
    5. 검사할 컨트롤러 Pod를 클릭하고 로그 탭으로 이동하여 Pod 로그를 확인합니다.

      컨트롤러 Pod 로그 조각의 예

      time="2023-12-13T09:05:34Z" level=info msg="ArgoCD Application Controller is starting" built="2023-12-01T19:21:49Z" commit=a3vd5c3df52943a6fff6c0rg181fth3248976299 namespace=openshift-gitops version=v2.9.2+c5ea5c4
      time="2023-12-13T09:05:34Z" level=info msg="Processing clusters from shard 1"
      time="2023-12-13T09:05:34Z" level=info msg="Using filter function:  round-robin" 
      1
      
      time="2023-12-13T09:05:34Z" level=info msg="Using filter function:  round-robin"
      time="2023-12-13T09:05:34Z" level=info msg="appResyncPeriod=3m0s, appHardResyncPeriod=0s"
      Copy to Clipboard Toggle word wrap

      1
      " filter function: round-robin" 메시지를 찾습니다.
    6. 로그 검색 필드에서 shard로 처리된 프로세스를 검색하여 다음 예와 같이 shard 간 클러스터 배포가 짝인지 확인합니다.

      중요

      이러한 로그를 관찰하도록 디버그 하도록 로그 수준을 설정해야 합니다.

      컨트롤러 Pod 로그 조각의 예

      time="2023-12-13T09:05:34Z" level=debug msg="ClustersList has 3 items"
      time="2023-12-13T09:05:34Z" level=debug msg="Adding cluster with id= and name=in-cluster to cluster's map"
      time="2023-12-13T09:05:34Z" level=debug msg="Adding cluster with id=068d8b26-6rhi-4w23-jrf6-wjjfyw833n23 and name=in-cluster2 to cluster's map"
      time="2023-12-13T09:05:34Z" level=debug msg="Adding cluster with id=836d8b53-96k4-f68r-8wq0-sh72j22kl90w and name=in-cluster3 to cluster's map"
      time="2023-12-13T09:05:34Z" level=debug msg="Cluster with id= will be processed by shard 0" 
      1
      
      time="2023-12-13T09:05:34Z" level=debug msg="Cluster with id=068d8b26-6rhi-4w23-jrf6-wjjfyw833n23 will be processed by shard 1" 
      2
      
      time="2023-12-13T09:05:34Z" level=debug msg="Cluster with id=836d8b53-96k4-f68r-8wq0-sh72j22kl90w will be processed by shard 2" 
      3
      Copy to Clipboard Toggle word wrap

      1 2 3
      이 예에서는 3개의 클러스터가 shard 0, shard 1 및 shard 2에 연속으로 연결됩니다.
      참고

      "C" 클러스터 수가 shard 복제본 "R"의 배수인 경우 각 shard에 할당된 클러스터 "N"이 동일한 "C"가 "R"으로 나누어야 합니다. 이전 예제에서는 3개의 클러스터와 3개의 복제본을 표시하므로 각 shard에는 클러스터가 1개씩 할당됩니다.

4.1.2. CLI를 사용하여 라운드 로빈 분할 알고리즘 활성화

명령줄 인터페이스를 사용하여 라운드 로빈 샤딩 알고리즘을 활성화할 수 있습니다.

사전 요구 사항

  • OpenShift Container Platform 클러스터에 Red Hat OpenShift GitOps Operator를 설치했습니다.
  • cluster-admin 권한이 있는 클러스터에 액세스할 수 있습니다.

프로세스

  1. 다음 명령을 실행하여 분할을 활성화하고 원하는 값으로 복제본 수를 설정합니다.

    $ oc patch argocd <argocd_instance> -n <namespace> --patch='{"spec":{"controller":{"sharding":{"enabled":true,"replicas":<value>}}}}' --type=merge
    Copy to Clipboard Toggle word wrap

    출력 예

    argocd.argoproj.io/<argocd_instance> patched
    Copy to Clipboard Toggle word wrap

  2. 다음 명령을 실행하여 라운드 로빈 으로 분할 알고리즘을 구성합니다.

    $ oc patch argocd <argocd_instance> -n <namespace> --patch='{"spec":{"controller":{"env":[{"name":"ARGOCD_CONTROLLER_SHARDING_ALGORITHM","value":"round-robin"}]}}}' --type=merge
    Copy to Clipboard Toggle word wrap

    출력 예

    argocd.argoproj.io/<argocd_instance> patched
    Copy to Clipboard Toggle word wrap

  3. 다음 명령을 실행하여 Argo CD Application Controller Pod의 수가 세트 복제본 수에 해당하는지 확인합니다.

    $ oc get pods -l app.kubernetes.io/name=<argocd_instance>-application-controller -n <namespace>
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                                        READY   STATUS    RESTARTS   AGE
    <argocd_instance>-application-controller-0   1/1     Running   0          11s
    <argocd_instance>-application-controller-1   1/1     Running   0          32s
    <argocd_instance>-application-controller-2   1/1     Running   0          22s
    Copy to Clipboard Toggle word wrap

  4. 다음 명령을 실행하여 분할 알고리즘으로 라운드 로빈 알고리즘을 사용하여 샤딩이 활성화되었는지 확인합니다.

    $ oc logs <argocd_application_controller_pod> -n <namespace>
    Copy to Clipboard Toggle word wrap

    출력 조각의 예

    time="2023-12-13T09:05:34Z" level=info msg="ArgoCD Application Controller is starting" built="2023-12-01T19:21:49Z" commit=a3vd5c3df52943a6fff6c0rg181fth3248976299 namespace=<namespace> version=v2.9.2+c5ea5c4
    time="2023-12-13T09:05:34Z" level=info msg="Processing clusters from shard 1"
    time="2023-12-13T09:05:34Z" level=info msg="Using filter function:  round-robin" 
    1
    
    time="2023-12-13T09:05:34Z" level=info msg="Using filter function:  round-robin"
    time="2023-12-13T09:05:34Z" level=info msg="appResyncPeriod=3m0s, appHardResyncPeriod=0s"
    Copy to Clipboard Toggle word wrap

    1
    " filter function: round-robin" 메시지를 찾습니다.
  5. 다음 단계를 수행하여 shard 간 클러스터 배포가 있는지 확인합니다.

    1. 다음 명령을 실행하여 로그 수준을 debug 로 설정합니다.

      $ oc patch argocd <argocd_instance> -n <namespace> --patch='{"spec":{"controller":{"logLevel":"debug"}}}' --type=merge
      Copy to Clipboard Toggle word wrap

      출력 예

      argocd.argoproj.io/<argocd_instance> patched
      Copy to Clipboard Toggle word wrap

    2. 로그를 보고 shard에서 처리된 를 검색하여 다음 명령을 실행하여 각 클러스터가 연결된 shard를 관찰합니다.

      $ oc logs <argocd_application_controller_pod> -n <namespace> | grep "processed by shard"
      Copy to Clipboard Toggle word wrap

      출력 조각의 예

      time="2023-12-13T09:05:34Z" level=debug msg="Cluster with id= will be processed by shard 0" 
      1
      
      time="2023-12-13T09:05:34Z" level=debug msg="Cluster with id=068d8b26-6rhi-4w23-jrf6-wjjfyw833n23 will be processed by shard 1" 
      2
      
      time="2023-12-13T09:05:34Z" level=debug msg="Cluster with id=836d8b53-96k4-f68r-8wq0-sh72j22kl90w will be processed by shard 2" 
      3
      Copy to Clipboard Toggle word wrap

      1 2 3
      이 예에서는 3개의 클러스터가 shard 0, shard 1 및 shard 2에 연속으로 연결됩니다.
      참고

      "C" 클러스터 수가 shard 복제본 "R"의 배수인 경우 각 shard에 할당된 클러스터 "N"이 동일한 "C"가 "R"으로 나누어야 합니다. 이전 예제에서는 3개의 클러스터와 3개의 복제본을 표시하므로 각 shard에는 클러스터가 1개씩 할당됩니다.

4.2. Argo CD 애플리케이션 컨트롤러의 shard 동적 스케일링 활성화

중요

shard의 동적 확장은 기술 프리뷰 기능 전용입니다. 기술 프리뷰 기능은 Red Hat 프로덕션 서비스 수준 계약(SLA)에서 지원되지 않으며 기능적으로 완전하지 않을 수 있습니다. 따라서 프로덕션 환경에서 사용하는 것은 권장하지 않습니다. 이러한 기능을 사용하면 향후 제품 기능을 조기에 이용할 수 있어 개발 과정에서 고객이 기능을 테스트하고 피드백을 제공할 수 있습니다.

Red Hat 기술 프리뷰 기능의 지원 범위에 대한 자세한 내용은 기술 프리뷰 기능 지원 범위를 참조하십시오.

기본적으로 Argo CD 애플리케이션 컨트롤러는 클러스터를 shard에 무기한 할당합니다. 라운드 로빈 샤딩 알고리즘을 사용하는 경우 이 정적 할당으로 인해 특히 복제본이 추가되거나 제거될 때 shard가 균등하게 분산될 수 있습니다. shard의 동적 스케일링을 활성화하여 Argo CD 애플리케이션 컨트롤러에서 관리하는 클러스터 수에 따라 shard 수를 자동으로 조정할 수 있습니다. 이렇게 하면 shard가 잘 균형을 유지하고 컴퓨팅 리소스 사용을 최적화합니다.

참고

동적 스케일링을 활성화한 후에는 shard 수를 수동으로 수정할 수 없습니다. 이 시스템은 Argo CD 애플리케이션 컨트롤러에서 관리하는 클러스터 수에 따라 shard 수를 자동으로 조정합니다.

4.2.1. 웹 콘솔에서 shard의 동적 스케일링 활성화

OpenShift Container Platform 웹 콘솔을 사용하여 shard의 동적 확장을 활성화할 수 있습니다.

사전 요구 사항

  • cluster-admin 권한이 있는 클러스터에 액세스할 수 있습니다.
  • OpenShift Container Platform 웹 콘솔에 액세스할 수 있습니다.
  • OpenShift Container Platform 클러스터에 Red Hat OpenShift GitOps Operator를 설치했습니다.

프로세스

  1. OpenShift Container Platform 웹 콘솔의 관리자 화면에서 Operator → 설치된 Operator 로 이동합니다.
  2. 설치된 Operator 목록에서 Red Hat OpenShift GitOps Operator를 선택한 다음 ArgoCD 탭을 클릭합니다.
  3. shard의 동적 스케일링을 활성화할 Argo CD 인스턴스 이름을 선택합니다(예: openshift-gitops ).
  4. YAML 탭을 클릭한 다음 spec.controller.sharding 속성을 다음과 같이 편집하고 구성합니다.

    동적 확장이 활성화된 Argo CD YAML 파일의 예

    apiVersion: argoproj.io/v1beta1
    kind: ArgoCD
    metadata:
      name: openshift-gitops
      namespace: openshift-gitops
    spec:
      controller:
        sharding:
          dynamicScalingEnabled: true 
    1
    
          minShards: 1 
    2
    
          maxShards: 3 
    3
    
          clustersPerShard: 1 
    4
    Copy to Clipboard Toggle word wrap

    1
    동적 확장을 활성화하려면 dynamicScalingEnabledtrue 로 설정합니다.
    2
    minShards 를 원하는 최소 shard 수로 설정합니다. 값을 1 이상으로 설정해야 합니다.
    3
    maxShards 를 보유할 최대 shard 수로 설정합니다. 값은 minShards 값보다 커야 합니다.
    4
    clustersPerShard 를 shard당 보유할 클러스터 수로 설정합니다. 값을 1 이상으로 설정해야 합니다.
  5. 저장을 클릭합니다.

    성공 알림 경고 openshift-gitops가 <version> 버전으로 업데이트되었습니다.

    참고

    기본 openshift-gitops 인스턴스를 편집하면 Managed 리소스 대화 상자가 표시됩니다. 저장을 다시 클릭하여 변경 사항을 확인합니다.

검증

네임스페이스의 Pod 수를 확인하여 분할이 활성화되었는지 확인합니다.

  1. 워크로드StatefulSets 로 이동합니다.
  2. 프로젝트 드롭다운 목록에서 Argo CD 인스턴스가 배포된 네임스페이스를 선택합니다(예: openshift-gitops ).
  3. Argo CD 인스턴스의 이름이 있는 StatefulSet 오브젝트의 이름을 클릭합니다(예: openshift-gitops-apllication-controller ).
  4. Pods 탭을 클릭한 다음 Argo CD YAML 파일에 설정한 minShards 값보다 크거나 같은 Pod 수가 있는지 확인합니다.

4.2.2. CLI를 사용하여 shard의 동적 확장 활성화

OpenShift CLI(oc)를 사용하여 shard의 동적 확장을 활성화할 수 있습니다.

사전 요구 사항

  • OpenShift Container Platform 클러스터에 Red Hat OpenShift GitOps Operator를 설치했습니다.
  • cluster-admin 권한이 있는 클러스터에 액세스할 수 있습니다.

프로세스

  1. oc 툴을 cluster-admin 권한이 있는 사용자로 사용하여 클러스터에 로그인합니다.
  2. 다음 명령을 실행하여 동적 스케일링을 활성화합니다.

    $ oc patch argocd <argocd_instance> -n <namespace> --type=merge --patch='{"spec":{"controller":{"sharding":{"dynamicScalingEnabled":true,"minShards":<value>,"maxShards":<value>,"clustersPerShard":<value>}}}}'
    Copy to Clipboard Toggle word wrap

    명령 예

    $ oc patch argocd openshift-gitops -n openshift-gitops --type=merge --patch='{"spec":{"controller":{"sharding":{"dynamicScalingEnabled":true,"minShards":1,"maxShards":3,"clustersPerShard":1}}}}' 
    1
    Copy to Clipboard Toggle word wrap

    1
    예제 명령은 openshift-gitops 네임스페이스에서 openshift-gitops Argo CD 인스턴스에 대한 동적 스케일링을 활성화하고 최소 shard 수를 1 로, 최대 shard 수는 3, shard당 클러스터 수를 1 로 설정합니다. minShardclustersPerShard 의 값을 1 이상으로 설정해야 합니다. maxShard 의 값은 minShard 값보다 크거나 같아야 합니다.

    출력 예

    argocd.argoproj.io/openshift-gitops patched
    Copy to Clipboard Toggle word wrap

검증

  1. Argo CD 인스턴스의 spec.controller.sharding 속성을 확인합니다.

    $ oc get argocd <argocd_instance> -n <namespace> -o jsonpath='{.spec.controller.sharding}'
    Copy to Clipboard Toggle word wrap

    명령 예

    $ oc get argocd openshift-gitops -n openshift-gitops -o jsonpath='{.spec.controller.sharding}'
    Copy to Clipboard Toggle word wrap

    shard의 동적 스케일링이 활성화된 경우 출력 예

    {"dynamicScalingEnabled":true,"minShards":1,"maxShards":3,"clustersPerShard":1}
    Copy to Clipboard Toggle word wrap

  2. 선택 사항: OpenShift Container Platform 웹 콘솔에서 Argo CD 인스턴스의 구성 YAML 파일에서 구성된 spec.controller.sharding 속성을 확인하여 동적 확장이 활성화되어 있는지 확인합니다.
  3. Argo CD 애플리케이션 컨트롤러 Pod 수를 확인합니다.

    $ oc get pods -n <namespace> -l app.kubernetes.io/name=<argocd_instance>-application-controller
    Copy to Clipboard Toggle word wrap

    명령 예

    $ oc get pods -n openshift-gitops -l app.kubernetes.io/name=openshift-gitops-application-controller
    Copy to Clipboard Toggle word wrap

    출력 예

    NAME                                           READY   STATUS    RESTARTS   AGE
    openshift-gitops-application-controller-0      1/1     Running   0          2m  
    1
    Copy to Clipboard Toggle word wrap

    1
    Argo CD 애플리케이션 컨트롤러 Pod의 수는 minShard 값보다 크거나 같아야 합니다.

법적 공지

Copyright © 2025 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.
맨 위로 이동
Red Hat logoGithubredditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

Theme

© 2025 Red Hat