19.16. 여러 관리 클러스터에 대한 ZTP 사용자 정의 리소스 생성
여러 관리 클러스터를 설치하는 경우 제로 터치 프로비저닝(ZTP)은 ArgoCD 및 SiteConfig
를 사용하여 CR(사용자 정의 리소스)을 생성하고 여러 클러스터에 대한 정책을 생성하여 GitOps 접근법을 사용하여 100개 이하의 배치로 여러 클러스터에 대한 정책을 생성하고 적용합니다.
클러스터 설치 및 배포는 다음과 같이 2단계 프로세스입니다.
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) 파이프라인에는 이 리포지토리에 대한 읽기 권한이 필요합니다.
절차
-
SiteConfig
및PolicyGenTemplate
사용자 정의 리소스(CR)에 대해 별도의 경로를 사용하여 디렉터리 구조를 생성합니다. -
resource
-sync.yaml을 추가합니다.-hook-example/<policygentemplates>/에서
PolicyGenTemplate
CR의 경로에 pre-sync.yaml
및 post resource
-sync.yaml을-hook
및 post-example/<siteconfig>/에서 pre-
sync.yamlSiteConfig
CR 경로에 추가합니다.참고허브 클러스터가 연결이 끊긴 환경에서 작동하는 경우 사전 및 사후 동기화 후크 CR 모두의
이미지를
업데이트해야 합니다.-
policygentemplates.ran.openshift.io
및siteconfigs.ran.openshift.io
CR 정의를 적용합니다.
19.16.2.2. ZTP를 위한 허브 클러스터 준비
제로 터치 프로비저닝(ZTP) GitOps 플로우를 기반으로 각 사이트에 필요한 설치 및 정책 CR(사용자 정의 리소스)을 생성하는 ArgoCD 애플리케이션 세트로 허브 클러스터를 구성할 수 있습니다.
절차
- hub 클러스터에 Red Hat OpenShift GitOps Operator를 설치합니다.
ArgoCD의 관리자 암호를 추출합니다.
$ oc get secret openshift-gitops-cluster -n openshift-gitops -o jsonpath='{.data.admin\.password}' | base64 -d
ArgoCD 파이프라인 구성을 준비합니다.
최신 컨테이너 이미지 버전을 사용하여 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/
디렉터리와 관련이 있습니다.두 ArgoCD 애플리케이션, deployment
/clusters-app.yaml 및
의 소스 값을 적절한 URL,deployment/policies-
app.yamltargetRevision
분기 및 경로 값으로 수정합니다. 경로 값은 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
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
허브 클러스터에 파이프라인 구성을 적용하려면 다음 명령을 입력합니다.
$ oc apply -k ./deployment
19.16.3. 사이트 시크릿 생성
사이트에 필요한 시크릿을 hub 클러스터에 추가합니다. 이러한 리소스는 클러스터 이름과 일치하는 이름이 있는 네임스페이스에 있어야 합니다.
절차
사이트 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
사이트에 대한 풀 시크릿을 생성합니다. 가져오기 보안에는 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 메서드의 엔진 역할을 합니다. 사이트 설치에 필요한 사용자 지정 리소스가 포함된 사이트 계획을 완료한 후 정책 생성기에서 매니페스트를 생성하여 허브 클러스터에 적용합니다.
절차
클러스터의
site-plan 데이터가 포함된 하나 이상의
파일을 만듭니다. 예를 들면 다음과 같습니다.SiteConfig
사용자 정의 리소스인 site-config.yamlapiVersion: 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
를 사용하는 경우 유효하지 않거나 로컬 인증서로 인한 오류를 방지하려면 이 행을 추가합니다.
- 파일을 저장하고 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
를 생성합니다.
절차
-
PolicyGenTemplates
를 생성하고 hub 클러스터에서 액세스할 수 있는 제로 터치 프로비저닝(ZTP) Git 리포지토리에 저장하고 ArgoCD 애플리케이션의 소스 리포지토리로 정의합니다. ArgoCD는 애플리케이션이 동기화되지 않았음을 감지합니다. 자동 또는 수동 동기화 시 ArgoCD는 허브 클러스터에 새
PolicyGenTemplate
을 적용하고 관련 리소스 후크를 시작합니다. 이러한 후크는 스포크 클러스터에 적용되는 정책 래핑 구성 CR을 생성하고 다음 작업을 수행합니다.- 기본 분산 장치(DU) 프로필 및 필수 사용자 지정에 따라 Red Hat Advanced Cluster Management(RHACM) 정책을 만듭니다.
- 생성된 정책을 hub 클러스터에 적용합니다.
ZTP 프로세스는 ACM을 지시하여 클러스터 노드에 원하는 구성을 적용하는 정책을 생성합니다.
19.16.6. 설치 상태 확인
ArgoCD 파이프라인은 Git 리포지토리에서 SiteConfig
및 PolicyGenTemplate
사용자 정의 리소스(CR)를 감지하고 허브 클러스터에 동기화합니다. 이 프로세스에서는 설치 및 정책 CR을 생성하여 hub 클러스터에 적용합니다. ArgoCD 대시보드에서 이 동기화의 진행률을 모니터링할 수 있습니다.
절차
다음 명령을 사용하여 클러스터 설치 진행 상황을 모니터링합니다.
$ 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]'
- Red Hat Advanced Cluster Management(RHACM) 대시보드를 사용하여 정책 조정 진행 상황을 모니터링합니다.
19.16.7. 사이트 정리
사이트 및 관련 설치 및 정책 CR(사용자 정의 리소스)을 제거하려면 Git 리포지토리에서 SiteConfig
및 사이트별 PolicyGenTemplate
CR을 제거합니다. 파이프라인 후크는 생성된 CR을 제거합니다.
SiteConfig
CR을 제거하기 전에 ACM에서 클러스터를 분리해야 합니다.
19.16.7.1. ArgoCD 파이프라인 제거
ArgoCD 파이프라인 및 모든 생성된 아티팩트를 제거하려면 다음 절차를 사용하십시오.
절차
- ACM에서 모든 클러스터를 분리합니다.
-
Git 리포지토리에서 모든
SiteConfig
및PolicyGenTemplate
CR(사용자 정의 리소스)을 삭제합니다. 다음 네임스페이스를 삭제합니다.
모든 정책 네임스페이스:
$ oc get policy -A
-
clusters-sub
-
policies-sub
Kustomize 툴을 사용하여 디렉터리를 처리합니다.
$ oc delete -k cnf-features-deploy/ztp/gitops-subscriptions/argocd/deployment