Personalize o posicionamento dos nós dos pods do sistema Config Sync

Este documento explica como configurar o posicionamento de nós para os pods do sistema Config Sync que estão a ser executados no seu 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 agendar o Config Sync em nós mais baratos para fins de poupança de custos.

Acerca da MutatingAdmissionPolicy

MutatingAdmissionPolicy é uma funcionalidade do Kubernetes que está disponível na versão 1.34 do Kubernetes. Se MutatingAdmissionPolicy estiver disponível no seu cluster, pode personalizar o comportamento sempre que alguém escrever uma alteração na API Kubernetes.

No contexto da sincronização de configuração, pode usar MutatingAdmissionPolicy para adicionar parâmetros de posicionamento de nós em pods que são executados em espaços de nomes do sistema de sincronização de configuração. Estes parâmetros incluem campos de especificação de pods, como nodeSelector e afinidade. Este documento fornece um exemplo de como pode usar um MutatingAdmissionPolicy com o Config Sync, e pode encontrar mais exemplos no repositório de código aberto do Config Sync.

Defina nodeSelectors

O exemplo seguinte mostra como pode usar um MutatingAdmissionPolicy para adicionar automaticamente um nodeSelector a cada Pod em execução em cada um dos espaços de nomes do sistema Config Sync com a etiqueta configmanagement.gke.io/system: "true". Os espaços de nomes 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 da etiqueta a ser usada pelo seletor de nós.
  • Substitua LABEL_VALUE pelo valor da etiqueta a usar pelo seletor de nós.

Depois de aplicar esta configuração ao cluster, todos os pods do sistema Config Sync são agendados em nós com a etiqueta LABEL_KEY=LABEL_VALUE.