Personaliza la ubicación de los nodos de los Pods del sistema de Sincronizador de configuración

En este documento, se explica cómo configurar la ubicación de nodos para los Pods del sistema del Sincronizador de configuración que se ejecutan en tu clúster. Configurar la ubicación de nodos puede ser útil en situaciones como aislar los Pods del sistema del Sincronizador de configuración en nodos específicos por motivos de seguridad o programar el 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 Kubernetes 1.36 y versiones posteriores, 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 a los Pods que se ejecutan en los espacios de nombres del sistema del Sincronizador de configuración. Estos parámetros incluyen campos de especificación 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 elrepositorio de código abierto del Sincronizador de configuración.

Cómo establecer nodeSelectors

En el siguiente ejemplo, se muestra cómo puedes usar un MutatingAdmissionPolicy para agregar automáticamente un nodeSelector a cada Pod que se ejecuta en cada uno de los espacios de nombres del sistema del Sincronizador de configuración con la etiqueta configmanagement.gke.io/system: "true". Los espacios de nombres del sistema del 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 etiqueta que usará el selector de nodos.

Después de aplicar esta configuración a tu clúster, todos los Pods del sistema del Sincronizador de configuración se programan en nodos con la etiqueta LABEL_KEY=LABEL_VALUE.