En este documento, se explica cómo configurar la colocación de nodos para los Pods del sistema de Config Sync que se ejecutan en tu clúster. Configurar la ubicación de los nodos puede ser útil en situaciones como aislar los Pods del sistema de Config Sync en nodos específicos por motivos de seguridad o programar Config Sync en nodos más económicos para ahorrar costos.
Acerca de MutatingAdmissionPolicy
MutatingAdmissionPolicy es una función de Kubernetes que está disponible en la versión 1.34 de Kubernetes.
Si MutatingAdmissionPolicy está disponible en tu clúster, puedes personalizar el comportamiento cada vez que alguien escriba un cambio en la API de Kubernetes.
En el contexto del Sincronizador de configuración, puedes usar MutatingAdmissionPolicy para agregar parámetros de ubicación de nodos a los Pods que se ejecutan en los espacios de nombres del sistema del Sincronizador de configuración.
Estos parámetros incluyen campos de especificaciones de Pod, como nodeSelector y afinidad.
En este documento, se proporciona un ejemplo de cómo puedes usar un MutatingAdmissionPolicy con el Sincronizador de configuración, y puedes encontrar más ejemplos en el repositorio de código abierto del Sincronizador de configuración.
Cómo configurar nodeSelectors
En el siguiente ejemplo, se muestra cómo puedes usar un MutatingAdmissionPolicy para agregar automáticamente un nodeSelector a cada Pod que se ejecute en cada uno de los espacios de nombres del sistema de Config Sync con la etiqueta configmanagement.gke.io/system: "true".
Los espacios de nombres del sistema de Config Sync incluyen config-management-system, config-management-monitoring y 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"
- Reemplaza
LABEL_KEYpor la clave de etiqueta que usará el selector de nodos. - Reemplaza
LABEL_VALUEpor el valor de la etiqueta que usará el selector de nodos.
Después de aplicar esta configuración a tu clúster, todos los Pods del sistema de Config Sync se programan en nodos con la etiqueta LABEL_KEY=LABEL_VALUE.