구조화되지 않은 저장소 사용

구조화되지 않은 저장소를 사용하면 자신에게 가장 편리한 방법으로 저장소를 조직화할 수 있습니다. 이러한 유연성을 통해 기존 Kubernetes 구성을 구성 동기화 저장소에 동기화할 수 있습니다. 예를 들어 Helm 차트를 클러스터에 동기화하려면 helm template 명령어를 실행하고 렌더링된 매니페스트를 저장소에 커밋합니다. 자세한 내용은 Helm에 구성 동기화 사용 튜토리얼을 참조하세요.

구조화되지 않은 저장소는 대부분의 사용자에게 권장됩니다. 하지만 구성을 고유 카테고리로 구분하기 위해 계층적 저장소를 만들 수도 있습니다. 계층적 저장소의 규칙을 준수하지 않고 계층적 정책을 만들려면 계층적 컨트롤러 사용을 고려하세요.

제한사항

구조화되지 않은 저장소에는 다음과 같은 제한사항이 있습니다.

  • 구조화되지 않은 저장소에서는 RepoHierarchyConfig 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 명령어를 참조하세요.

저장소를 수동으로 변환하려면 다음 안내를 완료하세요.

  1. Git 저장소의 system/ 디렉터리에서 Repo 구성을 삭제합니다. Repo 리소스는 구조화되지 않은 저장소에 필요하지 않습니다.

  2. 구조화되지 않은 저장소에서는 추상 네임스페이스 디렉터리가 지원되지 않습니다. 따라서 namespaces/ 디렉터리 및 하위 디렉터리에 원래 포함된 모든 리소스의 네임스페이스를 선언해야 합니다.

  3. 구조화되지 않은 저장소에서는 네임스페이스 상속이 지원되지 않습니다. 따라서 원래 하위 네임스페이스에서 상속된 모든 리소스, 즉 원래 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 디렉터리에서 동기화하도록 구성합니다.

다음 단계