구조화되지 않은 저장소를 사용하면 자신에게 가장 편리한 방법으로 저장소를 조직화할 수 있습니다. 이러한 유연성을 통해 기존 Kubernetes 구성을 구성 동기화 저장소에 동기화할 수 있습니다. 예를 들어 Helm 차트를 클러스터에 동기화하려면 helm template
명령어를 실행하고 렌더링된 매니페스트를 저장소에 커밋합니다. 자세한 내용은 Helm에 구성 동기화 사용 튜토리얼을 참조하세요.
대부분의 사용 사례에는 구조화되지 않은 저장소를 사용하는 것이 좋습니다. 하지만 구성을 고유 카테고리로 구분하기 위해 계층적 저장소를 만들 수도 있습니다.
제한사항
구조화되지 않은 저장소에는 다음과 같은 제한사항이 있습니다.
구조화되지 않은 저장소에서는
HierarchyConfig
Kubernetes 객체를 사용할 수 없습니다.추상 네임스페이스는 구조화되지 않은 저장소에서 지원되지 않습니다.
nomos vet
명령어를 사용하는 경우--source-format=unstructured
플래그를 추가하세요. 예를 들면 다음과 같습니다.nomos vet --source-format=unstructured
네임스페이스 범위의 객체
구조화되지 않은 저장소에서 NamespaceSelectors를 선언할 수 있습니다. NamespaceSelector를 선언하려면 metadata.namespace
또는 NamespaceSelector
주석을 추가합니다. 두 주석을 모두 선언해서는 안 됩니다. 네임스페이스 범위의 리소스가 metadata.namespace
또는 NamespaceSelector
주석을 선언하지 않으면 구성 동기화는 클러스터의 '기본' 네임스페이스를 사용합니다.
자세한 내용은 구성 영향을 받는 네임스페이스 제한을 참조하세요.
클러스터 범위의 객체
구조화되지 않은 저장소에서 ClusterSelectors
는 정상적으로 작동합니다.
구조화되지 않은 저장소 구성
구조화되지 않은 저장소를 구성하려면 RootSync 객체에서 spec.sourceFormat
값을 unstructured
로 설정합니다.
# root-sync.yaml
apiVersion: configsync.gke.io/v1beta1
kind: RootSync
metadata:
name: ROOT_SYNC_NAME
namespace: config-management-system
spec:
sourceFormat: unstructured
git:
repo: https://github.com/GoogleCloudPlatform/anthos-config-management-samples
branch: main
dir: config-sync-quickstart/multirepo/root
auth: ssh
secretRef:
name: SECRET_NAME
다음을 바꿉니다.
ROOT_SYNC_NAME
: RootSync 객체의 이름을 추가합니다. 이름은 클러스터에서 고유해야 하며 26자(영문 기준) 이하여야 합니다.SECRET_NAME
을 보안 비밀 이름으로 바꿉니다.
계층적 저장소를 구조화되지 않은 저장소로 변환
계층적 저장소를 사용 중이고 이를 구조화되지 않은 저장소로 변환하려면 저장소에서 다음을 실행합니다.
nomos hydrate PATH
PATH
를 디렉터리 경로로 바꿉니다.
이 명령어는 현재 작업 디렉터리에 compiled/
디렉터리를 만듭니다. 이 디렉터리 내에 등록된 각 클러스터에 대한 하위 디렉터리가 완전히 확인된 구성과 함께 생성되고, 각 하위 디렉터리는 구조화되지 않은 저장소에서 사용될 수 있습니다.
자세한 내용은 nomos
명령어를 참조하세요.
저장소를 수동으로 변환하려면 다음 안내를 완료하세요.
Git 저장소의
system/
디렉터리에서Repo
구성을 삭제합니다.Repo
리소스는 구조화되지 않은 저장소에 필요하지 않습니다.구조화되지 않은 저장소에서는 추상 네임스페이스 디렉터리가 지원되지 않습니다. 따라서
namespaces/
디렉터리 및 하위 디렉터리에 원래 포함된 모든 리소스의 네임스페이스를 선언해야 합니다.구조화되지 않은 저장소에서는 네임스페이스 상속이 지원되지 않습니다. 따라서 원래 하위 네임스페이스에서 상속된 모든 리소스, 즉 원래
namespaces/
디렉터리에 있는 리소스를 선언해야 합니다.
구조화되지 않은 저장소의 형식 예시
다음 예시에서는 구조화되지 않은 저장소에서 구성(Google Cloud 리소스 포함)을 조직화하는 방법을 보여줍니다.
├── manifests
│ ├── access-control
│ │ ├── ...
│ ├── change-control
│ │ ├── ...
│ ├── git-ops
│ │ └── ...
│ ├── logging-monitoring
│ │ └── ...
│ ├── networking
│ │ └── ...
│ ├── project-factory
│ │ └── ...
│ └── resource-hierarchy
│ │ └── ...
├── raw-configs
│ ├── access-control
│ │ └── ...
│ ├── change-control
│ │ └── ...
│ ├── git-ops
│ │ └── ...
│ ├── logging-monitoring
│ │ └── ...
│ ├── networking
│ │ └── ...
│ ├── project-factory
│ │ └── ...
│ └── resource-hierarchy
│ │ └── ...
└── scripts
└── render.sh
이 예시에서 원시 구성은 raw-configs
디렉터리에 있습니다. 그런 다음 스크립트 또는 자동화된 파이프라인을 사용하여 원시 구성을 렌더링하고 manifests
디렉터리에 출력을 저장할 수 있습니다. 구성 동기화를 구성할 때는 manifests
디렉터리에서 동기화하도록 구성합니다.