自定义 Config Sync 系统 Pod 的节点放置

本文档介绍了如何为在集群上运行的 Config Sync 系统 Pod 配置节点放置。在某些情况下,配置节点放置非常有用,例如出于安全考虑将 Config Sync 系统 Pod 隔离到特定节点,或者出于节省成本考虑在更便宜的节点上调度 Config Sync。

关于 MutatingAdmissionPolicy

MutatingAdmissionPolicy 是 Kubernetes 1.36 及更高版本中提供的 Kubernetes 功能, 可让您在有人向 Kubernetes API 写入更改时自定义行为。

在 Config Sync 的上下文中,您可以使用 MutatingAdmissionPolicy 将节点放置参数添加到在 Config Sync 系统命名空间中运行的 Pod 中。 这些参数包括 Pod 规范字段,例如 nodeSelector 和 affinity。 本文档提供了一个示例,说明如何将 MutatingAdmissionPolicy 与 Config Sync 搭配使用,您可以在 Config Sync 开源代码库中找到更多示例。

设置 nodeSelectors

以下示例展示了如何使用 MutatingAdmissionPolicy 为每个 Config Sync 系统命名空间中运行的每个 Pod 自动添加一个 nodeSelector,标签为 configmanagement.gke.io/system: "true"。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 的节点上。