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 in 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 nella versione 1.34 di Kubernetes. Se MutatingAdmissionPolicy è disponibile sul tuo cluster, puoi 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 i 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 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 LABEL_KEY con la chiave dell'etichetta da utilizzare dal selettore di nodi.
  • Sostituisci LABEL_VALUE con 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.