Git 저장소에서 구성 사용

구성 동기화는 다수의 클러스터를 관리하는 클러스터 운영자용으로 설계되었습니다. 구성 동기화가 제품군에서 네임스페이스, Role, RoleBinding, ResourceQuota, 기타 중요 Kubernetes 객체를 관리하도록 하면 클러스터가 비즈니스 및 규정 준수 표준을 충족할 수 있습니다.

구성 동기화는 구성을 사용하여 등록된 클러스터를 동기화 상태로 유지합니다. 구성은 Git 저장소에 저장되는 YAML 또는 JSON 파일로, 여기에는 kubectl apply 명령어를 사용하여 클러스터에 수동으로 적용할 수 있는 세부정보와 동일한 유형의 구성 세부정보가 포함됩니다. 클러스터에 있을 수 있는 모든 Kubernetes 객체에 구성을 만들 수 있습니다. 이 주제에서는 다음 내용을 다룹니다.

  • 디렉터리에 구성을 조직화하는 방법
  • Git 저장소를 초기화하여 구성을 저장하는 방법
  • 구성 동기화를 구성하여 구성에서 읽는 방법

저장소에 구성 저장

구성 동기화는 구성 저장 및 버전 제어에 Git 저장소를 사용하며 콘텐츠를 기반으로 작업을 수행합니다. 구성 동기화에서는 이 저장소를 저장소(repo)라고 합니다. 저장소에는 구조화되지 않은 형식과 계층적 형식 등 두 가지 형식이 있습니다.

  • 구조화되지 않은 소스 형식을 사용하면 가장 편리한 방식으로 저장소의 구성을 조직화할 수 있습니다. 이 형식은 kustomize, kpt, 또는 helm과 같은 도구를 사용하여 구성을 정리하거나 생성할 때 특히 유용합니다.
  • 계층적 또는 구조화된 소스 형식은 구성을 서로 다른 카테고리로 구분해 구성을 조직화하는 데 도움이 됩니다. 카테고리는 시스템 구성, 클러스터 메타데이터, 클러스터 수준 구성, 네임스페이스 구성입니다. 계층적 저장소 구조에 대한 자세한 내용은 계층적 저장소 구조를 참조하세요.

다음 표에서는 계층적 저장소 형식과 구조화되지 않은 저장소 형식 간의 차이점을 중점으로 보여줍니다.

특징 계층적 저장소 형식 구조화되지 않은 저장소 형식
네임스페이스 선택기 지원됨 지원됨
클러스터 선택기 지원됨 지원됨
추상 네임스페이스 지원됨 지원되지 않음
Repo 객체 지원됨 지원되지 않음
HierarchyConfig 객체 지원됨 지원되지 않음
계층 구조 컨트롤러의 계층적 네임스페이스 지원되지 않음 지원됨
네임스페이스 저장소의 형식으로 사용 지원되지 않음 지원됨
루트 저장소의 형식으로 사용 지원됨 지원됨
계층 구조 컨트롤러와 함께 사용 권장하지 않음 지원됨
nomos init 명령어 지원됨 지원되지 않음
nomos hydrate 명령어 지원됨 지원되지 않음
nomos vet 명령어 지원됨 --source-format=unstructured 플래그와 함께 지원됨
다른 모든 nomos 명령어 지원됨 지원됨

구조화되지 않은 구성 레이아웃의 예시

다음 예시에서는 Google Cloud 리소스를 포함한 구성을 조직화하는 방법을 보여줍니다.

원시 구성을 raw-configs 디렉터리에 배치하고 스크립트나 자동화된 파이프라인을 사용하여 원시 구성을 렌더링하고 manifests 디렉터리에 출력을 저장할 수 있습니다. 결국 manifests 디렉터리에서 동기화하도록 구성 동기화를 구성합니다.

├── 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

Git 저장소 초기화

저장소를 초기화하는 방법은 구조에 따라 다릅니다.

  • 구조화되지 않은 형식의 경우 빈 Git 저장소를 초기화하고 저장소에 구성을 추가할 수 있습니다.
  • 계층적 형식의 경우 nomos init 명령어를 사용하여 저장소를 초기화하거나 직접 디렉터리 구조를 만들 수 있습니다.

저장소에서 읽도록 구성 동기화 구성

구성 동기화를 설치할 때 저장소 위치를 구성하고 나중에 연산자의 구성 파일에서 구성을 수정할 수 있습니다. Git 저장소에 구성 이외의 콘텐츠가 있는 경우 저장소 위치 외에도 감시할 Git 분기와 하위 디렉터리를 지정할 수 있습니다.

구성 파일을 업데이트한 후 kubectl apply 명령어를 사용하여 이 파일을 클러스터에 적용합니다. 구성 동기화는 연산자 자체의 구성을 관리하지 않습니다.

특정 제품팀의 배포 저장소에 대한 액세스 권한을 다른 사용자에게 부여할 수 있습니다. 하지만 배포 저장소에 대한 액세스 권한을 사용자에게 부여할 때 이 저장소에 실행되는 조정자와 동일한 RBAC도 사용자에게 부여됩니다.

구성 동기화와 저장소 간의 인증 및 승인을 구성하려면 git-creds 보안 비밀 구성의 설치 단계를 참조하세요.

객체 변형 무시

구성 동기화가 존재한 이후 클러스터에서 객체 상태를 유지하길 원하지 않는 경우, 구성 동기화로 변형을 무시하려는 객체에 client.lifecycle.config.k8s.io/mutation: ignore 주석을 추가할 수 있습니다. 이 주석을 사용하려면 멀티 저장소 모드를 사용 설정하고 버전 1.7.0 이상을 사용해야 합니다.

다음 예시에서는 객체에 주석을 추가하는 방법을 보여줍니다.

metadata:
  annotations:
    client.lifecycle.config.k8s.io/mutation: ignore 

클러스터의 관리 객체에서 이 주석을 수동으로 수정할 수 없습니다.

다음 단계