Todos os produtos
Search
Central de documentação

Container Service for Kubernetes:Schedule Arm and multi-architecture workloads to Arm virtual nodes

Última atualização: Jun 27, 2026

Por padrão, clusters ACK e ACK Serverless agendam todos os workloads para nós virtuais x86. Se o cluster tiver nós virtuais Arm e não Arm, use o agendamento nativo do Kubernetes (nodeSelector ou nodeAffinity) para garantir que workloads exclusivos para Arm sejam executados em nós virtuais Arm e que imagens de múltiplas arquiteturas tenham preferência por nós Arm. Use este recurso em e clusters ACK Serverless para agendar workloads exclusivos para Arm ou de múltiplas arquiteturas em nós virtuais Arm. Por padrão, todos os workloads são agendados para nós virtuais x86.

Pré-requisitos

Notas de uso

Em clusters com versões do Kubernetes anteriores à 1,24, adicione uma toleration para o taint kubernetes.io/arch=arm64:NoSchedule ao usar nodeSelector ou nodeAffinity para agendar workloads em nós Arm. Clusters com Kubernetes 1.24+ reconhecem automaticamente o taint kubernetes.io/arch=arm64:NoSchedule, portanto a toleration é desnecessária.

Faturamento

Tipos de instância ECS baseados em Arm e preços:

Etapa 1: Adicionar nós virtuais Arm

Crie um nó virtual Arm editando o ConfigMap eci-profile com um dos métodos a seguir. Consulte Configurar um eci-profile.

Console

  1. Faça login no console ACK. No painel de navegação à esquerda, clique em Clusters.

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

  3. Na lista suspensa Namespace, selecione kube-system. Localize eci-profile e clique em Edit. Defina enableLinuxArm64Node como true e clique em OK.

    Nota

    Se nenhum vSwitch do cluster estiver em uma zona compatível com instâncias baseadas em Arm, crie um em uma zona compatível e adicione seu ID ao campo vSwitchIds. Consulte Criar e gerenciar vSwitches.

Kubectl

Pré-requisitos

Obter o arquivo kubeconfig de um cluster e usar kubectl para conectar-se ao cluster.

Procedimento

Edite o ConfigMap:

kubectl edit configmap eci-profile -n kube-system
  1. Defina o parâmetro enableLinuxArm64Node como true.

  2. Configure o parâmetro vSwitchIds. Garanta que pelo menos um vSwitch na lista vSwitchIds esteja em uma zona compatível com instâncias baseadas em Arm.

    Nota

    Se nenhum vSwitch do cluster estiver em uma zona compatível com instâncias baseadas em Arm, crie um em uma zona compatível e adicione seu ID ao campo vSwitchIds. Consulte Criar e gerenciar vSwitches.

Etapa 2: Agendar para um nó virtual Arm

Agendar workloads exclusivos para Arm

Se o cluster tiver nós Arm e não Arm e a aplicação for compatível apenas com a arquitetura Arm, agende-a para nós Arm para evitar falhas na inicialização. Todos os nós Arm têm o rótulo kubernetes.io/arch=arm64. Use nodeSelector ou nodeAffinity para direcioná-los.

nodeSelector

Adicione o seguinte nodeSelector à especificação do pod para direcionar nós virtuais Arm. Todos os nós virtuais Arm em um ou cluster ACK Serverless têm o rótulo arm64.

nodeSelector:
  kubernetes.io/arch: arm64 # Specify an Arm node.

O exemplo de YAML a seguir implanta uma aplicação stateless em um nó virtual Arm.

Expandir para visualizar o arquivo YAML

Nota

O YAML a seguir adiciona uma toleration para o taint kubernetes.io/arch=arm64:NoSchedule. Se o cluster for um cluster ACK Pro com Kubernetes 1,24 ou posterior, o agendador do ACK reconhece automaticamente esse taint e você não precisa adicionar a toleration.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: only-arm
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      nodeSelector:
        kubernetes.io/arch: arm64 # Specify an Arm node.
      tolerations:
      # Tolerate the taint of the virtual node.
        - key: virtual-kubelet.io/provider
          operator: Exists
          effect: NoSchedule
      # Tolerate the taint on the Arm virtual node.
        - key: kubernetes.io/arch
          operator: Equal
          value: arm64
          effect: NoSchedule
      containers:
      - name: nginx
        image: alibaba-cloud-linux-3-registry.cn-hangzhou.cr.aliyuncs.com/alinux3/nginx_optimized:20240221-1.20.1-2.3.0

nodeAffinity

Pré-requisitos

O recurso de agendamento de nó virtual está habilitado para o cluster, e as versões do cluster e dos componentes atendem aos requisitos.

Exemplo

Adicione o seguinte nodeAffinity à especificação do pod para direcionar nós Arm com o rótulo kubernetes.io/arch=arm64.

Com essa restrição, o agendador tolera automaticamente o taint kubernetes.io/arch=arm64:NoSchedule.

affinity:
  nodeAffinity:
    requiredDuringSchedulingIgnoredDuringExecution:
      nodeSelectorTerms:
      - matchExpressions:
        - key: kubernetes.io/arch
          operator: In
          values:
          - arm64

O exemplo de YAML a seguir implanta uma aplicação stateless em um nó virtual Arm.

Expandir para visualizar o arquivo YAML

Nota

O YAML a seguir adiciona uma toleration para o taint kubernetes.io/arch=arm64:NoSchedule. Se o cluster for um cluster ACK Pro com Kubernetes 1,24 ou posterior, o agendador do ACK reconhece automaticamente esse taint e você não precisa adicionar a toleration.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: only-arm
spec:
  selector:
    matchLabels:
      app: nginx
  replicas: 1
  template:
    metadata:
      labels:
        app: nginx
    spec:
      affinity:
        nodeAffinity:
          requiredDuringSchedulingIgnoredDuringExecution:
            nodeSelectorTerms:
            - matchExpressions:
              - key: kubernetes.io/arch
                operator: In
                values:
                - arm64
      tolerations:
       # Tolerate the taint of the virtual node.
        - key: virtual-kubelet.io/provider
          operator: Exists
          effect: NoSchedule
       # Tolerate the taint on the Arm virtual node.
        - key: kubernetes.io/arch
          operator: Equal
          value: arm64
          effect: NoSchedule         
      containers:
      - name: nginx
        image: nginx

Agendar imagens de múltiplas arquiteturas

Pré-requisitos

O recurso de agendamento de nó virtual está habilitado para o cluster, e as versões do cluster e dos componentes atendem aos requisitos.

Exemplo

e Clusters ACK Serverless agendam todos os workloads para nós virtuais x86 por padrão e continuam aguardando recursos x86 quando estes são insuficientes. Para imagens de múltiplas arquiteturas, configure o agendamento entre arquiteturas para utilizar tanto nós x86 quanto Arm.

Configure a afinidade de nó para agendar preferencialmente workloads em nós virtuais Arm ou x86. Se os recursos preferenciais forem insuficientes, o agendador recorrerá à outra arquitetura.

      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 1
            preference:
              matchExpressions:
              - key: kubernetes.io/arch
                operator: In
                values:
                - arm64

Preferir arquitetura Arm

Exemplo de YAML para um workload agendado preferencialmente em um nó virtual Arm:

Expandir para visualizar o arquivo YAML

Nota

O YAML a seguir adiciona uma toleration para o taint kubernetes.io/arch=arm64:NoSchedule. Se o cluster for um cluster ACK Pro com Kubernetes 1,24 ou posterior, o agendador do ACK reconhece automaticamente esse taint e você não precisa adicionar a toleration.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: arm-prefer
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      tolerations:
      # Tolerate the taint of the virtual node.
      - key: virtual-kubelet.io/provider
        operator: Exists
        effect: NoSchedule
      # Tolerate the taint on the Arm virtual node.
      - key: kubernetes.io/arch
        operator: Equal
        value: arm64
        effect: NoSchedule
      # Preferentially schedule the workload to a node that uses the Arm architecture.
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 1
            preference:
              matchExpressions:
              - key: kubernetes.io/arch
                operator: In
                values:
                - arm64
      containers:
      - name: my-container
        image: nginx

Preferir arquitetura x86

Expandir para visualizar o arquivo YAML

Nota

O YAML a seguir adiciona uma toleration para o taint kubernetes.io/arch=arm64:NoSchedule. Se o cluster for um cluster ACK Pro com Kubernetes 1,24 ou posterior, o agendador do ACK reconhece automaticamente esse taint e você não precisa adicionar a toleration.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: amd-prefer
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app
  template:
    metadata:
      labels:
        app: my-app
    spec:
      tolerations:
      # Tolerate the taint of the virtual node.
      - key: virtual-kubelet.io/provider
        operator: Exists
        effect: NoSchedule
      # Tolerate the taint on the Arm virtual node.
      - key: kubernetes.io/arch
        operator: Equal
        value: arm64
        effect: NoSchedule     
      # Preferentially schedule the workload to a node that uses the x86 architecture.
      affinity:
        nodeAffinity:
          preferredDuringSchedulingIgnoredDuringExecution:
          - weight: 1
            preference:
              matchExpressions:
              - key: kubernetes.io/arch
                operator: In
                values:
                - amd64
      containers:
      - name: my-container
        image: nginx

Perguntas frequentes

Prioridade de agendamento de nós Arm e x86

O agendador do cluster prioriza instâncias ECS em relação a nós virtuais por padrão. Sem pesos personalizados de plugins de pontuação, os pods ainda podem ser agendados em instâncias ECS x86 mesmo com nodeAffinity configurado para preferir nós Arm. As configurações de nodeAffinity neste tópico garantem apenas a prioridade entre arquiteturas de nós virtuais (Arm vs. x86), e não entre nós virtuais e instâncias ECS.

Posso usar instâncias preemptíveis Arm?

Sim. Consulte Usar instâncias preemptíveis.

Configuração de rede para nós virtuais Arm

Após criar um ou cluster ACK Serverless, configure o campo vSwitchIds no eci-profile para incluir um vSwitch em uma zona compatível com instâncias baseadas em Arm.

Quais são as limitações do uso de nós com arquitetura Arm em cluster ACK Serverless?

Add-ons do App Marketplace não são compatíveis com a arquitetura Arm. No Component Center, apenas as seguintes categorias são compatíveis:

  • Componentes principais

  • Logs e monitoramento

  • Armazenamento

  • Rede

Referências