En este documento, se explica cómo configurar la colocación de nodos para los Pods del sistema de Sincronizador de configuración 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 Sincronizador de configuración en nodos específicos por motivos de seguridad o planificar Sincronizador de configuración en nodos más económicos para ahorrar costos.
Acerca de MutatingAdmissionPolicy
MutatingAdmissionPolicy es una función de Kubernetes disponible en la versión 1.36 y posteriores de Kubernetes, que te permite personalizar el comportamiento cada vez que alguien escribe 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 en 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 Sincronizador de configuración con la etiqueta configmanagement.gke.io/system: "true".
Los espacios de nombres del sistema de Sincronizador de configuración 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 lo siguiente:
LABEL_KEY: Es la clave de etiqueta que usará el selector de nodos.LABEL_VALUE: Es 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 Sincronizador de configuración se programan en nodos con la etiqueta LABEL_KEY=LABEL_VALUE.