Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Implementar agendamento com reconhecimento de topologia

Última atualização: Oct 21, 2026

No Container Service for Kubernetes, combine o agendamento gang com restrições de reconhecimento de topologia para tentar reposicionar pods em diferentes domínios de topologia até encontrar um domínio adequado ou fixe pods em conjuntos de implantação de baixa latência para afinidade granular. Este tópico explica como implementar o agendamento com reconhecimento de topologia.

Introdução

Tarefas de machine learning e big data exigem alta largura de banda entre pods. O agendador padrão do Kubernetes distribui os pods pelo cluster, o que aumenta os saltos de rede e a latência. O agendamento por afinidade nativo (NodeAffinity/PodAffinity) pode colocalizar pods na mesma zona ou rack, mas apresenta as seguintes limitações.

  • Os pods não conseguem tentar novamente em outros domínios de topologia. O agendamento por afinidade nativo fixa toda a tarefa no domínio em que o primeiro pod for alocado. Se esse domínio não tiver capacidade suficiente, os pods restantes permanecem no estado Pending mesmo quando outro domínio poderia comportar todos eles.

  • Os rótulos de nó existem apenas no nível de zona de disponibilidade, portanto a afinidade de pod não pode direcionar domínios de topologia mais granulares.

Tentar agendamento em vários domínios de topologia

Adicione um identificador de agendamento gang a uma tarefa para permitir a alocação simultânea de recursos e novas tentativas de agendamento em vários domínios de topologia.

  1. Adicione um identificador de agendamento gang aos rótulos do pod (Trabalhar com agendamento gang).

    ...
    labels:
      pod-group.scheduling.sigs.k8s.io/name: tf-smoke-gpu # tf-smoke-gpu is the name of the PodGroup. Specify a custom value.
      pod-group.scheduling.sigs.k8s.io/min-available: "3" # You can set this value to the number of pods in the job.
    ...
  2. Adicione a restrição de agendamento com reconhecimento de topologia à anotação do pod.

    annotations:
      alibabacloud.com/topology-aware-constraint: {\"name\":\"test\",\"required\":{\"topologies\":[{\"key\":\"kubernetes.io/hostname\"}],\"nodeSelectors\":[{\"matchLabels\":{\"test\":\"abc\"}}]}}

    O valor de alibabacloud.com/topology-aware-constraint deve ser uma string JSON válida:

    {
      "name": xxx, # Any name.
      "required": {
        "topologies": [
          {
            "key": xxx # The key that specifies the topology domain for affinity.
          }
        ],
        "nodeSelectors": [
          {
            # This structure follows the labelSelector format in the native Kubernetes nodeAffinity.
            "matchLabels": {},
            "matchExpressions": {} 
          }
        ]
      }
    }

    Com essa configuração, o agendador coloca todos os pods rotulados com pod-group.scheduling.sigs.k8s.io/name: tf-smoke-gpu nos nós que correspondem ao rótulo test=abc. Exemplo de saída:

    kubectl get pod -ojson | jq '.items[] | {"name":.metadata.name,"ann":.metadata.annotations["alibabacloud.com/topology-aware-constraint"], "node": spec.nodeName}'
    {
        "name": "nginx-deployment-basic-69f47fc6db-6****",
        "ann": "{\"name\": \"test\", \"required\": {\"topologies\":[{\"key\": \"kubernetes.io/hostname\"}], \"nodeSelectors\": [{\"matchLabels\": {\"test\": \"a\"}}]}} ",
        "node": "cn-shenzhen.10.0.2.4"
    }
    {
        "name":"nginx-deployment-basic-69f47fc6db-h****",
        "ann": "{\"name\": \"test\", \"required\": {\"topologies\":[{\"key\": \"kubernetes.io/hostname\"}], \"nodeSelectors\": [{\"matchLabels\": {\"test\": \"a\"}}]}} ",
        "node": "cn-shenzhen.10.0.2.4"
    }

Agendar em um conjunto de implantação de baixa latência

Algumas tarefas exigem afinidade em domínios de topologia granulares para obter o melhor desempenho. Os conjuntos de implantação de baixa latência do ECS restringem o posicionamento dos nós. Consulte Práticas recomendadas para associar conjuntos de implantação a pools de nós.

Ao criar um pool de nós com um conjunto de implantação de baixa latência, adicione um rótulo de nó personalizado para distingui-lo de outros pools.

Após concluir a configuração anterior, use a seguinte anotação e os seguintes rótulos para agendar uma tarefa em um conjunto de implantação de baixa latência.

  1. Adicione um identificador de agendamento gang aos rótulos do pod (Trabalhar com agendamento gang).

    labels:
      pod-group.scheduling.sigs.k8s.io/name: xxx # xxx is the name of the PodGroup. Specify a custom value.
      pod-group.scheduling.sigs.k8s.io/min-available: "x" # You can set this value to the number of pods in the job.
  2. Adicione a restrição de agendamento com reconhecimento de topologia à anotação do pod.

    Importante

    Substitua matchLabels pelo rótulo de nó personalizado do seu conjunto de implantação de baixa latência e modifique name conforme necessário.

    annotations:
      alibabacloud.com/topology-aware-constraint: {\"name\":\"test\",\"required\":{\"topologies\":[{\"key\":\"alibabacloud.com/nodepool-id\"}],\"nodeSelectors\":[{\"matchLabels\":{\"np-type\":\"low-latency\"}}]}}