Criar um pool de nós

Para criar um pool de nós no GKE na AWS, é preciso fornecer os seguintes recursos:

  • O nome de um cluster atual da AWS em que o pool de nós será criado
  • Um perfil de instância do IAM para VMs de pool de nós
  • Uma sub-rede em que as VMs do pool de nós serão executadas

Se você quiser acesso SSH aos seus nós, poderá criar um par de chaves do EC2.

Criar um pool de nós padrão

Quando esses recursos estiverem disponíveis, será possível criar um pool de nós com este 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 \
    --tags "Name=CLUSTER_NAME-NODE_POOL_NAME"

Substitua:

  • NODE_POOL_NAME: o nome escolhido para o pool de nós.
  • CLUSTER_NAME: o nome do cluster ao qual o pool de nós será anexado
  • INSTANCE_TYPE: o tipo de instância de máquina da AWS pretendido para este pool de nós, por exemplo, m5.large;
  • ROOT_VOLUME_SIZE: o tamanho desejado para o volume raiz de cada nó, em Gb.
  • NODEPOOL_PROFILE: o perfil da instância do IAM para VMs do pool de nós. Para detalhes sobre como atualizar um perfil de instância do IAM, consulte Atualizar o perfil da instância do IAM da AWS.
  • NODE_VERSION: a versão do Kubernetes a ser instalada em cada nó no pool de nós (por exemplo, "1.29.3-gke.600")
  • MIN_NODES: o número mínimo de nós que o pool pode conter.
  • MAX_NODES: o número máximo de nós que o pool pode conter.
  • MAX_PODS_PER_NODE: o número máximo de pods que podem ser criados em qualquer nó no pool;
  • GOOGLE_CLOUD_LOCATION: o nome do local do Google Cloud a partir do qual esse pool de nós será gerenciado;
  • NODEPOOL_SUBNET: o ID da sub-rede em que o pool de nós será executado;
    • Não pode haver nenhuma sobreposição entre os intervalos de IP de pod/serviço do cluster e a rede de sub-rede do pool de nós. Para mais informações sobre como selecionar intervalos de IP do pod e do serviço para o cluster, consulte Selecionar intervalos CIDR para o cluster.
    • Se essa sub-rede estiver fora do bloco CIDR primário de VPC, algumas etapas adicionais serão necessárias. Para 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 de recurso da Amazon (ARN) da chave de KMS da AWS que criptografa os dados do usuário;

Quando presente, o parâmetro --tags aplica a tag fornecida a todos os nós no pool. Esse exemplo marca todos os nós no pool com os nomes dos clusters e do pool de nós a que o nó pertence.

Pools de nós de instâncias spot

O GKE na AWS é compatível com pools de nós de instâncias de instâncias spot como um recurso de pré-lançamento. Os pools de nós de instâncias spot são pools de instâncias spot do Amazon EC2 disponíveis na AWS a um custo menor.

As instâncias spot oferecem economia de custos para aplicativos sem estado, tolerantes a falhas e flexíveis. No entanto, eles não são adequados para cargas de trabalho inflexíveis, com estado, intolerantes a falhas ou fortemente acopladas entre nós de instância. As instâncias do Spot podem ser interrompidas pelo Amazon EC2 quando o EC2 precisa da capacidade de volta, portanto, elas estão sujeitas a flutuações no mercado do Spot. Se as cargas de trabalho exigirem capacidade garantida e não puderem tolerar períodos ocasionais de indisponibilidade, escolha um pool de nós padrão em vez de um pool de nós da instância spot.

A estratégia de alocação empregada no GKE na AWS se concentra na seleção de pools de instâncias spot com a maior disponibilidade de capacidade, minimizando o risco de interrupções. Essa abordagem é particularmente benéfica para cargas de trabalho com um custo maior de interrupção, como renderização de imagem e mídia ou aprendizado profundo. Especificamente, a estratégia de alocação capacityOptimized foi implementada, conforme descrito em Estratégias de alocação para instâncias spot.

Criar um pool de nós do Spot

Para criar um pool de nós de instâncias do Spot, execute o seguinte comando:

gcloud container aws node-pools create NODE_POOL_NAME \
    --cluster CLUSTER_NAME \
    --spot-instance-types INSTANCE_TYPE_LIST \
    --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 \
    --tags "Name=CLUSTER_NAME-NODE_POOL_NAME"

Substitua:

  • NODE_POOL_NAME: o nome que você quer atribuir a esse pool de nós.
  • CLUSTER_NAME: o nome do cluster ao qual você quer anexar esse pool de nós.
  • INSTANCE_TYPE_LIST: uma lista separada por vírgulas de tipos de instância do AWS EC2. O pool de nós provisiona instâncias do Spot com esses tipos de instância. Os tipos de instância precisam ter a mesma arquitetura de CPU, o mesmo número de CPUs e a mesma quantidade de memória. Por exemplo: "c6g.large,c6gd.large,c6gn.large,c7g.large,t4g.medium". Use a ferramenta Amazon EC2 Instance Seletor (link em inglês) para encontrar tipos de instância que tenham configurações idênticas de CPU e memória.
  • 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 de pool de nós
  • NODE_VERSION: a versão do Kubernetes a ser instalada em cada nó no pool de nós (por exemplo, "1.29.3-gke.600")
  • MIN_NODES: o número mínimo de nós que o pool pode conter.
  • MAX_NODES: o número máximo de nós que o pool pode conter.
  • MAX_PODS_PER_NODE: o número máximo de pods que podem ser criados em qualquer nó no pool;
  • GOOGLE_CLOUD_LOCATION: o nome do local do Google Cloud a partir do qual esse pool de nós será gerenciado;
  • NODEPOOL_SUBNET: o ID da sub-rede em que o pool de nós será executado;
    • Não pode haver nenhuma sobreposição entre os intervalos de IP de pod/serviço do cluster e a rede de sub-rede do pool de nós. Para mais informações sobre como selecionar intervalos de IP do pod e do serviço para o cluster, consulte Selecionar intervalos CIDR para o cluster.
    • Se essa sub-rede estiver fora do bloco CIDR primário de VPC, algumas etapas adicionais serão necessárias. Para 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 de recurso da Amazon (ARN) da chave de KMS da AWS que criptografa os dados do usuário;

A prática recomendada é listar uma série de tipos de instância no campo INSTANCE_TYPE_LIST. Essa prática recomendada é importante porque, se um pool de nós estiver configurado com apenas um tipo de instância e esse tipo de instância não estiver disponível em nenhuma das zonas de disponibilidade desejadas, o pool de nós poderá aprovisione novos nós. Isso pode afetar a disponibilidade dos aplicativos e causar interrupções no serviço.

O campo spot-instance-types é mutuamente exclusivo com o campo instance-type. Isso significa que você pode fornecer apenas um desses campos, e não ambos.