정보 소스에 구성 추가

이 페이지에서는 정보 소스에 저장된 구성을 추가하고 구성하는 방법을 설명합니다.

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

구성 동기화는 이러한 리소스를 관리할 때 등록된 클러스터를 구성을 사용하여 동기화된 상태로 유지합니다. 구성은 정보 소스에 저장되는 YAML 또는 JSON 파일입니다. 구성 동기화는 Git 저장소, OCI 이미지, Helm 차트(미리보기)를 정보 소스로 지원합니다. 구성에는 kubectl apply 명령어를 사용하여 클러스터에 수동으로 적용할 수 있는 동일한 유형의 구성 세부정보가 포함되어 있습니다. 클러스터에 있을 수 있는 모든 Kubernetes 객체에 구성을 만들 수 있습니다. 하지만 보안 비밀 등의 일부 Kubernetes 객체에는 정보 소스에 저장하기에 부적절한 민감한 정보가 있습니다. 자체 판단에 따라 이러한 유형의 객체를 구성 동기화로 관리할지 여부를 결정합니다.

또한 구성 동기화를 구성 커넥터와 함께 사용하여 Google Cloud 리소스에 대한 구성을 동기화할 수 있습니다. 구성 커넥터 작업에 대한 자세한 내용은 구성 커넥터를 사용하여 Google Cloud 리소스 관리를 참조하세요. 구성 컨트롤러를 설정하여 구성 동기화와 구성 커넥터 설치를 간소화할 수 있습니다.

이 페이지에서는 정보 소스에 구성을 추가하는 방법을 보여줍니다. OCI 이미지를 게시하는 방법을 알아보려면 Artifact Registry에서 OCI 아티팩트 동기화를 참조하세요. Helm 차트에서 동기화하는 방법을 알아보려면 Artifact Registry에서 Helm 차트 동기화(미리보기)를 참조하세요.

구성 방법 선택

구성 동기화는 구성 스토리지 및 버전 제어를 위해 정보 소스를 사용합니다. 정보 소스에 선택할 수 있는 두 가지 형식은 구조화되지 않은 형식계층 구조 형식 입니다.

구조화되지 않은 소스 형식을 사용하면 가장 편리한 방식으로 구성을 조직화할 수 있습니다. 이 형식은 Kustomize, kpt 또는 Helm과 같은 도구를 사용하여 구성을 정리하거나 생성할 때 특히 유용합니다. 구성 방법 예시는 구조화되지 않은 저장소의 예시 형식을 참조하세요.

계층적 또는 구조화된 소스 형식은 구성을 고유 카테고리로 구분하므로 구성을 쉽게 구성할 수 있습니다. 카테고리는 시스템 구성, 클러스터 메타데이터, 클러스터 수준 구성, 네임스페이스 구성입니다. 계층 구조 소스 형식에 대한 자세한 내용은 계층 구조 저장소 구조를 참조하세요.

구조화되지 않은 형식은 대부분의 사용자에게 권장됩니다. 또한 RepoSync 객체를 구성할 때는 구조화되지 않은 소스 형식을 사용해야 합니다.

구조화되지 않은/계층 구조 형식에 지원되는 기능

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

특성 구조화되지 않은 형식(권장) 계층 구조 형식
RootSync 객체 또는 중앙의 단일 정보 소스의 형식으로 사용 지원됨 지원됨
RepoSync 객체의 형식으로 사용 지원됨 지원되지 않음
계층 구조 컨트롤러와 함께 사용 지원됨 권장하지 않음
ClusterSelector 지원됨 지원됨
NamespaceSelector 지원됨 지원됨
nomos hydrate 명령어 --source-format=unstructured 플래그와 함께 지원됨 지원됨
nomos init 명령어 지원되지 않음 지원됨
nomos vet 명령어 --source-format=unstructured 플래그와 함께 지원됨 지원됨
다른 모든 nomos 명령어 지원됨 지원됨
추상 네임스페이스 지원되지 않음 지원됨
Repo 객체 지원되지 않음 지원됨
HierarchyConfig 객체 지원되지 않음 지원됨
계층 구조 컨트롤러의 계층적 네임스페이스 지원됨 지원되지 않음

정보 소스에 구성 추가

구조화되지 않은 형식을 만들 때는 생성되는 즉시 구성을 추가할 수 있습니다. 계층 구조 형식을 만드는 경우 nomos init 명령어를 사용하여 정보 소스를 초기화하거나 디렉터리 구조를 수동으로 만듭니다.

빈 디렉터리는 Git 저장소에 커밋할 수 없습니다. 따라서 구성 동기화를 구성하기 전 구성을 만들고 이를 저장소에 추가합니다.

정보 소스를 만들고 구성을 추가한 후 nomos vet 명령어를 사용하여 정보 소스의 구조를 확인하고 구성의 구문과 유효성을 검사합니다.

정보 소스에서 읽도록 구성 동기화 구성

정보 소스를 만들고 구성을 배치한 후에는 소스에서 읽도록 구성 동기화를 구성할 수 있습니다. 이 단계를 완료한 후 구성 동기화가 정보 소스의 구성을 클러스터에 동기화합니다.

구성 동기화를 설치할 때 정보 소스 위치를 구성하고 나중에 구성 동기화의 구성을 수정할 수 있습니다. 소스에 구성 이외의 콘텐츠가 있는 경우 정보 소스의 위치 외에도 감시할 브랜치와 하위 디렉터리를 지정할 수 있습니다.

계층 구조 형식을 사용 중이고 kubectl로 구성 동기화를 수동으로 설치하는 경우 연산자의 구성을 system/ 디렉터리나 cluster/ 또는 namespaces/와 같은 다른 예약된 디렉터리에 배치하지 마세요. 구성을 예약된 디렉터리 중 하나에 배치하면 nomos vet이 실패하고 KNV1033: IllegalSystemResourcePlacementError, KNV1038: IllegalKindInNamespacesError 또는 KNV1039: IllegalKindInClusterError와 같은 오류가 로깅됩니다.

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

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

객체 변형 무시

구성 동기화가 존재한 이후 클러스터에서 객체 상태를 유지하길 원하지 않는 경우, 구성 동기화로 변형을 무시하려는 객체에 client.lifecycle.config.k8s.io/mutation: ignore 주석을 추가할 수 있습니다.

주석을 사용하려면 RootSync 및 RepoSync API를 사용 설정해야 합니다.

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

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

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

다음 단계