컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요.

클러스터 및 클러스터 범위 객체 구성

이 페이지에서는 클러스터와 클러스터 범위 객체를 구성하는 방법을 설명합니다. 네임스페이스 및 네임스페이스 범위 객체 구성도 설명합니다.

구조화되지 않은 저장소의 경우 가장 편리한 방법으로 저장소의 클러스터 및 클러스터 범위 객체의 구성을 구조화할 수 있습니다. 저장소에 ClusterSelector가 없으면 클러스터 범위 객체의 모든 구성이 구성 동기화에 등록된 모든 클러스터에 적용됩니다.

계층적 저장소에서 클러스터 및 클러스터 범위 객체의 모든 구성계층적 저장소cluster/ 디렉터리 내에 있습니다. 저장소에 ClusterSelector가 없으면 cluster/의 구성이 구성 동기화에 등록된 모든 클러스터에 적용됩니다.

구성 영향을 받는 클러스터 제한

일반적으로 구성 동기화는 등록된 각 클러스터에 구성을 적용합니다. 구성이 계층적 저장소의 namespaces/ 하위 디렉터리 내에 있는 경우 Config Sync는 먼저 각 클러스터에 네임스페이스를 만든 다음 상속된 모든 구성을 해당 네임스페이스에 적용합니다.

그러나 클러스터의 하위 집합에 구성을 적용해야 하는 경우 구성에 주석 또는 ClusterSelector를 추가할 수 있습니다. 이러한 기능을 사용하는 방법은 ClusterSelector 사용을 참조하세요.

클러스터의 라벨 구성

클러스터 구성을 사용하여 클러스터의 라벨과 주석을 구성할 수 있습니다. ClusterSelector를 사용하는 경우 각 클러스터에는 ClusterSelector에서 선택할 수 있는 라벨 집합이 필요합니다. 클러스터에 라벨을 수동으로 지정할 수도 있지만 클러스터 구성을 사용하여 라벨을 구성하는 것이 좋습니다.

CustomResourceDefinition 구성

구성 동기화를 사용하면 다른 리소스를 동기화하는 것과 동일한 방식으로 CustomResourceDefinitions(CRDs)를 동기화할 수 있습니다. CRD를 동기화할 때는 다음 사항에 유의해야 합니다.

  • 네임스페이스화된 커스텀 리소스를 선언하더라도 계층적 저장소의 CRD는 cluster/ 디렉터리에 있어야 합니다.

  • CRD 및 해당 CustomResources에 대한 업데이트는 예측 가능한 순서로 진행되지 않습니다. 동일한 커밋에서 CRD와 해당 CustomResources를 수정하면 커스텀 리소스가 업데이트되기 전에 CRD 업데이트를 예상하지 않습니다. 이로 인해 CustomResource와 CRD 모두 클러스터에 나타날 때까지 nomos status에서 잠시 일시적인 오류를 보고할 수 있습니다.

  • CRD가 저장소의 CustomResource에 의존하는 경우 Config Sync는 CRD를 삭제할 수 없습니다. CRD를 삭제하려면 해당하는 CustomResource도 삭제해야 합니다. 저장소의 동일한 커밋에서 이 둘을 모두 삭제하는 것이 좋습니다.

  • 클러스터에 CRD가 이미 있으면 CRD를 동기화하지 않고도 CustomResource를 동기화할 수 있습니다.

클러스터 하위 집합 구성

configsync.gke.io/cluster-name-selector 주석을 사용하여 클러스터의 하위 집합에 구성을 적용할 수 있습니다. 이 주석을 사용하여 클러스터 이름으로 표시된 클러스터 집합에 구성을 적용할 수 있습니다. 주석 값은 쉼표로 구분된 대상 클러스터 이름 목록입니다. 클러스터 범위 객체와 네임스페이스 범위 객체에 주석을 적용할 수 있습니다. 주석이 클러스터 이름과 일치하고 클러스터가 속한 네임스페이스도 선택된 경우 네임스페이스 객체가 선택됩니다.

단일 클러스터 선택

다음 구성은 네임스페이스 읽기에 대한 권한 집합을 정의하는 namespace-reader라는 역할을 만듭니다. 이 역할은 이름이 cluster-1인 클러스터에서만 인스턴스화됩니다.

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: my-namespace
  name: namespace-reader
  annotations:
    configsync.gke.io/cluster-name-selector: cluster-1
rules:
- apiGroups: [""]
  resources: ["namespaces"]
  verbs: ["get", "watch", "list"]

클러스터 목록 선택

다음 구성은 이전 예시와 동일한 역할을 만들지만 이 역할은 cluster-1, cluster-2 또는 cluster-3이라는 이름의 클러스터에서만 인스턴스화됩니다.

kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: my-namespace
  name: namespace-reader
  annotations:
    configsync.gke.io/cluster-name-selector: cluster-1,cluster-2,cluster-3
rules:
- apiGroups: [""]
  resources: ["namespaces"]
  verbs: ["get", "watch", "list"]

ClusterSelector 사용

ClusterSelector는 Kubernetes labelSelector를 사용하는 특수 유형의 구성입니다. ClusterSelector를 사용하면 클러스터 라벨에 따라 특정 구성을 적용할 클러스터를 제한할 수 있습니다. 또한 ClusterSelector를 사용하여 네임스페이스 범위 객체를 인스턴스화하는 클러스터를 제한할 수 있습니다.

다른 labelSelector와 마찬가지로 ClusterSelector는 AND 로직을 사용하여 작동합니다. ClusterSelector는 AND 로직을 사용하므로 정의한 모든 라벨과 일치하는 경우에만 객체가 선택됩니다.

ClusterSelector 구성은 클러스터에서 지속되지 않습니다. 대신 주석을 사용하여 다른 구성에서 참조하며 이 구성은 ClusterSelector와 일치하는 클러스터에만 적용됩니다.

ClusterSelector를 사용하려면 각 클러스터마다 고유한 이름이 있어야 합니다. 클러스터마다 라벨을 직접 적용할 수도 있지만 클러스터 구성을 사용하는 것이 좋습니다.

다음으로 ClusterSelector를 만들고 다른 구성에서 참조합니다.

클러스터에 라벨 추가

ClusterSelector를 사용하려면 각 클러스터에 선택할 수 있는 라벨 집합이 있어야 합니다. 수동으로 클러스터에 라벨을 지정할 수 있지만 클러스터마다 클러스터 구성을 사용하는 것이 좋습니다. 구조화되지 않은 저장소에서 클러스터 구성은 동기화 디렉터리 또는 하위 디렉터리에 임의로 저장할 수 있습니다. 계층적 저장소에서 클러스터 구성은 Git 저장소의 clusterregistry/ 디렉터리에 저장됩니다.

config-management.yaml 파일의 clusterName 필드는 클러스터 구성 중 하나 이상의 metadata.name 필드와 일치해야 합니다.

다음 클러스터 구성 예시에서는 cluster-2environment: prodlocation: central 라벨이 포함되도록 선언합니다.

kind: Cluster
apiVersion: clusterregistry.k8s.io/v1alpha1
metadata:
  name: cluster-2
  labels:
    environment: prod
    location: central

클러스터 구성을 사용하여 주석을 적용할 수도 있습니다.

ClusterSelector 만들기

ClusterSelector는 지정된 라벨 또는 라벨 조합이 있는 클러스터만 선택합니다. 구조화되지 않은 저장소에서 ClusterSelector는 동기화 디렉터리 또는 하위 디렉터리에 임의로 저장할 수 있습니다. 계층적 저장소에서 ClusterSelector는 저장소에서 최상위 clusterregistry/ 디렉터리에 저장될 수 있습니다.

다음 ClusterSelector는 environment: prod 라벨이 있는 클러스터만 선택합니다.

kind: ClusterSelector
apiVersion: configmanagement.gke.io/v1
metadata:
  name: selector-env-prod
spec:
  selector:
    matchLabels:
      environment: prod

다음 ClusterSelector는 location: central 또는 location: west 라벨이 있는 클러스터를 선택합니다.

kind: ClusterSelector
apiVersion: configmanagement.gke.io/v1
metadata:
  name: selector-central-or-west
spec:
  selector:
    matchExpressions:
      - key: location
        operator: In
        values:
        - central
        - west 

ClusterSelector는 다른 구성에서 참조하기 전까지 어떠한 영향도 주지 않습니다.

ClusterSelector 참조

다른 구성에서 ClusterSelector를 참조하려면 configmanagement.gke.io/cluster-selector: CLUSTERSELECTOR-NAME 주석을 설정합니다.

다음 구성은 네임스페이스 읽기에 대한 권한 집합을 정의하는 namespace-reader라는 ClusterRole을 만듭니다. 이 ClusterRole은 selector-env-prod ClusterSelector와 일치하는 클러스터에서만 인스턴스화됩니다.

kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: namespace-reader
  annotations:
    configmanagement.gke.io/cluster-selector: selector-env-prod
rules:
- apiGroups: [""]
  resources: ["namespaces"]
  verbs: ["get", "watch", "list"]

네임스페이스 범위 구성 영향을 받는 클러스터 제한

기본적으로 구성 동기화는 네임스페이스에서 상속하는 구성을 각 클러스터의 네임스페이스에 적용합니다. ClusterSelector를 사용하면 클러스터의 하위 집합에만 구성을 적용할 수 있습니다.

예를 들어 클러스터의 지리적 위치 또는 클라이언트의 지리적 위치에 따라 클러스터를 다르게 구성할 수 있습니다. 이 구성은 현지화 또는 법률 준수에 유용할 수 있습니다. 이 섹션의 예시는 location: france 라벨이 지정된 클러스터에만 언어별 구성을 적용합니다.

다음 클러스터 구성은 location: france 라벨을 cluster-1이라는 클러스터에 추가합니다.

kind: Cluster
apiVersion: clusterregistry.k8s.io/v1alpha1
metadata:
  name: cluster-1
  labels:
    location: france

각 관련 클러스터에 직접 라벨을 지정할 수 있지만 이 프로세스는 오류가 발생할 수 있으므로 권장하지 않습니다.

선택하려는 라벨을 참조하는 ClusterSelector 구성을 만듭니다. 다음 ClusterConfig는 location: france 라벨을 선택합니다.

kind: ClusterSelector
apiVersion: configmanagement.gke.io/v1
metadata:
  name: selector-location-france
spec:
  selector:
    matchLabels:
      location: france

ClusterSelector는 다른 구성에서 참조하기 전까지 어떠한 영향도 주지 않습니다. 다음 RoleBinding 구성은 selector-location-france ClusterSelector와 일치하는 클러스터만 선택합니다. 예를 들어 규정 준수 가이드라인이 특정 서비스 계정이 지정된 지리적 리전에 있는 클러스터의 정보만 볼 수 있도록 허용한 경우 이 구성이 유용할 수 있습니다.

kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: viewers
  annotations:
    configmanagement.gke.io/cluster-selector: selector-location-france
subjects:
- kind: Group
  name: system:serviceaccounts:foo
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: ClusterRole
  name: view
  apiGroup: rbac.authorization.k8s.io

이 구성을 추상 네임스페이스 또는 네임스페이스 디렉터리(예: namespaces/eng)에 배치하면 클러스터를 상속하는 네임스페이스에 적용되지만 location: france 라벨이 지정된 클러스터에만 해당됩니다.

다음 단계