本文档介绍了如何为在集群上运行的 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-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 的节点上。