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.
-
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. ... -
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-constraintdeve 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-gpunos nós que correspondem ao rótulotest=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.
-
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. -
Adicione a restrição de agendamento com reconhecimento de topologia à anotação do pod.
ImportanteSubstitua
matchLabelspelo rótulo de nó personalizado do seu conjunto de implantação de baixa latência e modifiquenameconforme necessário.annotations: alibabacloud.com/topology-aware-constraint: {\"name\":\"test\",\"required\":{\"topologies\":[{\"key\":\"alibabacloud.com/nodepool-id\"}],\"nodeSelectors\":[{\"matchLabels\":{\"np-type\":\"low-latency\"}}]}}