Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Schedule applications to specific node pools

Última atualização: Jun 27, 2026

Para agendar uma aplicação em nós com configuração específica, defina rótulos no node pool e configure nodeSelector ou nodeAffinity na especificação do pod da aplicação.

Escolha um método de agendamento

Método

Como funciona

Quando usar

nodeSelector

Correspondência exata de rótulo

Agendamento simples, de condição única

nodeAffinity

Expressões de rótulo com regras rígidas e flexíveis

Agendamento com múltiplas condições ou quando é necessário comportamento de fallback

Como funciona

O ACK utiliza o mecanismo nativo de agendamento do Kubernetes para associar pods a nós com base em rótulos. O processo ocorre da seguinte forma:

  1. Defina os rótulos do node pool. Um node pool gerencia um grupo de nós com a mesma configuração. Ao configurar Node Labels para um node pool, o ACK sincroniza esses rótulos com todos os nós do pool, incluindo novos nós adicionados durante o scale-out.

    Após abrir a Configuração do Node Pool e selecione Update Labels and Taints of Existing Nodes , o ACK também sincroniza os rótulos com os nós existentes.
  2. Defina uma regra de agendamento. Na especificação do pod, use nodeSelector ou nodeAffinity para especificar os rótulos obrigatórios nos nós de destino.

  3. (Opcional) Configure acesso exclusivo. Adicione um taint ao node pool para que apenas pods com uma toleration correspondente sejam agendados nele.

  4. Agendamento automático. O scheduler do Kubernetes posiciona os pods nos nós que satisfazem as regras acima.

O ACK cria automaticamente um rótulo globalmente único, alibabacloud.com/nodepool-id , para cada node pool. Use esse rótulo para direcionar um node pool específico com correspondência exata.

Pré-requisitos

Antes de começar, verifique se você tem:

  • Um cluster ACK com pelo menos um node pool

  • kubectl configurado para se conectar ao seu cluster

Etapa 1: Definir rótulos em um node pool

  1. Faça logon no console do ACK. No painel de navegação à esquerda, clique em ACK consoleClusters.

  2. Na página Clusters, clique no nome do seu cluster. No painel de navegação à esquerda, clique em Nodes > Node Pools.

  3. Na coluna Actions do node pool desejado, clique em Edit. Expanda a seção de opções avançadas e configure Node Labels:

    Campo

    Requisito

    Detalhes

    Key (parte do nome)

    Obrigatório

    1–63 caracteres; começa e termina com [a-z0-9A-Z]; permite letras, dígitos, hifens (-), sublinhados (_) e pontos (.)

    Key (parte do prefixo)

    Opcional

    Um subdomínio DNS de até 253 caracteres, terminando com /. O prefixo kubernetes.io/ é reservado — use kubelet.kubernetes.io/ ou node.kubernetes.io/ em seu lugar.

    Value

    Opcional

    Até 63 caracteres; começa e termina com [a-z0-9A-Z]; permite letras, dígitos, hifens, sublinhados e pontos

  4. Se necessário, selecione Update Labels and Taints of Existing Nodes para sincronizar os rótulos com os nós que já estão no pool.

  5. No painel de navegação à esquerda, escolha Nodes > Nodes. Clique em Manage Labels and Taints e verifique os rótulos na aba Labels.

Etapa 2: Configurar uma regra de agendamento

Após definir os rótulos do node pool, configure nodeSelector ou nodeAffinity na especificação do pod do seu Deployment.

Opção 1: nodeSelector

O nodeSelector agenda pods em nós que possuem correspondência exata de rótulo. Esta é a opção mais simples entre as duas.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment-basic
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      nodeSelector:
        pod: nginx      # The node must have this label for the pod to be scheduled there.
      containers:
      - name: nginx
        image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
        ports:
        - containerPort: 80
        # Declare resource requests and limits in production to guarantee Quality of Service (QoS).
        resources:
          requests:
            cpu: "100m"
            memory: "128Mi"
          limits:
            cpu: "200m"
            memory: "256Mi"

Opção 2: nodeAffinity

O nodeAffinity suporta expressões de rótulo (como In, NotIn e Exists) e dois modos de agendamento:

  • Afinidade rígida (requiredDuringSchedulingIgnoredDuringExecution): O pod deve ser colocado em um nó correspondente. Se não houver correspondência, o pod permanece em Pending.

  • Afinidade flexível (preferredDuringSchedulingIgnoredDuringExecution): O scheduler prioriza nós correspondentes, mas recorre a qualquer nó disponível caso nenhuma correspondência seja encontrada.

O exemplo a seguir usa afinidade rígida para garantir que o pod execute em um nó com o rótulo pod: nginx:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-with-affinity
  labels:
    app: nginx
spec:
  replicas: 2
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      affinity:
        nodeAffinity:
          # Hard affinity: the pod is not scheduled if no node matches.
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: pod         # The node label key
                operator: In
                values:
                - nginx          # The node label value
      containers:
      - name: nginx-with-affinity
        image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
        ports:
        - containerPort: 80
        # Declare resource requests and limits in production to guarantee Quality of Service (QoS).
        resources:
          requests:
            cpu: "100m"
            memory: "128Mi"
          limits:
            cpu: "200m"
            memory: "256Mi"

Etapa 3: Implantar e verificar

  1. Aplique o Deployment:

    kubectl apply -f deployment.yaml
  2. Verifique o status do pod e o resultado do agendamento. A flag -o wide mostra em qual nó cada pod foi agendado:

    kubectl get pods -l app=nginx -o wide

    Verifique na saída se o pod foi agendado no nó de destino.

Próximos passos