コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

クラスタとクラスタ スコープ オブジェクトを構成する

このページでは、クラスタとクラスタ スコープ オブジェクトを構成する方法について説明します。Namespace オブジェクトと Namespace スコープ オブジェクトの構成もご覧ください。

非構造化リポジトリでは、リポジトリ内のクラスタやクラスタ スコープ オブジェクトの構成ファイルを最も都合の良い方法で整理できます。リポジトリに ClusterSelector を含めない場合、クラスタ スコープ オブジェクトのすべての構成ファイルは、Config Sync に登録されているすべてのクラスタに適用されます。

階層リポジトリでは、クラスタとクラスタ スコープ オブジェクトのすべての構成ファイルは、階層リポジトリcluster/ ディレクトリにあります。リポジトリに ClusterSelector を含めない場合、cluster/ の構成ファイルは、Config Sync に登録されているすべてのクラスタに適用されます。

構成ファイルを適用するクラスタを制限する

通常、Config Sync は登録済みの各クラスタに構成を適用します。構成ファイルが階層リポジトリの namespaces/ サブディレクトリ内にある場合、Config Sync はまず各クラスタ内に Namespace を作成し、継承したすべての構成ファイルをその Namespace に適用します。

ただし、クラスタのサブセットに構成ファイルを適用する必要がある場合は、構成ファイルにアノテーションまたは ClusterSelector を追加できます。これらの機能の使用方法については、ClusterSelector を使用するをご覧ください。

クラスタのラベルを構成する

クラスタ構成を使用して、クラスタのラベルとアノテーションを構成できます。ClusterSelector を使用する場合、各クラスタには ClusterSelector が選択できるラベルのセットが必要です。クラスタに手動でラベルを付けることはできますが、クラスタ コンフィグを使用してラベルを構成することをおすすめします。

CustomResourceDefinitions を構成する

Config Sync では、他のリソースの同期と同じ方法で CustomResourceDefinitions(CRD) を同期できます。CRD を同期するときに注意する点は、次のとおりです。

  • 階層リポジトリの CRD は、Namespace 付きのカスタム リソースを宣言する場合でも、cluster/ ディレクトリに配置する必要があります。

  • CRD とそれに対応する CustomResource の更新は、予測可能な順序では行われません。同じ commit で CRD とそれに対応する CustomResource を変更した場合、カスタム リソースが更新される前に CRD が更新されることはありません。これにより、CustomResource と CRD の両方がクラスタに存在するようになるまで、nomos status で一時的なエラーが報告されることがあります。

  • リポジトリ内の CustomResource が CRD に依存している場合、Config Sync で CRD を削除することはできません。CRD を削除するには、その CustomResource も削除する必要があります。リポジトリに対する同じ commit で両方を削除することをおすすめします。

  • CRD がすでにクラスタに存在していることを保証できれば、CRD と同期せずに CustomResource を同期できます。

クラスタのサブセットを構成する

configsync.gke.io/cluster-name-selector アノテーションを使用して、クラスタのサブセットに構成ファイルを適用できます。このアノテーションを使用すると、クラスタ名を使用して一連のクラスタに構成ファイルを適用できます。アノテーションの値は、ターゲット クラスタ名のカンマ区切りリストです。アノテーションは、クラスタ スコープ オブジェクトと Namespace スコープ オブジェクトに適用できます。アノテーションがクラスタ名と一致し、クラスタが属する Namespace が選択されている場合、Namespace オブジェクトが選択されます。

単一のクラスタを選択する

次の構成ファイルは、Namespace を読み取るための権限セットを定義する namespace-reader という Role を作成します。この Role は、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"]

クラスタのリストを選択する

次の構成ファイルは前の例と同じ Role を作成しますが、この Role は、cluster-1cluster-2cluster-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 を使用して、Namespace スコープ オブジェクトをインスタンス化するクラスタを制限することもできます。

他の labelSelector と同様に、ClusterSelector は AND ロジックを使用します。ClusterSelector は AND ロジックを使用するため、定義したすべてのラベルと一致する場合にのみ、オブジェクトが選択されます。

ClusterSelector 構成ファイルはクラスタ内で維持されません。代わりに、アノテーションを使用して別の構成ファイルで参照します。この構成ファイルは、ClusterSelector に一致するクラスタにのみ適用されます。

ClusterSelector を使用する前に、各クラスタに一意の名前を付ける必要があります。各クラスタにラベルを手動で適用できますが、Cluster 構成ファイルを使用することをおすすめします。

次に、ClusterSelector を作成して、別の構成で参照します。

ラベルをクラスタに追加する

ClusterSelector を使用するには、各クラスタに選択可能なラベルのセットが必要です。クラスタに手動でラベルを付けることもできますが、クラスタごとに Cluster 構成を使用することをおすすめします。非構造化リポジトリでは、Cluster の構成ファイルは同期ディレクトリまたはその下位ディレクトリに自由に保存できます。階層型リポジトリでは、Cluster 構成ファイルは Git リポジトリの clusterregistry/ ディレクトリに保存されます。

config-management.yaml ファイルの clusterName フィールドは、少なくとも 1 つの Cluster 構成ファイルの metadata.name フィールドと一致する必要があります。

次の Cluster 構成ファイルの例では、cluster-2environment: prod ラベルと location: central ラベルがあることを宣言しています。

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

Cluster 構成ファイルを使用してアノテーションを適用することもできます。

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"]

Namespace スコープの構成ファイルが影響を与えるクラスタを制限する

デフォルトでは、Config Sync は Namespace が継承した構成ファイルを、Namespace が存在する各クラスタの Namespace に適用します。ClusterSelector を使用して、構成をこのようなクラスタのサブセットにのみ適用できます。

たとえば、クラスタやそのクライアントの地理的位置に応じてクラスタを構成できます。この構成はローカライズやコンプライアンスに役立ちます。このセクションの例では、言語 / 地域に固有の構成ファイルをラベル location: france を持つクラスタのみに適用しています。

次の Cluster 構成では、cluster-1 という名前のクラスタに location: france ラベルが追加されます。

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

この構成ファイルを抽象 Namespace や namespaces/eng などの Namespace ディレクトリに配置すると、それを継承し、location: france ラベルを持つクラスタの Namespace にのみ適用されます。

次のステップ