Execute cargas de trabalho do Arm no GKE na AWS

O GKE na AWS permite que você execute cargas de trabalho Arm criadas para processadores AWS Graviton baseados em Arm.

Limitações

  • Pools de nós ARM executando versões do Kubernetes anteriores à 1.24.8-gke.1300 adicionam automaticamente uma contaminação durante a criação do pool de nós para impedir que cargas de trabalho do ARM sejam agendadas em nós que não sejam ARM. Pools de nós ARM em clusters na versão 1.24.8-gke.1300 ou superior não adicionam mais essa contaminação. Se você estiver atualizando de um cluster anterior à 1.24.8-gke.1300, deverá criar essa contaminação você mesmo ou levar isso em consideração ao atualizar.

  • Os pools de nós do ARM no GKE na AWS não são compatíveis com Cloud Service Mesh, Config Sync ou Policy Controller. Você precisa executar esses produtos em um pool de nós x86.

  • Clusters que executam o Kubernetes versão 1.24 precisam de um pool de nós x86 para executar o Connect Agent . Se o seu cluster executa o Kubernetes versão 1.25 ou posterior, você não precisa de um pool de nós x86.

Esta página explica como criar um pool de nós Arm, por que imagens multiarquitetura são a maneira recomendada de implantar cargas de trabalho Arm e como agendar cargas de trabalho Arm.

Antes de começar

Antes de criar pools de nós para suas cargas de trabalho do Arm, você precisa dos seguintes recursos:

  • Um cluster AWS existente para criar o pool de nós. Este cluster deve executar o Kubernetes versão 1.24 ou posterior.
  • Um perfil de instância do IAM para as VMs do pool de nós.
  • Uma sub-rede onde as VMs do pool de nós serão executadas.
  • Se o seu cluster estiver executando o Kubernetes versão 1.24, um pool de nós x86 para executar o Connect Agent .

    Para obter detalhes sobre como criar um pool de nós no GKE na AWS, consulte Criar um pool de nós .

Criar um pool de nós Arm

O GKE na AWS oferece suporte a pools de nós criados na imagem de nó mínima arm64 do Canonical Ubuntu e no tempo de execução containerd .

Para criar um pool de nós Arm e adicioná-lo a um cluster existente, execute o seguinte comando:

gcloud container aws node-pools create NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --instance-type INSTANCE_TYPE \
    --root-volume-size ROOT_VOLUME_SIZE \
    --iam-instance-profile NODEPOOL_PROFILE \
    --node-version NODE_VERSION \
    --min-nodes MIN_NODES \
    --max-nodes MAX_NODES \
    --max-pods-per-node MAX_PODS_PER_NODE \
    --location GOOGLE_CLOUD_LOCATION \
    --subnet-id NODEPOOL_SUBNET \
    --ssh-ec2-key-pair SSH_KEY_PAIR_NAME \
    --config-encryption-kms-key-arn CONFIG_KMS_KEY_ARN

Substitua o seguinte:

  • NODE_POOL_NAME : o nome que você escolher para seu pool de nós
  • CLUSTER_NAME : o nome do cluster ao qual o pool de nós será anexado
  • INSTANCE_TYPE : um dos seguintes tipos de instância:

    • m6g
    • m6gd
    • t4g
    • r6g
    • r6gd
    • c6g
    • c6gd
    • c6gn
    • x2gd
    • c7g
    • im4gn
    • g5g

      Esses tipos de instância são alimentados por processadores AWS Graviton baseados em ARM. Você também precisa especificar o tamanho da instância desejada. Por exemplo, m6g.medium . Para obter uma lista completa, consulte Tipos de instância da AWS compatíveis .

  • ROOT_VOLUME_SIZE : o tamanho desejado para o volume raiz de cada nó, em Gb

  • NODEPOOL_PROFILE : o perfil de instância do IAM para VMs do pool de nós

  • NODE_VERSION : a versão do Kubernetes a ser instalada em cada nó do pool de nós, que deve ser a versão 1.24 ou posterior. Por exemplo, 1.24.3-gke.200 .

  • MIN_NODES : o número mínimo de nós que o pool de nós pode conter

  • MAX_NODES : o número máximo de nós que o pool de nós pode conter

  • MAX_PODS_PER_NODE : o número máximo de Pods que podem ser criados em qualquer nó do pool

  • GOOGLE_CLOUD_LOCATION : o nome do Google Cloud

    local de onde este pool de nós será gerenciado

  • NODEPOOL_SUBNET : o ID da sub-rede na qual o pool de nós será executado. Se essa sub-rede estiver fora do bloco CIDR primário da VPC, você precisará executar etapas adicionais. Para obter mais informações, consulte grupos de segurança .

  • SSH_KEY_PAIR_NAME : o nome do par de chaves SSH da AWS criado para acesso SSH (opcional)

  • CONFIG_KMS_KEY_ARN : o nome do recurso da Amazon (ARN) da chave AWS KMS que criptografa os dados do usuário

Entenda imagens multiarquitetônicas

As imagens de contêiner devem ser compatíveis com a arquitetura do nó onde você pretende executar as cargas de trabalho do Arm. Para garantir que sua imagem de contêiner seja compatível com o Arm, recomendamos o uso de imagens multiarquitetura ("multiarquitetura").

Uma imagem multiarquitetura é uma imagem que pode suportar múltiplas arquiteturas. Parece uma única imagem com uma única tag, mas contém um conjunto de imagens para execução em diferentes arquiteturas de máquina. Imagens multiarquitetura são compatíveis com o Esquema 2 do Docker Image Manifest V2 ou com as Especificações de Índice de Imagens OCI.

Ao implantar uma imagem multiarquitetura em um cluster, o tempo de execução do contêiner escolhe automaticamente a imagem compatível com a arquitetura do nó em que você está implantando. Depois de ter uma imagem multiarquitetura para uma carga de trabalho, você pode implantá-la em várias arquiteturas. Agendar uma imagem de arquitetura única em um nó incompatível causa um erro no momento do carregamento.

Para saber mais sobre como usar imagens multiarquitetura com cargas de trabalho do Arm, consulte Criar imagens multiarquitetura para cargas de trabalho do Arm na documentação do Google Kubernetes Engine (GKE).

O que vem a seguir