Personnaliser l'emplacement des nœuds des pods système Config Sync

Ce document explique comment configurer le placement des nœuds pour les pods système Config Sync qui s'exécutent sur votre cluster. La configuration du placement des nœuds peut être utile dans des situations telles que l'isolation des pods système Config Sync sur des nœuds spécifiques à des fins de sécurité ou la planification de Config Sync sur des nœuds moins chers à des fins d'économies.

À propos de MutatingAdmissionPolicy

MutatingAdmissionPolicy est une fonctionnalité Kubernetes disponible dans Kubernetes version 1.36 et ultérieure, qui vous permet de personnaliser le comportement chaque fois qu'une personne écrit une modification dans l'API Kubernetes.

Dans le contexte de Config Sync, vous pouvez utiliser MutatingAdmissionPolicy pour ajouter des paramètres de placement de nœuds dans les pods qui s'exécutent dans les espaces de noms système Config Sync. Ces paramètres incluent des champs de spécification de pod tels que nodeSelector et l'affinité. Ce document fournit un exemple d'utilisation d'un MutatingAdmissionPolicy avec Config Sync. Vous trouverez d'autres exemples dans le dépôt Config Sync Open Source.

Définir des nodeSelectors

L'exemple suivant montre comment utiliser une MutatingAdmissionPolicy pour ajouter automatiquement un nodeSelector à chaque pod s'exécutant dans chacun des espaces de noms système Config Sync avec le libellé configmanagement.gke.io/system: "true". Les espaces de noms système Config Sync incluent config-management-system, config-management-monitoring et 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"

Remplacez les éléments suivants :

  • LABEL_KEY: clé d'étiquette à utiliser par le sélecteur de nœuds.
  • LABEL_VALUE: valeur de libellé à utiliser par le sélecteur de nœuds.

Après avoir appliqué cette configuration à votre cluster, tous les pods système Config Sync sont planifiés sur des nœuds avec le libellé LABEL_KEY=LABEL_VALUE.