本文說明如何為叢集上執行的 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 和親和性。本文提供如何搭配 Config Sync 使用 MutatingAdmissionPolicy 的範例,您可以在 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 的節點。