Configurar programação

Esta página descreve as opções do programador e como configurar restrições de programação de pods padrão no Google Distributed Cloud (somente software) para clusters bare metal.

O Google Distributed Cloud oferece vários recursos padrão do Kubernetes que podem ser usados para controlar a programação de pods, como:

Para informações sobre restrições de distribuição da topologia de pods no Kubernetes, consulte Kubernetes Programador na documentação do Kubernetes.

Antes de começar

Antes de configurar a distribuição de pods padrão, verifique se cada nó no cluster tem os rótulos de topologia corretos. É possível usar a API Nodepool.Spec.TaintsAndLabels para aplicar rótulos. A rotulagem manual de nós com kubectl label oferece mais flexibilidade, mas exige rotulagem manual ao adicionar um novo nó ao cluster.

Configurar o programador personalizado padrão {#:config-default}

Rotular nós

  1. Adicione rótulos de topologia aos arquivos YAML do cluster e do pool de nós. O exemplo a seguir pressupõe que dois pools de nós de trabalho estão em racks diferentes e que os nós do plano de controle estão em rack1.

    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: abm-cluster
      namespace: cluster-abm-cluster
    spec:
      controlPlane:
        nodePoolSpec:
          labels:
            topology.k8s.io/rack: rack1
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: NodePool
    metadata:
      name: nodepool-rack1
      namespace: cluster-abm-cluster
    spec:
      labels:
        topology.k8s.io/rack: rack1
    ---
    apiVersion: baremetal.cluster.gke.io/v1
    kind: NodePool
    metadata:
      name: nodepool-rack2
      namespace: cluster-abm-cluster
    spec:
      labels:
        topology.k8s.io/rack: rack2
    
  2. Aplique a configuração atualizada do cluster.

    bmctl update cluster -c CLUSTER_NAME
    

    Substitua CLUSTER_NAME pelo nome do cluster.

  3. Aguarde a propagação do rótulo topology.k8s.io/rack para todos os nós do cluster.

Ativar restrições de distribuição de pods padrão

  1. Adicione a anotação preview.baremetal.cluster.gke.io/custom-scheduler-configuration:enable ao arquivo YAML do cluster.

  2. Adicione a seção schedulerConfiguration em cluster.spec.controlPlane no arquivo YAML do cluster.

    apiVersion: baremetal.cluster.gke.io/v1
    kind: Cluster
    metadata:
      name: abm-cluster
      namespace: cluster-abm-cluster
      annotations:
        preview.baremetal.cluster.gke.io/custom-scheduler-configuration: enable
    spec:
      controlPlane:
        schedulerConfiguration:
          defaultTopologySpreadConstraint:
            defaultConstraints:
            - topologyKey: topology.k8s.io/rack
              whenUnsatisfiable: DoNotSchedule
              maxSkew: 1
            defaultingType: List
    
  3. Aplique a configuração atualizada do cluster.

    bmctl update cluster -c CLUSTER_NAME
    

    Substitua CLUSTER_NAME pelo nome do cluster.

  4. Aguarde a conclusão da reconciliação do cluster. Monitore cluster.status.clusterState até que ele mostre Running. Um job control-plane-update é executado para cada nó do plano de controle durante esse processo.

Verificar a configuração de distribuição de pods

  1. Crie uma implantação de teste com cinco réplicas.

  2. Observe a distribuição de pods. A diferença no número de pods em nodepool-rack1 e nodepool-rack2 precisa ser exatamente um.

  3. Verifique o arquivo kube-scheduler-profile.config em cada nó do plano de controle. O arquivo, localizado em /etc/kubernetes/kube-scheduler-profile.config, precisa conter a configuração de distribuição da topologia de cluster.spec.

Resolver problemas

Para diagnosticar e resolver problemas com a distribuição de pods padrão, verifique o seguinte:

  1. Analise BareMetalMachine.Status.ControlPlaneComponents para conferir o status do recurso.
  2. Examine os registros de cluster-operator e cap-controller-manager para eventos relevantes.
  3. Se os pods estáticos kube-scheduler falharem, verifique se a configuração do programador está correta no arquivo YAML do cluster.

A seguir