In diesem Dokument wird beschrieben, wie Sie die Knotenplatzierung für Config Sync-System-Pods konfigurieren, die in Ihrem Cluster ausgeführt werden. Die Konfiguration der Knotenplatzierung kann in Situationen wie der Isolierung von Config Sync-System-Pods auf bestimmten Knoten aus Sicherheitsgründen oder der Planung von Config Sync auf kostengünstigeren Knoten zur Kosteneinsparung nützlich sein.
MutatingAdmissionPolicy
MutatingAdmissionPolicy ist eine Kubernetes-Funktion, die in Kubernetes-Version 1.34 verfügbar ist.
Wenn MutatingAdmissionPolicy in Ihrem Cluster verfügbar ist, können Sie das Verhalten anpassen, wenn jemand eine Änderung in die Kubernetes API schreibt.
Im Kontext von Config Sync können Sie MutatingAdmissionPolicy verwenden, um Knotenplatzierungsparameter in Pods einzufügen, die in Config Sync-Systemnamespaces ausgeführt werden.
Zu diesen Parametern gehören Pod-Spezifikationsfelder wie nodeSelector und affinity.
In diesem Dokument finden Sie ein Beispiel dafür, wie Sie ein MutatingAdmissionPolicy mit Config Sync verwenden können. Weitere Beispiele finden Sie im Open-Source-Repository von Config Sync.
nodeSelectors festlegen
Im folgenden Beispiel sehen Sie, wie Sie einen MutatingAdmissionPolicy verwenden können, um jedem Pod, der in den Config Sync-System-Namespaces mit dem Label configmanagement.gke.io/system: "true" ausgeführt wird, automatisch einen nodeSelector hinzuzufügen.
Zu den Config Sync-Systemnamespaces gehören config-management-system, config-management-monitoring und 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"
- Ersetzen Sie
LABEL_KEYdurch den Labelschlüssel, der vom Knotenselektor verwendet werden soll. - Ersetzen Sie
LABEL_VALUEdurch den Labelwert, der vom Knotenselektor verwendet werden soll.
Nachdem Sie diese Konfiguration auf Ihren Cluster angewendet haben, werden alle Config Sync-System-Pods auf Knoten mit dem Label LABEL_KEY=LABEL_VALUE geplant.