Os clusters ACS representam nós como virtual nodes e expõem atributos de nó — como zona de disponibilidade, região e modelo de GPU — como rótulos do Kubernetes. Use nodeSelector ou nodeAffinity na especificação do pod para agendar pods em virtual nodes com atributos específicos.
Pré-requisitos
Antes de começar, verifique se você possui:
-
kube-scheduler instalado na versão mínima para o seu cluster:
Versão do cluster ACS
Versão mínima do kube-scheduler
1.31
v1.31.0-aliyun-1.2.0
1.30
v1.30.3-aliyun-1.1.1
1.28
v1.28.9-aliyun-1.1.0
acs-virtual-node v2.12.0-acs.4 ou posterior instalado
A opção Enable custom labels for GPU-HPN nodes and scheduler vem ativada por padrão nas versões mais recentes do kube-scheduler. Nenhuma configuração manual é necessária. Para mais detalhes, consulte kube-scheduler.
Escolha um método de agendamento
|
Método |
Quando usar |
|
|
Fixa pods em nós com um rótulo específico. É a opção mais simples — comece por aqui. |
|
|
Permite expressar regras de agendamento mais elaboradas, como múltiplas condições de rótulo ou correspondência por operadores ( |
Rótulos de nó disponíveis
Os virtual nodes do ACS expõem os seguintes rótulos para agendamento:
|
Chave do rótulo |
Descrição |
Valor de exemplo |
|
|
Zona de disponibilidade |
|
|
|
Região |
|
|
|
Nome do virtual node |
|
nodeSelector
O nodeSelector associa pods a virtual nodes por rótulo. Adicione o rótulo desejado em nodeSelector na especificação do pod. Para um exemplo prático, consulte Agendar pods em uma zona específica.
nodeAffinity
O nodeAffinity oferece a mesma correspondência baseada em rótulos do nodeSelector, porém com uma sintaxe mais expressiva. Ele opera em dois modos:
|
Modo |
Comportamento |
|
|
O agendador posiciona o pod somente em um nó que satisfaça a regra. Se nenhum nó correspondente existir, o pod não é agendado. |
|
|
O agendador tenta encontrar um nó correspondente. Se nenhum estiver disponível, o pod é agendado em qualquer nó elegível. |
Ao especificar tanto nodeSelector quanto nodeAffinity no mesmo pod, ambos precisam ser satisfeitos para que o pod seja agendado. Em nodeSelectorTerms, múltiplos termos são avaliados com lógica OR — o pod é agendado se qualquer um dos termos corresponder. Dentro de um único termo, múltiplas entradas de matchExpressions são avaliadas com lógica AND — todas as expressões precisam corresponder.
Restrições para pods GPU-HPN
As seguintes restrições se aplicam quando as três condições abaixo são verdadeiras simultaneamente:
O pod utiliza o tipo de computação GPU-HPN (GPU de Rede de Alto Desempenho).
O
schedulerNamedo pod édefault-scheduler.Enable Custom Tags And Scheduler For GPU-HPN Nodes não está selecionado na configuração do componente agendador.
|
Campo |
Restrição |
|
|
Em |
|
|
Não suportado. |
Para tipos de instância de uso geral, otimizados para computação e GPU, o nodeAffinity não possui essas restrições.
Agendar pods em uma zona específica
Este exemplo usa nodeSelector para agendar um Deployment na zona cn-hangzhou-j.
-
Liste os virtual nodes do seu cluster.
kubectl get nodeSaída esperada:
NAME STATUS ROLES AGE VERSION virtual-kubelet-cn-hangzhou-i Ready agent 5h42m v1.28.3-xx virtual-kubelet-cn-hangzhou-j Ready agent 5h42m v1.28.3-xx -
Crie um arquivo chamado
dep-node-selector-demo.yamlcom o seguinte conteúdo.apiVersion: apps/v1 kind: Deployment metadata: name: dep-node-selector-demo labels: app: node-selector-demo spec: replicas: 4 selector: matchLabels: app: node-selector-demo template: metadata: labels: app: node-selector-demo spec: containers: - name: node-selector-demo image: registry-cn-hangzhou.ack.aliyuncs.com/acs/stress:v1.0.4 command: - "sleep" - "infinity" # Pin pods to the cn-hangzhou-j zone nodeSelector: topology.kubernetes.io/zone: cn-hangzhou-j -
Aplique o manifesto.
kubectl apply -f dep-node-selector-demo.yaml -
Verifique se todos os pods foram agendados na zona
cn-hangzhou-j.kubectl get pod -o wideSaída esperada:
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES dep-node-selector-demo-b4578576b-cgpfq 1/1 Running 0 112s 192.168.xx.xxx virtual-kubelet-cn-hangzhou-j <none> <none> dep-node-selector-demo-b4578576b-fs8kl 1/1 Running 0 110s 192.168.xx.xxx virtual-kubelet-cn-hangzhou-j <none> <none> dep-node-selector-demo-b4578576b-nh8zm 1/1 Running 0 2m8s 192.168.xx.xxx virtual-kubelet-cn-hangzhou-j <none> <none> dep-node-selector-demo-b4578576b-rpp8l 1/1 Running 0 2m8s 192.168.xx.xxx virtual-kubelet-cn-hangzhou-j <none> <none>Todos os quatro pods estão em execução em
virtual-kubelet-cn-hangzhou-j, confirmando que o agendamento por zona funciona conforme o esperado.