6.4. SiteConfig CR에서 ClusterInstance CR로의 마이그레이션 수행
단일 노드 OpenShift 클러스터를 이전 파이프라인에서 SiteConfig CR을 제거하고 해당 ClusterInstance CR을 새 파이프라인에 추가하여 SiteConfig CR을 ClusterInstance CR을 ClusterInstance CR로 마이그레이션합니다.
사전 요구 사항
-
cluster-admin권한이 있는 사용자로 허브 클러스터에 로그인했습니다. -
ClusterInstanceCR을 사용하여 클러스터를 관리할 Argo CD 프로젝트 및 애플리케이션을 포함하여 병렬 Argo CD 파이프라인을 설정해야 합니다. -
원래의
SiteConfigCR 파이프라인을 관리하는 Argo CD 애플리케이션은 동기화 정책prune=false로 구성됩니다. 이 설정을 사용하면 이 애플리케이션에서 대상 클러스터를 제거한 후 리소스가 그대로 유지됩니다. - 단일 노드 OpenShift 클러스터 구성이 포함된 Git 리포지토리에 액세스할 수 있습니다.
- RHACM(Red Hat Advanced Cluster Management) 버전 2.12 이상이 hub 클러스터에 설치되어 있어야 합니다.
- siteConfig Operator가 hub 클러스터에 설치되어 실행되고 있습니다.
- Podman을 설치하고 registry.redhat.io 컨테이너 이미지 레지스트리에 액세스할 수 있습니다.
프로세스
site-configs폴더 구조를ClusterInstanceCR을 포함할 새site-configs-v2디렉터리에 미러링합니다. 예를 들면 다음과 같습니다.site-configs-v2/ ├── hub-1/1 │ └── extra-manifest/ ├── pre-reqs/ │ └── sno1/2 ├── reference-manifest/ │ └── 4.20/ └── resources/Git의 관련 파일에서 리소스를 주석 처리하여 원래 Argo CD 애플리케이션에서 대상 클러스터를 제거합니다.
site-configs/kustomization.yaml파일에서 대상 클러스터를 주석 처리합니다. 예를 들면 다음과 같습니다.$ cat site-configs/kustomization.yaml업데이트된
site-configs/kustomization.yaml파일의 예apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - pre-reqs/ #- resources/ generators: #- hub-1/sno1.yaml - hub-1/sno2.yaml - hub-1/sno3.yamlsite-configs/pre-reqs/kustomization.yaml파일에서 대상 클러스터를 주석 처리합니다. 이렇게 하면site-configs/pre-reqs/sno1폴더가 제거되는데, 여기에는 마이그레이션도 필요하며 이미지 레지스트리 풀 시크릿, 베이스 보드 관리 컨트롤러 인증 정보 등의 리소스가 있습니다. 예를 들면 다음과 같습니다.$ cat site-configs/pre-reqs/kustomization.yaml업데이트된
site-configs/pre-reqs/kustomization.yaml파일의 예apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: #- sno1/ - sno2/ - sno3/
Git 리포지토리에 대한 변경 사항을 커밋합니다.
참고변경 사항을 커밋한 후 Argo CD 애플리케이션이 태그 세트 클러스터 리소스의 상태를 모니터링하려고 하므로 원래 Argo CD 애플리케이션에서
OutOfSync동기화 상태를 보고합니다. 그러나 동기화 정책은prune=false로 설정되므로 Argo CD 애플리케이션에서는 리소스를 삭제하지 않습니다.원래 Argo CD 애플리케이션이 더 이상 클러스터 리소스를 관리하지 않도록 하려면 다음 명령을 실행하여 리소스에서 Argo CD 애플리케이션 레이블을 제거할 수 있습니다.
$ for cr in bmh,hfs,clusterdeployment,agentclusterinstall,infraenv,nmstateconfig,configmap,klusterletaddonconfig,secrets; do oc label $cr app.kubernetes.io/instance- --all -n sno1; done && oc label ns sno1 app.kubernetes.io/instance- && oc label managedclusters sno1 app.kubernetes.io/instance-Argo CD 애플리케이션 레이블은
sno1네임스페이스의 모든 리소스에서 제거되고 동기화 상태가Synced로 돌아갑니다.ztp-site-generate컨테이너 이미지와 함께 패키지된siteconfig-converter툴을 사용하여 대상 클러스터에 대한ClusterInstanceCR을 생성합니다.참고siteconfig-converter 툴은 site
Config CR에서 다음 더 이상 사용되지 않는 필드를 사용하는 이전 버전의수 없습니다.AgentClusterInstall리소스를 변환할-
apiVIP -
ingressVIP -
manifestsConfigMapRef
이 문제를 해결하려면 다음 옵션 중 하나를 수행할 수 있습니다.
- 이러한 필드를 포함하는 사용자 지정 클러스터 템플릿을 생성합니다. 사용자 지정 템플릿 생성에 대한 자세한 내용은 SiteConfig Operator를 사용하여 사용자 지정 템플릿 생성을참조하십시오.
-
ClusterInstanceCR의 억제된Manifests 목록에 추가하거나플래그를 사용하여siteconfig-converter툴에서-sAgentClusterInstall리소스 생성을 표시하지 않습니다. 클러스터를 다시 설치할 때억제된Manifests목록에서 리소스를 제거해야 합니다.
다음 명령을 실행하여
ztp-site-generate컨테이너 이미지를 가져옵니다.podman pull registry.redhat.io/openshift4/ztp-site-generate-rhel8:4.20다음 명령을 실행하여 컨테이너를 대화형으로
siteconfig-converter툴을 실행합니다.$ podman run -v "${PWD}":/resources:Z,U -it registry.redhat.io/openshift4/ztp-site-generate-rhel8:{product-version} siteconfig-converter -d /resources/<output_folder> /resources/<path_to_siteconfig_resource>-
&
lt;output_folder>를 생성된 파일의 출력 디렉터리로 바꿉니다. &
lt;path_to_siteconfig_resource>를 대상 siteConfigCR 파일의 경로로 바꿉니다.출력 예
Successfully read SiteConfig: sno1/sno1 Converted cluster 1 (sno1) to ClusterInstance: /resources/output/sno1.yaml WARNING: extraManifests field is not supported in ClusterInstance and will be ignored. Create one or more configmaps with the exact desired set of CRs for the cluster and include them in the extraManifestsRefs. WARNING: Added default extraManifest ConfigMap 'extra-manifests-cm' to extraManifestsRefs. This configmap is created automatically. Successfully converted 1 cluster(s) to ClusterInstance files in /resources/output: sno1.yaml Generating ConfigMap kustomization files... Using ConfigMap name: extra-manifests-cm, namespace: sno1, manifests directory: extra-manifests Generating ConfigMap kustomization files with name: extra-manifests-cm, namespace: sno1, manifests directory: extra-manifests Generating extraManifests for SiteConfig: /resources/sno1.yaml Using absolute path for input file: /resources/sno1.yaml Running siteconfig-generator from directory: /resources Found extraManifests directory: /resources/output/extra-manifests/sno1 Moved sno1_containerruntimeconfig_enable-crun-master.yaml to /resources/output/extra-manifests/sno1_containerruntimeconfig_enable-crun-master.yaml Moved sno1_containerruntimeconfig_enable-crun-worker.yaml to /resources/output/extra-manifests/sno1_containerruntimeconfig_enable-crun-worker.yaml Moved 2 extraManifest files from /resources/output/extra-manifests/sno1 to /resources/output/extra-manifests Removed directory: /resources/output/extra-manifests/sno1 --- Kustomization.yaml Generator --- Scanning directory: /resources/output/extra-manifests Found and adding: extra-manifests/sno1_containerruntimeconfig_enable-crun-master.yaml Found and adding: extra-manifests/sno1_containerruntimeconfig_enable-crun-worker.yaml ------------------------------------ kustomization-configMapGenerator-snippet.yaml generated successfully at: /resources/output/kustomization-configMapGenerator-snippet.yaml Content: apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization configMapGenerator: - files: - extra-manifests/sno1_containerruntimeconfig_enable-crun-master.yaml - extra-manifests/sno1_containerruntimeconfig_enable-crun-worker.yaml name: extra-manifests-cm namespace: sno1 generatorOptions: disableNameSuffixHash: true ------------------------------------참고ClusterInstanceCR을 사용하려면ConfigMap리소스에 추가 매니페스트를 정의해야 합니다.이 요구 사항을 충족하기 위해
siteconfig-converter툴에서kustomization.yaml스니펫을 생성합니다. 생성된 스니펫에서는 Kustomize의configMapGenerator를 사용하여 매니페스트 파일을 필요한ConfigMap리소스에 자동으로 패키징합니다.ConfigMap리소스가 다른 클러스터 리소스와 함께 생성 및 관리되도록 이 스니펫을 원래kustomization.yaml파일에 병합해야 합니다.
-
&
-
새 파이프라인
Kustomization파일에서 이를 참조하여 대상 클러스터를 관리하도록 새 Argo CD 애플리케이션을 구성합니다. 예를 들면 다음과 같습니다.$ cat site-configs-v2/kustomization.yaml업데이트된
site-configs-v2/kustomization.yaml파일의 예apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - resources/ - pre-reqs/ - hub-1/sno1.yaml$ cat site-configs-v2/pre-reqs/kustomization.yaml업데이트된
site-configs-v2/pre-reqs/kustomization.yaml파일의 예apiVersion: kustomize.config.k8s.io/v1beta1 kind: Kustomization resources: - sno1/- Git 리포지토리에 대한 변경 사항을 커밋합니다.
검증
다음 명령을 실행하여
ClusterInstanceCR이 성공적으로 배포되고 프로비저닝 상태가 완료되었는지 확인합니다.$ oc get clusterinstance -A출력 예
NAME PAUSED PROVISIONSTATUS PROVISIONDETAILS AGE clusterinstance.siteconfig.open-cluster-management.io/sno1 Completed Provisioning completed 27s이 시점에서
ClusterInstanceCR을 사용하는 새로운 Argo CD 애플리케이션이sno1클러스터를 관리하고 있습니다. 모든 대상 클러스터가 새 파이프라인으로 마이그레이션될 때까지 이러한 단계를 반복하여 한 번에 하나 이상의 클러스터를 계속 마이그레이션할 수 있습니다.site-configs-v2/디렉터리의 폴더 구조와 파일에sno1클러스터에 대해 마이그레이션된 리소스가 포함되어 있는지 확인합니다. 예를 들면 다음과 같습니다.site-configs-v2/ ├── hub-1/ │ ├── sno1.yaml1 ├── extra-manifest/ │ ├── enable-crun-worker.yaml2 │ └── enable-crun-master.yaml ├── kustomization.yaml3 ├── pre-reqs/ │ └── sno1/ │ ├── bmc-credentials.yaml │ ├── namespace.yaml │ └── pull-secret.yaml ├── kustomization.yaml ├── reference-manifest/ │ └── 4.20/ └── resources/ ├── active-ocp-version.yaml └── kustomization.yaml- 1
sno1클러스터의ClusterInstanceCR입니다.- 2
- 툴은
ClusterInstanceCR에서 참조하는 추가 매니페스트를 자동으로 생성합니다. 생성 후 파일 이름이 변경될 수 있습니다. 연결된kustomization.yaml파일의 원래 이름 지정 규칙과 일치하도록 파일의 이름을 변경할 수 있습니다. - 3
- 툴은
kuztomization.yaml파일 스니펫을 생성하여 추가 매니페스트를 지정하는ConfigMap리소스를 생성합니다. 생성된kustomization스니펫을 원래kuztomization.yaml파일과 병합할 수 있습니다.
6.4.1. siteconfig-converter 툴의 참조 플래그 링크 복사링크가 클립보드에 복사되었습니다!
다음 매트릭스는 siteconfig-converter 툴의 플래그를 설명합니다.
| 플래그 | 유형 | 설명 |
|---|---|---|
| -d | string |
변환된 |
| -t | string |
클러스터의 쉼표로 구분된 템플릿 참조 목록을 네임스페이스/이름 형식으로 정의합니다. 기본값은 |
| -n | string |
노드의 쉼표로 구분된 템플릿 참조 목록을 네임스페이스/이름 형식으로 정의합니다. 기본값은 |
| -m | string |
추가 매니페스트 참조에 사용할 쉼표로 구분된 |
| -s | string | 클러스터 수준에서 억제할 쉼표로 구분된 매니페스트 이름 목록을 정의합니다. |
| -w | boolean |
변환 경고를 변환된 YAML 파일의 헤드에 주석으로 작성합니다. 기본값은 |
| -c | boolean |
원본 |