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
-
Cluster:
Um cluster ACK Serverless com Kubernetes 1.20 ou posterior. Consulte Criar um cluster e Atualizar manualmente um cluster.
NotaInstâncias ECS baseadas em Arm estão disponíveis apenas em regiões e zonas específicas. Verifique se o cluster está em uma região compatível. Consulte Visão geral dos tipos de instância disponíveis para compra.
O add-on ack-virtual-node v2.9.0 ou posterior deve estar instalado. O componente ack-virtual-node v2.9.0 ou posterior deve estar instalado.
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
Faça login no console ACK. No painel de navegação à esquerda, clique em Clusters.
Na página Clusters, clique no nome do cluster. No painel de navegação à esquerda, clique em .
-
Na lista suspensa Namespace, selecione kube-system. Localize eci-profile e clique em Edit. Defina
enableLinuxArm64Nodecomotruee clique em OK.NotaSe 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
Defina o parâmetro
enableLinuxArm64Nodecomotrue.-
Configure o parâmetro
vSwitchIds. Garanta que pelo menos um vSwitch na listavSwitchIdsesteja em uma zona compatível com instâncias baseadas em Arm.NotaSe 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.
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.
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:
Preferir arquitetura x86
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
O Container Registry Enterprise Edition (ACR EE) permite criar imagens de contêiner de múltiplas arquiteturas.
Para criar e gerenciar nós ECS Arm regulares, consulte Agendar workloads para nós Arm.
Para executar tarefas de big data sem gerenciar recursos subjacentes do cluster, execute jobs Spark em nós virtuais Arm.