Personalizzare il posizionamento dei nodi dei pod di sistema Config Sync

Questo documento spiega come configurare il posizionamento dei nodi per i pod di sistema Config Sync in esecuzione sul cluster. La configurazione del posizionamento dei nodi può essere utile in situazioni come l'isolamento dei pod di sistema Config Sync su nodi specifici per motivi di sicurezza o la pianificazione di Config Sync su nodi più economici per risparmiare sui costi.

Informazioni su MutatingAdmissionPolicy

MutatingAdmissionPolicy è una funzionalità di Kubernetes disponibile in Kubernetes versione 1.36 e successive, che ti consente di personalizzare il comportamento ogni volta che qualcuno scrive una modifica all'API Kubernetes.

Nel contesto di Config Sync, puoi utilizzare MutatingAdmissionPolicy per aggiungere parametri di posizionamento dei nodi nei pod eseguiti negli spazi dei nomi di sistema di Config Sync. Questi parametri includono campi delle specifiche del pod come nodeSelector e affinità. Questo documento fornisce un esempio di come utilizzare un MutatingAdmissionPolicy con Config Sync e puoi trovare altri esempi nel repository open source di Config Sync.

Imposta nodeSelector

L'esempio seguente mostra come utilizzare un MutatingAdmissionPolicy per aggiungere automaticamente un nodeSelector a ogni pod in esecuzione in ciascuno degli spazi dei nomi di sistema di Config Sync con l'etichetta configmanagement.gke.io/system: "true". Gli spazi dei nomi di sistema di Config Sync includono config-management-system, config-management-monitoring e 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"

Sostituisci quanto segue:

  • LABEL_KEY: la chiave di etichetta da utilizzare dal selettore di nodi.
  • LABEL_VALUE: il valore dell'etichetta da utilizzare dal selettore di nodi.

Dopo aver applicato questa configurazione al cluster, tutti i pod di sistema Config Sync vengono pianificati sui nodi con l'etichetta LABEL_KEY=LABEL_VALUE.