19.17. GitOps ZTP 문제 해결

앞에서 설명했듯이 ArgoCD 파이프라인은 Git 리포지토리의 SiteConfigPolicyGenTemplate 사용자 정의 리소스(CR)를 허브 클러스터로 동기화합니다. 이 프로세스 중에 동기화 후 후크는 hub 클러스터에도 적용되는 설치 및 정책 CR을 생성합니다. 다음 절차에 따라 이 프로세스에서 발생할 수 있는 문제를 해결합니다.

19.17.1. 설치 CR 생성 검증

site Config는 사이트 이름과 일치하는 이름을 가진 네임스페이스의 hub 클러스터에 설치 CR(사용자 정의 리소스)을 적용합니다. 상태를 확인하려면 다음 명령을 입력합니다.

$ oc get AgentClusterInstall -n <cluster_name>

오브젝트가 반환되지 않으면 다음 절차를 사용하여 SiteConfig 에서 설치 CR로 ArgoCD 파이프라인 흐름의 문제를 해결합니다.

절차

  1. 다음 명령 중 하나를 사용하여 SiteConfig 와 hub 클러스터의 동기화를 확인합니다.

    $ oc get siteconfig -A

    또는

    $ oc get siteconfig -n clusters-sub

    SiteConfig 가 누락된 경우 다음 상황 중 하나가 발생했습니다.

    • 클러스터 애플리케이션이 Git 리포지토리의 CR을 허브에 동기화하지 못했습니다. 다음 명령을 사용하여 다음을 확인합니다.

      $ oc describe -n openshift-gitops application clusters

      Status: Synced (상태: 동기화)를 확인하고 Revision: 이 서브스크립션된 리포지토리로 내보낸 커밋의 SHA인지 확인합니다.

    • 컨테이너 이미지를 가져오지 못했으므로 사전 동기화 후크가 실패했습니다. 클러스터 애플리케이션에서 사전 동기화 작업의 상태가 ArgoCD 대시보드를 확인합니다.
  2. 사후 후크 작업이 실행되었는지 확인합니다.

    $ oc describe job -n clusters-sub siteconfig-post
    • 성공하면 반환된 출력이 성공한 것으로 표시됩니다. 1.
    • 작업이 실패하면 ArgoCD에서 다시 시도합니다. 경우에 따라 첫 번째 통과가 실패하고 두 번째 통과는 작업이 통과되었음을 나타냅니다.
  3. 사후 후크 작업에 오류가 있는지 확인합니다.

    $ oc get pod -n clusters-sub

    siteconfig-post-xxxxx 포드의 이름을 확인합니다.

    $ oc logs -n clusters-sub siteconfig-post-xxxxx

    로그에 오류가 표시되면 조건을 수정하고 수정된 SiteConfig 또는 PolicyGenTemplate 을 Git 리포지토리로 내보냅니다.

19.17.2. 정책 CR 생성 검증

ArgoCD는 생성된 PolicyGenTemplate 과 동일한 네임스페이스에 정책 CR(사용자 정의 리소스)을 생성합니다. 동일한 문제 해결 흐름은 공통, 그룹 또는 사이트 기반 여부와 관계없이 PolicyGenTemplates 에서 생성된 모든 정책 CR에 적용됩니다.

정책 CR의 상태를 확인하려면 다음 명령을 입력합니다.

$ export NS=<namespace>
$ oc get policy -n $NS

반환된 출력에는 예상 정책 래핑 CR 세트가 표시됩니다. 오브젝트가 반환되지 않으면 다음 절차를 사용하여 SiteConfig 에서 정책 CR로 ArgoCD 파이프라인 흐름의 문제를 해결합니다.

절차

  1. PolicyGenTemplate 과 hub 클러스터의 동기화를 확인합니다.

    $ oc get policygentemplate -A

    또는

    $ oc get policygentemplate -n $NS

    PolicyGenTemplate 이 동기화되지 않으면 다음 상황 중 하나가 발생했습니다.

    • 클러스터 애플리케이션이 Git 리포지토리의 CR을 허브에 동기화하지 못했습니다. 다음 명령을 사용하여 다음을 확인합니다.

      $ oc describe -n openshift-gitops application clusters

      Status: Synced (상태: 동기화)를 확인하고 Revision: 이 서브스크립션된 리포지토리로 내보낸 커밋의 SHA인지 확인합니다.

    • 컨테이너 이미지를 가져오지 못했으므로 사전 동기화 후크가 실패했습니다. 클러스터 애플리케이션에서 사전 동기화 작업의 상태가 ArgoCD 대시보드를 확인합니다.
  2. 정책이 클러스터 네임스페이스에 복사되었는지 확인합니다. ACM에서 정책이 ManagedCluster 에 적용됨을 인식하면 ACM은 policy CR 오브젝트를 클러스터 네임스페이스에 적용합니다.

    $ oc get policy -n <cluster_name>

    ACM은 여기에 적용되는 모든 공통, 그룹 및 사이트 정책을 복사합니다. 정책 이름은 <policyNamespace><policyName> 입니다.

  3. 클러스터 네임스페이스에 복사되지 않은 정책에 대한 배치 규칙을 확인합니다. 해당 정책에 대한 PlacementRulematchSelectorManagedCluster 의 라벨과 일치해야 합니다.

    $ oc get placementrule -n $NS
  4. 공통, 그룹 또는 사이트 정책이 누락된 경우 PlacementRule 이름을 기록해 두십시오.

     oc get placementrule -n $NS <placmentRuleName> -o yaml
    • 상태 결정 값에는 클러스터 이름이 포함되어야 합니다.
    • 사양의 matchSelector 키 값은 관리 클러스터의 라벨과 일치해야 합니다. ManagedCluster 의 라벨을 확인합니다.

       oc get ManagedCluster $CLUSTER -o jsonpath='{.metadata.labels}' | jq

      예제

      apiVersion: apps.open-cluster-management.io/v1
      kind: PlacementRule
      metadata:
        name: group-test1-policies-placementrules
        namespace: group-test1-policies
      spec:
        clusterSelector:
          matchExpressions:
          - key: group-test1
            operator: In
            values:
            - ""
      status:
        decisions:
        - clusterName: <cluster_name>
          clusterNamespace: <cluster_name>

  5. 모든 정책이 준수되었는지 확인합니다.

     oc get policy -n $CLUSTER

    네임스페이스, OperatorGroup 및 서브스크립션 정책이 호환되지만 Operator 구성 정책은 설치되지 않은 경우가 많습니다.