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 do 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 do Config Sync em nós específicos para fins de segurança ou agendar o Config Sync em nós mais baratos para economizar custos.

Sobre MutatingAdmissionPolicy

MutatingAdmissionPolicy é um recurso do Kubernetes disponível na versão 1.34. Se MutatingAdmissionPolicy estiver disponível no seu cluster, você poderá personalizar o comportamento sempre que alguém gravar uma mudança na API Kubernetes.

No contexto do Config Sync, é possível usar MutatingAdmissionPolicy para adicionar parâmetros de posicionamento de nós em pods que são executados em namespaces do sistema do Config Sync. Esses parâmetros incluem campos de especificação de pod, como nodeSelector e afinidade. Este documento mostra um exemplo de como usar um MutatingAdmissionPolicy com o Config Sync. Você pode encontrar mais exemplos no repositório de código aberto do Config Sync.

Definir nodeSelectors

O exemplo a seguir mostra como usar um MutatingAdmissionPolicy para adicionar automaticamente um nodeSelector a cada pod em execução em cada um dos namespaces do sistema do Config Sync com o rótulo configmanagement.gke.io/system: "true". Os namespaces do sistema do 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 pela chave de rótulo a ser usada pelo seletor de nós.
  • Substitua LABEL_VALUE pelo 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 do Config Sync serão programados em nós com o rótulo LABEL_KEY=LABEL_VALUE.