Prepare-se para implementar uma carga de trabalho Arm num cluster Standard

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:

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:

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:

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:

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.

O que se segue?