Config Sync システム Pod のノード配置をカスタマイズする

このドキュメントでは、クラスタで実行されている Config Sync システム Pod のノード配置を構成する方法について説明します。ノードの配置の構成は、セキュリティ上の理由で Config Sync システム Pod を特定のノードに分離する場合や、コスト削減のために Config Sync を安価なノードでスケジュールする場合などに役立ちます。

MutatingAdmissionPolicy について

MutatingAdmissionPolicy は、Kubernetes バージョン 1.34 で使用可能な Kubernetes 機能です。クラスタで MutatingAdmissionPolicy が使用可能な場合は、Kubernetes API に変更が書き込まれるたびに動作をカスタマイズできます。

Config Sync のコンテキストでは、MutatingAdmissionPolicy を使用して、Config Sync システム Namespace で実行される Pod にノード配置パラメータを追加できます。これらのパラメータには、nodeSelector やアフィニティなどの Pod 仕様フィールドが含まれます。このドキュメントでは、Config Sync で MutatingAdmissionPolicy を使用する方法の例を示します。他の例については、Config Sync のオープンソース リポジトリをご覧ください。

nodeSelector を設定する

次の例は、MutatingAdmissionPolicy を使用して、ラベル configmanagement.gke.io/system: "true" を持つ Config Sync システム Namespace のそれぞれで実行されているすべての Pod に nodeSelector を自動的に追加する方法を示しています。Config Sync システムの名前空間には、config-management-systemconfig-management-monitoringresource-group-system があります。

apiVersion: admissionregistration.k8s.io/v1beta1
kind: MutatingAdmissionPolicy
metadata:
  name: "my-pod-node-selector"
spec:
  matchConstraints:
    resourceRules:
    - apiGroups:   [""]
      apiVersions: ["v1"]
      operations:  ["CREATE", "UPDATE"]
      resources:   ["pods"]
  failurePolicy: Fail
  reinvocationPolicy: IfNeeded
  mutations:
  # Basic example of adding nodeSelector: https://kubernetes.io/docs/concepts/scheduling-eviction/assign-pod-node/
  # Similar mutations can be applied for affinities, tolerations, and so on
  - patchType: "JSONPatch"
    jsonPatch:
      expression: >
        [
          JSONPatch{
            op: "add", path: "/spec/nodeSelector",
            value: {
              "LABEL_KEY": "LABEL_VALUE",
            }
          }
        ]
---
apiVersion: admissionregistration.k8s.io/v1beta1
kind: MutatingAdmissionPolicyBinding
metadata:
  name: "configsync-node-selector"
spec:
  policyName: "my-pod-node-selector"
  matchResources:
    namespaceSelector:
      matchLabels:
        # This namespace selector only selects Config Sync system namespaces
        configmanagement.gke.io/system: "true"
  • LABEL_KEY は、ノードセレクタで使用されるラベルキーに置き換えます。
  • LABEL_VALUE は、ノードセレクタで使用されるラベル値に置き換えます。

この構成をクラスタに適用すると、すべての Config Sync システム Pod がラベル LABEL_KEY=LABEL_VALUE のノードにスケジュールされます。