Como inicio e soluciono problemas de instâncias spot usando grupos de nós gerenciados do Amazon EKS?

4 minuto de leitura
0

Desejo criar um grupo de nós gerenciados com capacidade spot para meu cluster do Amazon Elastic Kubernetes Service (Amazon EKS) e solucionar problemas.

Resolução

1.    Instale o eksctl.

Importante: verifique todos os comandos da AWS Command Line Interface (AWS CLI) antes de usá-los e substitua as instâncias de strings de exemplos por seus valores. Por exemplo, substitua example_cluster pelo nome do seu cluster.

2.    Crie um grupo de nós gerenciados com capacidade spot no cluster existente ao executar o comando a seguir:

#eksctl create nodegroup --cluster=<example_cluster> --spot --instance-types=<Comma-separated list of instance types> --region <EKS cluster AWS region. Defaults to the value set in your AWS config (~/.aws/config)>

Exemplo:

#eksctl create nodegroup --cluster=demo --spot --instance-types=c3.large,c4.large,c5.large --region us-east-1

Observações: há outros sinalizadores que você pode configurar ao criar um grupo de nós gerenciados pelo spot, como --name, --nodes, --nodes-min e --nodes-max. Obtenha a lista completa de todos os sinalizadores disponíveis ao executar o comando a seguir:

#eksctl create nodegroup --help

3.    Se você mantiver um arquivo de configuração eksctl na ClusterConfig para o cluster, também poderá criar um grupo de nós gerenciados por spot com esse arquivo. Crie instâncias spot usando grupos de nós gerenciados com um arquivo de configuração spot-cluster.yamlao executar o comando a seguir:

apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
  name: <example_cluster>
  region: <example_region>
managedNodeGroups:
- name: spot
  instanceTypes: ["c3.large","c4.large","c5.large","c5d.large","c5n.large","c5a.large"]
  spot: true

4.    Crie um grupo de nós usando o arquivo de configuração ao executar o comando a seguir:

# eksctl create nodegroup -f spot-cluster.yaml

Solução de problemas relacionados às instâncias spot no Amazon EKS

Verifique a integridade de um grupo de nós gerenciados usando eksctl ou o console do Amazon EKS da seguinte forma:

$ eksctl utils nodegroup-health --name=<example_nodegroup> --cluster=<example_cluster>

A integridade dos grupos de nós gerenciados do spot pode ser prejudicada com um erro devido à falta de capacidade do spot para os tipos de instância usados. Veja o erro a seguir para obter um exemplo:

AsgInstanceLaunchFailures Could not launch Spot Instances. UnfulfillableCapacity - Unable to fulfill capacity due to your request configuration. Please adjust your request and try again. Launching EC2 instance failed.

Observação: para adotar instâncias spot com êxito, é uma prática recomendada implementar a diversificação de instâncias spot como parte da configuração do grupo de nós spot gerenciados. A diversificação de instâncias spot ajuda a obter capacidade de diversos grupos de instâncias spot. Obter essa capacidade serve tanto para aumentar a escala verticalmente quanto para substituir as instâncias spot que podem receber uma notificação de encerramento da instância spot.

Se os grupos de nós spot do cluster precisarem ser provisionados com tipos de instância que atendam a uma proporção de 1 vCPU:4 GB de RAM, diversifique seus grupos de instâncias spot. Diversifique os grupos de instâncias usando uma das estratégias a seguir:

  • Crie diversos grupos de nós, cada um com um tamanho diferente. Por exemplo, um grupo de nós de tamanho 4 vCPUs e 16 GB de RAM e outro grupo de nós de 8 vCPUs e 32 GB de RAM.
  • Implemente a diversificação de instâncias nos grupos de nós. Faça isso ao selecionar uma combinação de tipos e famílias de instâncias de diferentes grupos de instâncias spot que atendam aos mesmos critérios de vCPUs e memória.

Use amazon-ec2-instance-selector para selecionar os tipos e as famílias de instâncias relevantes com número suficiente de vCPUs e de RAM ao executar o comando a seguir:

curl -Lo ec2-instance-selector https://github.com/aws/amazon-ec2-instance-selector/releases/download/v2.0.3/ec2-instance-selector-`uname | tr '[:upper:]' '[:lower:]'`-amd64 && chmod +x ec2-instance-selector
sudo mv ec2-instance-selector /usr/local/bin/
ec2-instance-selector --version

Exemplo:

ec2-instance-selector --vcpus 4 --memory 16 --gpus 0 --current-generation -a x86_64 --deny-list '.*[ni].*'

O comando anterior exibirá uma lista semelhante à seguinte. Use essas instâncias como parte de um de seus grupos de nós.

  • m4.xlarge
  • m5.xlarge
  • m5a.xlarge
  • m5ad.xlarge
  • m5d.xlarge
  • t2.xlarge
  • t3.xlarge
  • t3a.xlarge

Observação: os tipos de instância dos grupos de nós existentes não podem ser alterados usando a API do Amazon EKS. É uma prática recomendada criar um novo grupo de nós spot com os tipos de instância desejados. Digite o seguinte no comando eksctl create nodegroup. O novo sinalizador eksctl que indicará que um grupo de nós executa instâncias spot é --spot.

$eksctl create nodegroup --cluster=<example_cluster> --spot --instance-types m5.xlarge,m4.xlarge,m5a.xlarge,m5d.xlarge,m5n.xlarge,m5ad.xlarge --region <example_region>

AWS OFICIAL
AWS OFICIALAtualizada há um ano