이 페이지에서는 하나의 루트 저장소를 둘 이상의 루트 저장소로 안전하게 분할하는 방법을 보여줍니다. 이 단계는 또한 네임스페이스 저장소에 적용할 수 있습니다.
구성 동기화로 동기화된 저장소는 Git 저장소, 브랜치, 버전 및 디렉터리 조합을 참조합니다.
루트 저장소에 리소스가 많을 경우(예: 5,000개 이상) 다음 두 가지 이유로 인해 구성 동기화가 제대로 작동하지 않을 수 있습니다.
- ResourceGroup 객체는 etcd 객체 크기 제한을 초과할 수 있습니다. ResourceGroup 객체는 모든 리소스의 그룹, 종류, 네임스페이스, 이름을 Git 저장소에 기록합니다. 리소스가 많으면 ResourceGroup 객체가 커집니다.
- 리소스가 적은 저장소보다 모든 리소스를 동기화하는 것이 더 오래 걸립니다. 구성 동기화는 클러스터에 순차적으로 리소스를 적용합니다. 일부 경우에는 처음에 리소스를 성공적으로 적용할 수 없고 구성 동기화가 리소스 적용을 재시도해야 합니다.
이러한 문제가 발생하면 각 루트 저장소에 리소스가 적게 포함되도록 루트 저장소를 여러 루트 저장소로 분할하면 됩니다.
구조화되지 않은 루트 저장소 분할
RootSync 객체를 사용해 이 단계를 설명합니다. 이 단계는 RepoSync 객체에도 적용할 수 있습니다.
루트 저장소가 RootSync root-sync
객체에 의해 동기화된다고 가정합니다.
분할 후에는 두 개의 루트 저장소가 생성됩니다. 하나는 RootSync 객체 root-sync
에 의해 동기화되고, 다른 하나는 RootSync 객체 root-split
에 의해 동기화됩니다.
저장소를 분할하려면 다음 단계를 따르세요.
기존 루트 저장소에서 다른 저장소 또는 디렉터리로 이동할 리소스를 선택하고 여기에
configmanagement.gke.io/managed: disabled
주석을 추가합니다. 이 주석을 사용하면 구성을 한 저장소에서 다른 저장소로 이동할 때 클러스터의 기존 객체가 영향을 받지 않습니다. Kustomize 형식 또는 helm 차트를 사용하는 경우 다음 예시와 같이 기준의 약 절반을 선택하고kustomization.yaml
파일에 공통 주석을 추가합니다.# kustomization.yaml commonAnnotations: configmanagement.gke.io/managed: disabled
커밋하고 변경사항을 푸시합니다.
git commit -am 'disable Config Sync management on subset of the configuration'
gcloud alpha anthos config sync repo describe
명령어를 사용해서 기존 RootSync 객체root-sync
가 동기화되도록 기다립니다.# gcloud command gcloud alpha anthos config sync repo describe --cluster MEMBERSHIP_NAME \ --sync-namespace config-management-system --sync-name root-sync
MEMBERSHIP_NAME
을 등록된 클러스터의 멤버십 이름으로 바꿉니다.다음 단계에 따라 두 번째 저장소를 설정합니다.
- 기존 Git 저장소에 새 저장소 또는 새 디렉터리를 만듭니다.
configmanagement.gke.io/managed: disabled
주석이 포함된 리소스를 새 저장소 또는 새 디렉터리에 복사합니다.- 새 저장소 또는 디렉터리에서
configmanagement.gke.io/managed: disabled
주석을 삭제합니다. - 루트 저장소를 2개 넘는 저장소로 분할하려면 필요에 따라 이 단계를 반복합니다.
커밋하고 변경사항을 푸시합니다.
git commit -am 'add configuration for the new root repository'
클러스터의 기존 객체가 새 RootSync 객체
root-split
에서 관리되도록 RootSync 객체root-split
를 적용하여 새 저장소 또는 디렉터리를 동기화합니다.apiVersion: configsync.gke.io/v1beta1 kind: RootSync metadata: name: root-split 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 객체와 동일해야 합니다.
새 RootSync 객체
root-split
이 동기화될 때까지 기다립니다. 이 작업은gcloud alpha anthos config sync repo describe
명령어를 사용하여 수행할 수 있습니다.$ gcloud alpha anthos config sync repo describe --cluster MEMBERSHIP_NAME \ --sync-namespace config-management-system --sync-name root-split
MEMBERSHIP_NAME
을 등록된 클러스터의 멤버십 이름으로 바꿉니다. 루트 저장소가 동기화됩니다.원래 저장소에서
configmanagement.gke.io/managed: disabled
주석이 있는 리소스를 삭제합니다. 커밋하고 변경사항을 푸시합니다.git commit -am 'remove configuration managed by the new root repository'
gcloud
명령어를 사용해서 기존 RootSync 객체root-sync
가 동기화되도록 기다립니다.$ gcloud alpha anthos config sync repo describe --cluster MEMBERSHIP_NAME \ --sync-namespace config-management-system --sync-name root-sync
MEMBERSHIP_NAME
을 등록된 클러스터의 멤버십 이름으로 바꿉니다.
계층적 루트 저장소 분할
계층적 저장소를 분할하는 단계는 구조화되지 않은 저장소를 분할하는 단계와 비슷합니다.
다음 세 가지 주요 차이점이 있습니다.
새 루트 저장소(또는 새 디렉터리)도 계층적이어야 합니다. 기존 디렉터리
system/
및clusterregistry/
디렉터리를 새 루트 저장소(또는 새 디렉터리)에 복사해야 합니다.네임스페이스의 리소스를 여러 저장소에 분산할 수 없습니다. 그렇지 않으면 여러 조정자가 네임스페이스 관리를 위해 경합하게 됩니다.
RootSync 객체
root-split
에서spec.sourceFormat: hierarchical
을 사용해야 합니다.
구조화되지 않은 저장소를 사용하는 것이 좋으므로 분할하기 전에 계층적 저장소를 구조화되지 않은 저장소로 변환하는 것도 고려해 볼 수 있습니다.