이 페이지에서는 하나의 루트 저장소를 둘 이상의 루트 저장소로 안전하게 분할하는 방법을 보여줍니다. 이 단계는 또한 네임스페이스 저장소에 적용할 수 있습니다.
구성 동기화로 동기화된 저장소는 Git 저장소, 브랜치, 버전 및 디렉터리 조합을 참조합니다.
루트 저장소에 리소스가 많을 경우(예: 5,000개 이상) 다음 두 가지 이유로 인해 구성 동기화가 제대로 작동하지 않을 수 있습니다.
- ResourceGroup 객체는 etcd 객체 크기 제한을 초과할 수 있습니다. ResourceGroup 객체는 모든 리소스의 그룹, 종류, 네임스페이스, 이름을 Git 저장소에 기록합니다. 리소스가 많으면 ResourceGroup 객체가 커집니다.
- 리소스가 적은 저장소보다 모든 리소스를 동기화하는 것이 더 오래 걸립니다. 구성 동기화는 클러스터에 순차적으로 리소스를 적용합니다. 일부 경우에는 처음에 리소스를 성공적으로 적용할 수 없고 구성 동기화가 리소스 적용을 재시도해야 합니다.
이러한 문제가 발생하면 각 루트 저장소에 리소스가 적게 포함되도록 루트 저장소를 여러 루트 저장소로 분할하면 됩니다.
구조화되지 않은 루트 저장소 분할
RootSync 객체를 사용해 이 단계를 설명합니다. 이 단계는 RepoSync 객체에도 적용할 수 있습니다.
1.21.0 이상(권장)
이 방법은 구성 동기화 1.21.0 이상 버전에서 작동합니다. 해당 릴리스에서 추가된 파이널라이저는 RootSync 또는 RepoSync 객체가 삭제될 때 객체 관리를 중지하기 때문입니다. 이전에는 고아 객체에 지속되는 메타데이터가 남아 있어, 다른 클라이언트나 새로운 RootSync 또는 RepoSync 객체에서 관리할 수 없었습니다.
루트 저장소가 RootSync single-root-sync 객체에 의해 동기화된다고 가정합니다.
저장소를 분리하고 나면 두 개의 루트 저장소가 생성됩니다. 하나는 root-sync-1 RootSync 객체에 의해 동기화되고, 다른 하나는 root-sync-2 RootSync 객체에 의해 동기화됩니다.
저장소를 분리하려면 다음 단계를 따르세요.
RootSync
single-root-sync에configsync.gke.io/deletion-propagation-policy주석이Orphan값으로 설정되어 있거나 설정되어 있지 않은지 확인합니다. 설정하지 않으면 기본값은 "Orphan"과 동일합니다. 이 설정을 통해 객체가 삭제되지 않도록 할 수 있습니다.RootSync
single-root-sync를 삭제합니다.kubectl delete rootsync single-root-sync -n config-management-system다음 단계를 따라 새 저장소를 설정합니다.
- 새 저장소를 만들거나 기존 Git 저장소에 새 디렉터리를 만듭니다.
- 리소스를 새 저장소 또는 새 디렉터리로 이동합니다.
- 루트 저장소를 2개 이상으로 분리하는 경우, 필요에 따라 이 단계를 반복합니다.
변경사항을 커밋하고 푸시합니다.
git commit -am 'add configuration for the new root repository'root-sync-1및root-sync-2RootSync 객체를 적용합니다. 이렇게 하면 새 저장소 또는 디렉터리가 동기화되어, 클러스터의 기존 객체가 새로운 RootSync 객체root-sync-1및root-sync-2에 의해 관리되도록 합니다.apiVersion: configsync.gke.io/v1beta1 kind: RootSync metadata: name: ROOT_SYNC_NAME namespace: config-management-system spec: sourceFormat: unstructured git: repo: NEW_ROOT_REPOSITORY revision: NEW_ROOT_REVISION branch: NEW_ROOT_BRANCH dir: "NEW_ROOT_DIRECTORY" auth: ROOT_AUTH_TYPE gcpServiceAccountEmail: ROOT_EMAIL # secretRef should be omitted if the auth type is none, gcenode, or gcpserviceaccount. secretRef: name: git-creds다음을 바꿉니다.
NEW_ROOT_REPOSITORY: 새 루트 저장소로 사용할 Git 저장소의 URL입니다. HTTPS 또는 SSH 프로토콜을 사용하여 URL을 입력할 수 있습니다. 예를 들어https://github.com/GoogleCloudPlatform/anthos-config-management-samples는 HTTPS 프로토콜을 사용합니다. 프로토콜을 입력하지 않으면 URL이 HTTPS URL로 취급됩니다.NEW_ROOT_REVISION: (선택사항) 새 루트 저장소에서 체크아웃할 Git 버전(태그 또는 해시)입니다.NEW_ROOT_BRANCH: (선택사항) 새 루트 저장소에서 동기화할 브랜치입니다.NEW_ROOT_DIRECTORY: (선택사항) 동기화하려는 구성이 포함된 새 루트 디렉터리의 Git 저장소 경로입니다.ROOT_AUTH_TYPE: 이 값은 기존 RootSync/root-sync 객체와 동일해야 합니다.ROOT_EMAIL: 이 값은 기존 RootSync/root-sync 객체와 동일해야 합니다.
새로운
root-sync-1RootSync 객체가 동기화될 때까지 기다립니다. 다음 명령어를 사용하여 상태를 확인할 수 있습니다.nomos status
모든 버전
이 방법은 1.21.0 버전을 포함한 모든 구성 동기화 버전에서 작동하지만, 단계 수가 더 적기 때문에 1.21.0 이상 버전에서 사용할 수 있는 방법을 사용하는 것이 좋습니다. 구성 동기화 버전이 1.21.0보다 낮다면, 대신 이 방법을 사용할 수 있습니다.
루트 저장소가 RootSync root-sync 객체에 의해 동기화된다고 가정합니다.
저장소를 분리하고 나면 두 개의 루트 저장소가 생성됩니다. 하나는 root-sync RootSync 객체에 의해 동기화되고, 다른 하나는 root-sync-1 RootSync 객체에 의해 동기화됩니다.
저장소를 분리하려면 다음 단계를 따르세요.
기존 루트 저장소에서 다른 저장소 또는 디렉터리로 이동하려는 리소스를 선택하고 이 리소스에
configmanagement.gke.io/managed: disabled주석을 추가합니다. 이 주석을 사용하면 구성을 한 저장소에서 다른 저장소로 이동할 때 클러스터의 기존 객체가 영향을 받지 않습니다. Kustomize 형식 또는 helm 차트를 사용하는 경우 다음 예시와 같이 기준의 약 절반을 선택하고kustomization.yaml파일에 공통 주석을 추가합니다.# kustomization.yaml commonAnnotations: configmanagement.gke.io/managed: disabled변경사항을 커밋하고 푸시합니다.
sh git commit -am 'disable Config Sync management on subset of the configuration'다음 명령어를 사용해 기존
root-syncRootSync 객체가 동기화될 때까지 기다립니다.nomos status다음 단계에 따라 두 번째 저장소를 설정합니다.
- 새 저장소를 만들거나 기존 Git 저장소에 새 디렉터리를 만듭니다.
configmanagement.gke.io/managed: disabled주석이 포함된 리소스를 새 저장소 또는 새 디렉터리로 복사합니다.- 새 저장소 또는 디렉터리에서
configmanagement.gke.io/managed: disabled주석을 삭제합니다. - 루트 저장소를 2개 이상으로 분리하는 경우, 필요에 따라 이 단계를 반복합니다.
변경사항을 커밋하고 푸시합니다.
git commit -am 'add configuration for the new root repository'새 저장소 또는 디렉터리를 동기화하도록
root-sync-1RootSync 객체를 적용합니다. 이렇게 하면 클러스터의 기존 객체가 새로운root-sync-1RootSync 객체에 의해 관리됩니다.apiVersion: configsync.gke.io/v1beta1 kind: RootSync metadata: name: root-sync-1 namespace: config-management-system spec: sourceFormat: unstructured git: repo: NEW_ROOT_REPOSITORY revision: NEW_ROOT_REVISION branch: NEW_ROOT_BRANCH dir: "NEW_ROOT_DIRECTORY" auth: ROOT_AUTH_TYPE gcpServiceAccountEmail: ROOT_EMAIL # secretRef should be omitted if the auth type is none, gcenode, or gcpserviceaccount. secretRef: name: git-creds다음을 바꿉니다.
NEW_ROOT_REPOSITORY: 새 루트 저장소로 사용할 Git 저장소의 URL입니다. HTTPS 또는 SSH 프로토콜을 사용하여 URL을 입력할 수 있습니다. 예를 들어https://github.com/GoogleCloudPlatform/anthos-config-management-samples는 HTTPS 프로토콜을 사용합니다. 프로토콜을 입력하지 않으면 URL이 HTTPS URL로 취급됩니다.NEW_ROOT_REVISION: (선택사항) 새 루트 저장소에서 체크아웃할 Git 버전(태그 또는 해시)입니다.NEW_ROOT_BRANCH: (선택사항) 새 루트 저장소에서 동기화할 브랜치입니다.NEW_ROOT_DIRECTORY: (선택사항) 동기화하려는 구성이 포함된 새 루트 디렉터리의 Git 저장소 경로입니다.ROOT_AUTH_TYPE: 이 값은 기존 RootSync/root-sync 객체와 동일해야 합니다.ROOT_EMAIL: 이 값은 기존 RootSync/root-sync 객체와 동일해야 합니다.
새로운
root-sync-1RootSync 객체가 동기화될 때까지 기다립니다. 다음 명령어를 사용하여 상태를 확인할 수 있습니다.nomos status원래 저장소에서
configmanagement.gke.io/managed: disabled주석이 있는 리소스를 삭제합니다. 변경사항을 커밋하고 푸시합니다.git commit -am 'remove configuration managed by the new root repository'다음 명령어를 사용해 기존
root-syncRootSync 객체가 동기화될 때까지 기다립니다.nomos status
계층적 루트 저장소 분할
계층적 저장소를 분할하는 단계는 구조화되지 않은 저장소를 분할하는 단계와 비슷합니다.
다음 세 가지 주요 차이점이 있습니다.
새 루트 저장소(또는 새 디렉터리)도 계층적이어야 합니다. 기존 디렉터리
system/및clusterregistry/디렉터리를 새 루트 저장소(또는 새 디렉터리)에 복사해야 합니다.네임스페이스의 리소스를 여러 저장소에 분산할 수 없습니다. 그렇지 않으면 여러 조정자가 네임스페이스 관리를 위해 경합하게 됩니다.
root-sync-1RootSync 객체는spec.sourceFormat: hierarchical을 사용해야 합니다.
구조화되지 않은 저장소를 사용하는 것이 좋으므로 분할하기 전에 계층적 저장소를 구조화되지 않은 저장소로 변환하는 것도 고려해 볼 수 있습니다.