Personalizar o posicionamento de nós dos pods do sistema do Config Sync

Este documento explica como configurar o posicionamento de nós para pods do sistema Config Sync em execução no cluster. A configuração do posicionamento de nós pode ser útil em situações como isolar pods do sistema Config Sync em nós específicos para fins de segurança ou programar o Config Sync em nós mais baratos para economizar custos.

Sobre a MutatingAdmissionPolicy

A MutatingAdmissionPolicy é um recurso do Kubernetes disponível na versão 1.36 e mais recentes, que permite personalizar o comportamento sempre que alguém grava uma mudança na API Kubernetes.

No contexto do Config Sync, é possível usar a MutatingAdmissionPolicy para adicionar parâmetros de posicionamento de nós aos pods executados nos namespaces do sistema Config Sync. Esses parâmetros incluem campos de especificação de pod, como nodeSelector e afinidade. Este documento fornece um exemplo de como usar um MutatingAdmissionPolicy com o Config Sync. Encontre mais exemplos norepositório de código aberto do Config Sync .

Definir nodeSelectors

O exemplo a seguir mostra como usar uma MutatingAdmissionPolicy para adicionar automaticamente um nodeSelector a cada pod em execução em cada um dos namespaces do sistema Config Sync com o rótulo configmanagement.gke.io/system: "true". Os namespaces do sistema Config Sync incluem 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"

Substitua:

  • LABEL_KEY: a chave do rótulo a ser usada pelo seletor de nós.
  • LABEL_VALUE: o valor do rótulo a ser usado pelo seletor de nós.

Depois de aplicar essa configuração ao cluster, todos os pods do sistema Config Sync serão programados em nós com o rótulo LABEL_KEY=LABEL_VALUE.