Esta página explica como preparar uma carga de trabalho para ser agendada em nós Arm num cluster padrão do GKE. Para saber mais sobre o agendamento de cargas de trabalho Arm com o Autopilot, consulte o artigo Implemente cargas de trabalho do Autopilot na arquitetura Arm.
Para agendar com êxito uma carga de trabalho para um nó Arm, tem de ter o seguinte:
- Uma imagem de contentor compatível com Arm. Para ver orientações sobre como verificar esta situação, consulte o artigo A minha carga de trabalho está pronta para o Arm?
- Nós Arm onde as suas cargas de trabalho compatíveis com Arm podem ser agendadas. Para criar os recursos necessários, consulte o artigo Crie clusters e node pools com nós Arm.
- Um cluster numa Google Cloud região ou numa zona que tenha máquinas virtuais (VMs) Arm disponíveis. Para ver uma tabela filtrável de tipos de máquinas e plataformas, consulte o artigo Regiões e zonas disponíveis.
Vista geral
Por predefinição, o GKE agenda cargas de trabalho apenas para nós baseados em x86, ou seja, séries de máquinas do Compute Engine com processadores Intel ou AMD, colocando uma mancha (kubernetes.io/arch=arm64:NoSchedule
) em todos os nós Arm. Esta restrição impede que as cargas de trabalho compatíveis com x86 sejam agendadas inadvertidamente para os seus nós Arm. Se quiser implementar uma carga de trabalho num nó Arm, use os campos descritos nesta página para orientar o programador a enviar a carga de trabalho para o tipo de nó pretendido.
Use um dos seguintes campos:
- Um seletor de nós.
- Uma regra de afinidade de nós.
Quando usa um seletor de nós ou uma regra de afinidade de nós, o GKE só agenda as suas cargas de trabalho compatíveis com Arm quando tiver declarado que a imagem do contentor da carga de trabalho pode ser executada na arquitetura do nó.
Se programar uma carga de trabalho compatível com Arm com um seletor de nós ou com uma regra de afinidade de nós, conforme descrito nas secções seguintes, o GKE adiciona automaticamente uma tolerância à configuração da carga de trabalho para que os pods possam ser executados nos nós Arm.
Esta tolerância adicionada à carga de trabalho corresponde à restrição (kubernetes.io/arch=arm64:NoSchedule
) adicionada a todos os nós Arm para permitir que a sua carga de trabalho seja agendada em nós Arm.
Em algumas situações, como quando tem imagens de várias arquiteturas que podem ser executadas em qualquer nó, pode querer adicionar manualmente esta tolerância à configuração da carga de trabalho. Para obter instruções, consulte o artigo Use toleration for scheduling multi-arch workloads to any architectures.
Use um seletor de nós para agendar uma carga de trabalho do Arm
Adicione o seguinte seletor de nós à especificação:
nodeSelector:
kubernetes.io/arch: arm64
O seletor de nós especifica que esta carga de trabalho só deve ser agendada para nós com a etiqueta arm64
, que todos os nós Arm nos clusters do GKE têm.
Quando este seletor de nós está incluído na configuração da carga de trabalho, o GKE adiciona a tolerância para corresponder à restrição de modo a permitir que a carga de trabalho seja agendada em nós Arm.
Use uma regra de afinidade de nós para agendar uma carga de trabalho Arm
Também pode usar a afinidade de nós para agendar a sua carga de trabalho.
Agende a carga de trabalho para uma única arquitetura
Adicione a seguinte afinidade de nós à especificação:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- arm64
A regra de afinidade de nós especifica que a carga de trabalho só deve ser agendada para nós com a etiqueta arm64
, que todos os nós Arm nos clusters do GKE têm.
Quando esta regra de afinidade de nós é incluída na configuração da carga de trabalho, o GKE adiciona a tolerância para corresponder à mancha de modo a permitir que a carga de trabalho seja agendada em nós Arm.
Agende a carga de trabalho para arquiteturas x86 e Arm
Se quiser agendar uma carga de trabalho em arquiteturas x86 (processadores Intel e AMD) e Arm, pode especificar isto de diferentes formas.
Use a tolerância para agendar cargas de trabalho multiarquiteturais para qualquer arquitetura
Se tiver uma imagem de várias arquiteturas que quer agendar para qualquer tipo de arquitetura disponível num cluster Standard, só tem de adicionar a tolerância à especificação da carga de trabalho. Não precisa do seletor de nós nem das regras de afinidade de nós descritas nesta página, uma vez que a carga de trabalho pode ser agendada para todos os tipos de arquitetura.
Adicione a tolerância:
tolerations:
- key: kubernetes.io/arch
operator: Equal
value: arm64
effect: NoSchedule
Com esta tolerância, o GKE pode agendar uma carga de trabalho para nós com qualquer tipo de arquitetura.
Por exemplo, se tiver um cluster com os seguintes conjuntos de nós:
- my-c4a-node-pool, usando VMs c4a-standard-16 (
arm64
). - my-c2-node-pool, usando VMs c2-standard-8 (
amd64
). - my-t2d-node-pool, usando VMs t2-standard-48 (
amd64
).
Se implementar neste cluster uma carga de trabalho que use uma imagem de várias arquiteturas e a tolerância arm64
na configuração da carga de trabalho, o GKE pode agendar a carga de trabalho em todos os conjuntos de nós.
Use a regra de afinidade de nós para agendar cargas de trabalho de várias arquiteturas para qualquer arquitetura
Se quiser que uma carga de trabalho seja agendada em nós de diferentes tipos de arquitetura, incluindo x86 e Arm, também pode usar uma regra de afinidade de nós. Com as regras de afinidade de nós, pode especificar exatamente em que tipos de arquitetura quer agendar a carga de trabalho. Esta abordagem é recomendada para agendar cargas de trabalho em clusters do Autopilot. Para saber mais, consulte o artigo Implemente cargas de trabalho do Autopilot na arquitetura Arm.
Com cargas de trabalho baseadas em x86, não precisa destes seletores de nós, regras de afinidade de nós nem tolerâncias para agendar a carga de trabalho. Se tiver uma imagem que só quer agendar para nós baseados em x86, não precisa de usar estes campos.
Para agendar cargas de trabalho para qualquer tipo de arquitetura, liste arm64
e amd64
a secção values
do campo de afinidade de nós. O amd64
inclui todos os nós que usam processadores x86.
O exemplo seguinte especifica que esta carga de trabalho pode ser agendada em nós com processadores Arm ou processadores x86:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: kubernetes.io/arch
operator: In
values:
- arm64
- amd64
As etiquetas para cada tipo de arquitetura são:
arm64
para nós que usam processadores Arm (por exemplo, C4A).amd64
para nós que usam processadores AMD (por exemplo, Tau T2D) ou nós que usam processadores Intel (por exemplo, C2).
Por exemplo, se tiver um cluster com os seguintes conjuntos de nós e a regra de afinidade de nós indicada:
- my-c4a-node-pool, usando VMs c4a-standard-16 (
arm64
). - my-c2-node-pool, usando VMs c2-standard-8 (
amd64
). - my-t2d-node-pool, usando VMs t2-standard-48 (
amd64
).
Se implementar neste cluster uma carga de trabalho que use uma imagem multi-arquitetura e a afinidade de nós com arm64
incluída na lista values
, o GKE
adiciona a tolerância na configuração da carga de trabalho e pode
agendar a carga de trabalho em todos os conjuntos de nós.
Implemente a carga de trabalho
Agora que especificou onde as cargas de trabalho compatíveis com Arm devem ser agendadas, pode implementar a sua carga de trabalho.
Quando implementa uma carga de trabalho num cluster do GKE, as instruções são as mesmas para todos os tipos de arquiteturas. Pode implementar uma carga de trabalho compatível com Arm como implementaria qualquer outra carga de trabalho, desde que tenha concluído os passos pré-requisitos. Para ver exemplos de implementação de cargas de trabalho, consulte as seguintes páginas:
- Implementar uma aplicação Linux sem estado.
- Implementar uma aplicação com estado.
- Executar uma tarefa.
Resolução de problemas
Para ver informações de resolução de problemas e erros comuns, consulte o artigo Resolva problemas de cargas de trabalho do Arm.