19.16. 여러 관리 클러스터에 대한 ZTP 사용자 정의 리소스 생성

여러 관리 클러스터를 설치하는 경우 제로 터치 프로비저닝(ZTP)은 ArgoCD 및 SiteConfig 를 사용하여 CR(사용자 정의 리소스)을 생성하고 여러 클러스터에 대한 정책을 생성하여 GitOps 접근법을 사용하여 100개 이하의 배치로 여러 클러스터에 대한 정책을 생성하고 적용합니다.

클러스터 설치 및 배포는 다음과 같이 2단계 프로세스입니다.

클러스터 설치 및 배포를 위한 GitOps 접근 방식

19.16.1. ZTP 파이프라인 배포를 위한 사전 요구 사항

  • OpenShift Container Platform 클러스터 버전 4.8 이상 및 Red Hat GitOps Operator가 설치되어 있습니다.
  • RHACM(Red Hat Advanced Cluster Management) 버전 2.3 이상이 설치되어 있습니다.
  • 연결이 끊긴 환경의 경우 허브 클러스터에서 소스 데이터 Git 리포지토리 및 ztp-site-generator 컨테이너 이미지에 액세스할 수 있는지 확인합니다.
  • 정책에 대한 추가 설치 매니페스트 또는 CR(사용자 정의 리소스)과 같은 추가 사용자 정의 콘텐츠를 원하는 경우 /usr/src/hook/ztp/source-crs/extra-manifest/ 디렉터리에 추가합니다. 마찬가지로 PolicyGenTemplate 에서 참조한 대로 /usr/src/hook/ztp/source-crs/ 디렉터리에 추가 구성 CR을 추가할 수 있습니다.

    • Red Hat 제공 이미지에 추가 매니페스트를 추가하는 Containerfile 을 생성합니다. 예를 들면 다음과 같습니다.

      FROM <registry fqdn>/ztp-site-generator:latest 1
      COPY myInstallManifest.yaml /usr/src/hook/ztp/source-crs/extra-manifest/
      COPY mySourceCR.yaml /usr/src/hook/ztp/source-crs/
      1
      <registry fqdn>은 Red Hat에서 제공하는 ztp-site-generator 컨테이너 이미지가 포함된 레지스트리를 가리켜야 합니다.
    • 이러한 추가 파일이 포함된 새 컨테이너 이미지를 빌드합니다.

      $> podman build Containerfile.example

19.16.2. GitOps ZTP 파이프라인 설치

이 섹션의 절차에서는 다음 작업을 완료하는 방법을 설명합니다.

  • 사이트 구성 데이터를 호스팅하는 데 필요한 Git 리포지토리를 준비합니다.
  • 필요한 설치 및 정책 CR(사용자 정의 리소스)을 생성하도록 허브 클러스터를 구성합니다.
  • 제로 터치 프로비저닝(ZTP)을 사용하여 관리 클러스터를 배포합니다.

19.16.2.1. ZTP Git 리포지토리 준비

사이트 구성 데이터를 호스팅하기 위한 Git 리포지토리를 생성합니다. 제로 터치 프로비저닝(ZTP) 파이프라인에는 이 리포지토리에 대한 읽기 권한이 필요합니다.

절차

  1. SiteConfigPolicyGenTemplate 사용자 정의 리소스(CR)에 대해 별도의 경로를 사용하여 디렉터리 구조를 생성합니다.
  2. resource -hook-example/<policygentemplates>/에서 PolicyGenTemplate CR의 경로에 pre- sync.yaml 및 post -sync.yaml을 추가합니다.
  3. resource -hook -example/<siteconfig>/에서 pre- sync.yaml 및 post -sync.yaml을 SiteConfig CR 경로에 추가합니다.

    참고

    허브 클러스터가 연결이 끊긴 환경에서 작동하는 경우 사전 및 사후 동기화 후크 CR 모두의 이미지를 업데이트해야 합니다.

  4. policygentemplates.ran.openshift.iositeconfigs.ran.openshift.io CR 정의를 적용합니다.

19.16.2.2. ZTP를 위한 허브 클러스터 준비

제로 터치 프로비저닝(ZTP) GitOps 플로우를 기반으로 각 사이트에 필요한 설치 및 정책 CR(사용자 정의 리소스)을 생성하는 ArgoCD 애플리케이션 세트로 허브 클러스터를 구성할 수 있습니다.

절차

  1. hub 클러스터에 Red Hat OpenShift GitOps Operator를 설치합니다.
  2. ArgoCD의 관리자 암호를 추출합니다.

    $ oc get secret openshift-gitops-cluster -n openshift-gitops -o jsonpath='{.data.admin\.password}' | base64 -d
  3. ArgoCD 파이프라인 구성을 준비합니다.

    1. 최신 컨테이너 이미지 버전을 사용하여 ZTP 사이트 생성기 컨테이너에서 ArgoCD 배포 CR을 추출합니다.

      $ mkdir ztp
      $ podman run --rm -v `pwd`/ztp:/mnt/ztp:Z registry.redhat.io/openshift4/ztp-site-generate-rhel8:v4.9.0-1 /bin/bash -c "cp -ar /usr/src/hook/ztp/* /mnt/ztp/"

      이 섹션의 나머지 단계는 ztp/gitops-subscriptions/argocd/ 디렉터리와 관련이 있습니다.

    2. 두 ArgoCD 애플리케이션, deployment /clusters-app.yaml 및 deployment/policies- app.yaml 의 소스 값을 적절한 URL, targetRevision 분기 및 경로 값으로 수정합니다. 경로 값은 Git 리포지토리에 사용된 값과 일치해야 합니다.

      deployment/clusters-app.yaml 수정 :

      apiVersion: v1
      kind: Namespace
      metadata:
           name: clusters-sub
      ---
      apiVersion: argoproj.io/v1alpha1
      kind: Application
      metadata:
           name: clusters
           namespace: openshift-gitops
      spec:
          destination:
               server: https://kubernetes.default.svc
               namespace: clusters-sub
        project: default
        source:
            path: ztp/gitops-subscriptions/argocd/resource-hook-example/siteconfig 1
            repoURL: https://github.com/openshift-kni/cnf-features-deploy 2
            targetRevision: master 3
        syncPolicy:
            automated:
                prune: true
                selfHeal: true
             syncOptions:
             - CreateNamespace=true
      1
      클러스터의 siteconfig CR이 포함된 ztp/gitops-subscriptions/argocd/ 파일 경로입니다.
      2
      클러스터 설치를 위한 사이트 구성을 정의하는 siteconfig 사용자 정의 리소스가 포함된 Git 리포지토리의 URL입니다.
      3
      관련 사이트 구성 데이터가 포함된 Git 리포지토리의 분기입니다.
    3. deployment/policies-app.yaml 수정 :

      apiVersion: v1
      kind: Namespace
      metadata:
                name: policies-sub
      ---
      apiVersion: argoproj.io/v1alpha1
      kind: Application
      metadata:
            name: policies
            namespace: openshift-gitops
      spec:
        destination:
              server: https://kubernetes.default.svc
              namespace: policies-sub
        project: default
        source:
             directory:
                 recurse: true
              path: ztp/gitops-subscriptions/argocd/resource-hook-example/policygentemplates 1
              repoURL: https://github.com/openshift-kni/cnf-features-deploy 2
              targetRevision: master 3
        syncPolicy:
            automated:
                prune: true
                selfHeal: true
             syncOptions:
             - CreateNamespace=true
      1
      클러스터의 policygentemplates CR이 포함된 ztp/gitops-subscriptions/argocd/ 파일 경로입니다.
      2
      policygentemplates 사용자 정의 리소스가 포함된 Git 리포지토리의 URL은 사이트에 대한 구성 데이터를 지정하는 사용자 정의 리소스를 나타냅니다.
      3
      관련 구성 데이터가 포함된 Git 리포지토리의 분기입니다.
  4. 허브 클러스터에 파이프라인 구성을 적용하려면 다음 명령을 입력합니다.

    $ oc apply -k ./deployment

19.16.3. 사이트 시크릿 생성

사이트에 필요한 시크릿을 hub 클러스터에 추가합니다. 이러한 리소스는 클러스터 이름과 일치하는 이름이 있는 네임스페이스에 있어야 합니다.

절차

  1. 사이트 BMC(Baseboard Management Controller)로 인증하기 위한 시크릿을 생성합니다. 시크릿 이름이 SiteConfig 에서 사용된 이름과 일치하는지 확인합니다. 이 예에서 시크릿 이름은 test-sno-bmh-secret 입니다.

    apiVersion: v1
    kind: Secret
    metadata:
      name: test-sno-bmh-secret
      namespace: test-sno
    data:
      password: dGVtcA==
      username: cm9vdA==
    type: Opaque
  2. 사이트에 대한 풀 시크릿을 생성합니다. 가져오기 보안에는 OpenShift 및 모든 애드온 Operator를 설치하는 데 필요한 모든 인증 정보가 포함되어야 합니다. 이 예에서 시크릿 이름은 assisted-deployment-pull-secret 입니다.

    apiVersion: v1
    kind: Secret
    metadata:
      name: assisted-deployment-pull-secret
      namespace: test-sno
    type: kubernetes.io/dockerconfigjson
    data:
      .dockerconfigjson: <Your pull secret base64 encoded>
참고

보안은 이름으로 SiteConfig CR(사용자 정의 리소스)에서 참조됩니다. 네임스페이스는 SiteConfig 네임스페이스와 일치해야 합니다.

19.16.4. SiteConfig 사용자 정의 리소스 생성

ArgoCD는 사이트 배포의 GitOps 메서드의 엔진 역할을 합니다. 사이트 설치에 필요한 사용자 지정 리소스가 포함된 사이트 계획을 완료한 후 정책 생성기에서 매니페스트를 생성하여 허브 클러스터에 적용합니다.

절차

  1. 클러스터의 site-plan 데이터가 포함된 하나 이상의 SiteConfig 사용자 정의 리소스인 site-config.yaml 파일을 만듭니다. 예를 들면 다음과 같습니다.

    apiVersion: ran.openshift.io/v1
    kind: SiteConfig
    metadata:
      name: "test-sno"
      namespace: "test-sno"
    spec:
      baseDomain: "clus2.t5g.lab.eng.bos.redhat.com"
      pullSecretRef:
        name: "assisted-deployment-pull-secret"
      clusterImageSetNameRef: "openshift-4.9"
      sshPublicKey: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDB3dwhI5X0ZxGBb9VK7wclcPHLc8n7WAyKjTNInFjYNP9J+Zoc/ii+l3YbGUTuqilDwZN5rVIwBux2nUyVXDfaM5kPd9kACmxWtfEWTyVRootbrNWwRfKuC2h6cOd1IlcRBM1q6IzJ4d7+JVoltAxsabqLoCbK3svxaZoKAaK7jdGG030yvJzZaNM4PiTy39VQXXkCiMDmicxEBwZx1UsA8yWQsiOQ5brod9KQRXWAAST779gbvtgXR2L+MnVNROEHf1nEjZJwjwaHxoDQYHYKERxKRHlWFtmy5dNT6BbvOpJ2e5osDFPMEd41d2mUJTfxXiC1nvyjk9Irf8YJYnqJgBIxi0IxEllUKH7mTdKykHiPrDH5D2pRlp+Donl4n+sw6qoDc/3571O93+RQ6kUSAgAsvWiXrEfB/7kGgAa/BD5FeipkFrbSEpKPVu+gue1AQeJcz9BuLqdyPUQj2VUySkSg0FuGbG7fxkKeF1h3Sga7nuDOzRxck4I/8Z7FxMF/e8DmaBpgHAUIfxXnRqAImY9TyAZUEMT5ZPSvBRZNNmLbfex1n3NLcov/GEpQOqEYcjG5y57gJ60/av4oqjcVmgtaSOOAS0kZ3y9YDhjsaOcpmRYYijJn8URAH7NrW8EZsvAoF6GUt6xHq5T258c6xSYUm5L0iKvBqrOW9EjbLw== root@cnfdc2.clus2.t5g.lab.eng.bos.redhat.com"
      clusters:
      - clusterName: "test-sno"
        clusterType: "sno"
        clusterProfile: "du"
        clusterLabels:
          group-du-sno: ""
          common: true
          sites : "test-sno"
        clusterNetwork:
          - cidr: 1001:db9::/48
            hostPrefix: 64
        machineNetwork:
          - cidr: 2620:52:0:10e7::/64
        serviceNetwork:
          - 1001:db7::/112
        additionalNTPSources:
          - 2620:52:0:1310::1f6
        nodes:
          - hostName: "test-sno.clus2.t5g.lab.eng.bos.redhat.com"
            bmcAddress: "idrac-virtualmedia+https://[2620:52::10e7:f602:70ff:fee4:f4e2]/redfish/v1/Systems/System.Embedded.1"
            bmcCredentialsName:
              name: "test-sno-bmh-secret"
            bmcDisableCertificateVerification: true 1
            bootMACAddress: "0C:42:A1:8A:74:EC"
            bootMode: "UEFI"
            rootDeviceHints:
              hctl: '0:1:0'
            cpuset: "0-1,52-53"
            nodeNetwork:
              interfaces:
                - name: eno1
                  macAddress: "0C:42:A1:8A:74:EC"
              config:
                interfaces:
                  - name: eno1
                    type: ethernet
                    state: up
                    macAddress: "0C:42:A1:8A:74:EC"
                    ipv4:
                      enabled: false
                    ipv6:
                      enabled: true
                      address:
                      - ip: 2620:52::10e7:e42:a1ff:fe8a:900
                        prefix-length: 64
                dns-resolver:
                  config:
                    search:
                    - clus2.t5g.lab.eng.bos.redhat.com
                    server:
                    - 2620:52:0:1310::1f6
                routes:
                  config:
                  - destination: ::/0
                    next-hop-interface: eno1
                    next-hop-address: 2620:52:0:10e7::fc
                    table-id: 254
    1
    UEFI SecureBoot 를 사용하는 경우 유효하지 않거나 로컬 인증서로 인한 오류를 방지하려면 이 행을 추가합니다.
  2. 파일을 저장하고 hub 클러스터에서 액세스할 수 있는 제로 터치 프로비저닝(ZTP) Git 리포지토리로 푸시하고 ArgoCD 애플리케이션의 소스 리포지토리로 정의합니다.

ArgoCD는 애플리케이션이 동기화되지 않았음을 감지합니다. 자동 또는 수동 동기화 시 ArgoCD는 PolicyGenTemplate 을 허브 클러스터에 동기화하고 관련 리소스 후크를 시작합니다. 이러한 후크는 spoke 클러스터에 적용되는 정책 래핑 구성 CR을 생성합니다. 리소스 후크는 사이트 정의를 설치 사용자 지정 리소스로 변환하고 허브 클러스터에 적용합니다.

  • 네임 스페이스 - 사이트당 고유
  • AgentClusterInstall
  • BareMetalHost
  • ClusterDeployment
  • InfraEnv
  • NMStateConfig
  • ExtraManifestsConfigMap - Extra manifests. 추가 매니페스트에는 워크로드 파티셔닝, chronyd, 마운트 지점 숨기기, sctp 활성화 등이 포함됩니다.
  • ManagedCluster
  • KlusterletAddonConfig

RHACM(Red Hat Advanced Cluster Management)(ACM)은 허브 클러스터를 배포합니다.

19.16.5. PolicyGenTemplates 생성

다음 절차에 따라 허브 클러스터의 Git 리포지토리에 정책을 생성하는 데 필요한 PolicyGenTemplates 를 생성합니다.

절차

  1. PolicyGenTemplates 를 생성하고 hub 클러스터에서 액세스할 수 있는 제로 터치 프로비저닝(ZTP) Git 리포지토리에 저장하고 ArgoCD 애플리케이션의 소스 리포지토리로 정의합니다.
  2. ArgoCD는 애플리케이션이 동기화되지 않았음을 감지합니다. 자동 또는 수동 동기화 시 ArgoCD는 허브 클러스터에 새 PolicyGenTemplate 을 적용하고 관련 리소스 후크를 시작합니다. 이러한 후크는 스포크 클러스터에 적용되는 정책 래핑 구성 CR을 생성하고 다음 작업을 수행합니다.

    1. 기본 분산 장치(DU) 프로필 및 필수 사용자 지정에 따라 Red Hat Advanced Cluster Management(RHACM) 정책을 만듭니다.
    2. 생성된 정책을 hub 클러스터에 적용합니다.

ZTP 프로세스는 ACM을 지시하여 클러스터 노드에 원하는 구성을 적용하는 정책을 생성합니다.

19.16.6. 설치 상태 확인

ArgoCD 파이프라인은 Git 리포지토리에서 SiteConfigPolicyGenTemplate 사용자 정의 리소스(CR)를 감지하고 허브 클러스터에 동기화합니다. 이 프로세스에서는 설치 및 정책 CR을 생성하여 hub 클러스터에 적용합니다. ArgoCD 대시보드에서 이 동기화의 진행률을 모니터링할 수 있습니다.

절차

  1. 다음 명령을 사용하여 클러스터 설치 진행 상황을 모니터링합니다.

    $ export CLUSTER=<cluster_name>
    $ oc get agentclusterinstall -n $CLUSTER $CLUSTER -o jsonpath='{.status.conditions[?(@.type=="Completed")]}' | jq
    $ curl -sk $(oc get agentclusterinstall -n $CLUSTER $CLUSTER -o jsonpath='{.status.debugInfo.eventsURL}') | jq '.[-2,-1]'
  2. Red Hat Advanced Cluster Management(RHACM) 대시보드를 사용하여 정책 조정 진행 상황을 모니터링합니다.

19.16.7. 사이트 정리

사이트 및 관련 설치 및 정책 CR(사용자 정의 리소스)을 제거하려면 Git 리포지토리에서 SiteConfig 및 사이트별 PolicyGenTemplate CR을 제거합니다. 파이프라인 후크는 생성된 CR을 제거합니다.

참고

SiteConfig CR을 제거하기 전에 ACM에서 클러스터를 분리해야 합니다.

19.16.7.1. ArgoCD 파이프라인 제거

ArgoCD 파이프라인 및 모든 생성된 아티팩트를 제거하려면 다음 절차를 사용하십시오.

절차

  1. ACM에서 모든 클러스터를 분리합니다.
  2. Git 리포지토리에서 모든 SiteConfigPolicyGenTemplate CR(사용자 정의 리소스)을 삭제합니다.
  3. 다음 네임스페이스를 삭제합니다.

    • 모든 정책 네임스페이스:

       $ oc get policy -A
    • clusters-sub
    • policies-sub
  4. Kustomize 툴을 사용하여 디렉터리를 처리합니다.

     $ oc delete -k cnf-features-deploy/ztp/gitops-subscriptions/argocd/deployment