本文档介绍了如何为集群上运行的 Config Sync 系统 Pod 配置节点放置。在某些情况下,配置节点放置位置非常有用,例如出于安全目的将 Config Sync 系统 Pod 隔离到特定节点,或者出于节省费用的目的在更便宜的节点上调度 Config Sync。
关于 MutatingAdmissionPolicy
MutatingAdmissionPolicy 是 Kubernetes 1.34 版中提供的 Kubernetes 功能。如果您的集群中提供 MutatingAdmissionPolicy,您可以在有人向 Kubernetes API 写入更改时自定义行为。
在 Config Sync 的上下文中,您可以使用 MutatingAdmissionPolicy 将节点放置参数添加到在 Config Sync 系统命名空间中运行的 Pod 中。这些参数包括 Pod 规范字段,例如 nodeSelector 和 affinity。本文档提供了一个示例,说明了如何将 MutatingAdmissionPolicy 与 Config Sync 搭配使用,您可以在 Config Sync 开源代码库中找到更多示例。
设置 nodeSelector
以下示例展示了如何使用 MutatingAdmissionPolicy 自动向每个在具有标签 configmanagement.gke.io/system: "true" 的各个 Config Sync 系统命名空间中运行的 Pod 添加 nodeSelector。
Config Sync 系统命名空间包括 config-management-system、config-management-monitoring 和 resource-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 的节点上。