Personalizar la colocación de nodos de los pods del sistema Config Sync

En este documento se explica cómo configurar la colocación de nodos para los pods del sistema Config Sync que se ejecutan en tu clúster. Configurar la colocación de nodos puede ser útil en situaciones como aislar pods del sistema Config Sync en nodos específicos por motivos de seguridad o programar Config Sync en nodos más baratos para ahorrar costes.

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 de Config Sync, puedes usar MutatingAdmissionPolicy para añadir parámetros de colocación de nodos en los pods que se ejecutan en los espacios de nombres del sistema de Config Sync. Estos parámetros incluyen campos de especificación de pods, como nodeSelector y afinidad. En este documento se muestra un ejemplo de cómo usar un MutatingAdmissionPolicy con Config Sync. Puedes consultar más ejemplos en el repositorio de código abierto de Config Sync.

Definir nodeSelectors

En el siguiente ejemplo se muestra cómo puedes usar un MutatingAdmissionPolicy para añadir 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"
  • Sustituye LABEL_KEY por la clave de la etiqueta que va a usar el selector de nodos.
  • Sustituye LABEL_VALUE por 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 programarán en nodos con la etiqueta LABEL_KEY=LABEL_VALUE.