Trabalhe com grupos de nós - Guia do usuário do Eksctl

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Trabalhe com grupos de nós

Criação de grupos de nós

Você pode adicionar um ou mais grupos de nós além do grupo de nós inicial criado junto com o cluster.

Para criar um grupo de nós adicional, use:

eksctl create nodegroup --cluster=<clusterName> [--name=<nodegroupName>]
nota

--versionO sinalizador não é compatível com grupos de nós gerenciados. Ele sempre herda a versão do plano de controle.

Por padrão, novos grupos de nós não gerenciados herdam a versão do plano de controle (--version=auto), mas você pode especificar uma versão diferente, que também pode ser usada --version=latest para forçar o uso da versão mais recente.

Além disso, você pode usar o mesmo arquivo de configuração usado paraeksctl create cluster:

eksctl create nodegroup --config-file=<path>

Criando um grupo de nós a partir de um arquivo de configuração

Os grupos de nós também podem ser criados por meio de uma definição de cluster ou arquivo de configuração. Dado o seguinte exemplo de arquivo de configuração e um cluster existente chamadodev-cluster:

# dev-cluster.yaml apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: dev-cluster region: eu-north-1 managedNodeGroups: - name: ng-1-workers labels: { role: workers } instanceType: m5.xlarge desiredCapacity: 10 volumeSize: 80 privateNetworking: true - name: ng-2-builders labels: { role: builders } instanceType: m5.2xlarge desiredCapacity: 2 volumeSize: 100 privateNetworking: true

Os grupos de nós ng-1-workers e ng-2-builders podem ser criados com este comando:

eksctl create nodegroup --config-file=dev-cluster.yaml

Balanceamento de carga

Se você já se preparou para anexar os or/and grupos-alvo dos balanceadores de carga clássicos existentes aos grupos de nós, você pode especificá-los no arquivo de configuração. Os or/and grupos-alvo dos balanceadores de carga clássicos são automaticamente associados ao ASG ao criar grupos de nós. Isso só é suportado para grupos de nós autogerenciados definidos por meio do campo. nodeGroups

# dev-cluster-with-lb.yaml apiVersion: eksctl.io/v1alpha5 kind: ClusterConfig metadata: name: dev-cluster region: eu-north-1 nodeGroups: - name: ng-1-web labels: { role: web } instanceType: m5.xlarge desiredCapacity: 10 privateNetworking: true classicLoadBalancerNames: - dev-clb-1 - dev-clb-2 asgMetricsCollection: - granularity: 1Minute metrics: - GroupMinSize - GroupMaxSize - GroupDesiredCapacity - GroupInServiceInstances - GroupPendingInstances - GroupStandbyInstances - GroupTerminatingInstances - GroupTotalInstances - name: ng-2-api labels: { role: api } instanceType: m5.2xlarge desiredCapacity: 2 privateNetworking: true targetGroupARNs: - arn:aws:elasticloadbalancing:eu-north-1:01234567890:targetgroup/dev-target-group-1/abcdef0123456789

Seleção de grupos de nós em arquivos de configuração

Para realizar uma delete operação create or em apenas um subconjunto dos grupos de nós especificados em um arquivo de configuração, há dois sinalizadores CLI que aceitam uma lista de globs e, por exemplo: –0— –1—

eksctl create nodegroup --config-file=<path> --include='ng-prod-*-??' --exclude='ng-test-1-ml-a,ng-test-2-?'

Usando o arquivo de configuração de exemplo acima, é possível criar todos os grupos de nós de trabalhadores, exceto o de trabalhadores, com o seguinte comando:

eksctl create nodegroup --config-file=dev-cluster.yaml --exclude=ng-1-workers

Ou pode-se excluir o grupo de nós do construtor com:

eksctl delete nodegroup --config-file=dev-cluster.yaml --include=ng-2-builders --approve

Nesse caso, também precisamos fornecer o --approve comando para realmente excluir o grupo de nós.

Incluir e excluir regras

  • se não --include ou --exclude for especificado, tudo está incluído

  • se only --include for especificado, somente grupos de nós que correspondam a esses globos serão incluídos

  • se apenas --exclude for especificado, todos os grupos de nós que não correspondem a esses globos serão incluídos

  • se ambos forem especificados, --exclude as regras terão precedência --include (ou seja, grupos de nós que correspondam às regras em ambos os grupos serão excluídos)

Listando grupos de nós

Para listar os detalhes sobre um grupo de nós ou todos os grupos de nós, use:

eksctl get nodegroup --cluster=<clusterName> [--name=<nodegroupName>]

Para listar um ou mais grupos de nós no formato YAML ou JSON, que gera mais informações do que a tabela de log padrão, use:

# YAML format eksctl get nodegroup --cluster=<clusterName> [--name=<nodegroupName>] --output=yaml # JSON format eksctl get nodegroup --cluster=<clusterName> [--name=<nodegroupName>] --output=json

Imutabilidade do grupo de nós

Por design, os grupos de nós são imutáveis. Isso significa que, se você precisar alterar algo (além do escalonamento), como a AMI ou o tipo de instância de um grupo de nós, precisará criar um novo grupo de nós com as alterações desejadas, mover a carga e excluir o antigo. Consulte a seção Excluindo e drenando grupos de nós.

Escalando grupos de nós

O escalonamento de grupos de nós é um processo que pode levar alguns minutos. Quando a --wait bandeira não é especificada, espera com eksctl otimismo que o grupo de nós seja escalado e retorne assim que a solicitação da API da AWS for enviada. Para eksctl esperar até que os nós estejam disponíveis, adicione um --wait sinalizador como no exemplo abaixo.

nota

Escalar um grupo de nós down/in (ou seja, reduzir o número de nós) pode resultar em erros, pois dependemos apenas de alterações no ASG. Isso significa que os nós que removed/terminated estão sendo não estão explicitamente drenados. Essa pode ser uma área que pode ser melhorada no futuro.

O escalonamento de um grupo de nós gerenciados é obtido chamando diretamente a API EKS, que atualiza a configuração de um grupo de nós gerenciados.

Dimensionando um único grupo de nós

Um grupo de nós pode ser escalado usando o comando: eksctl scale nodegroup

eksctl scale nodegroup --cluster=<clusterName> --nodes=<desiredCount> --name=<nodegroupName> [ --nodes-min=<minSize> ] [ --nodes-max=<maxSize> ] --wait

Por exemplo, para escalar o grupo de nós ng-a345f4e1 em cluster-1 até 5 nós, execute:

eksctl scale nodegroup --cluster=cluster-1 --nodes=5 ng-a345f4e1

Um grupo de nós também pode ser escalado usando um arquivo de configuração passado --config-file e especificando o nome do grupo de nós com o qual deve ser escalado. --name O Eksctl pesquisará o arquivo de configuração e descobrirá esse grupo de nós, bem como seus valores de configuração de escala.

Se o número desejado de nós estiver NOT dentro da faixa do número mínimo atual e do número máximo atual, um erro específico será mostrado. Esses valores também podem ser passados com sinalizadores --nodes-min e --nodes-max respectivamente.

Dimensionando vários grupos de nós

O Eksctl pode descobrir e escalar todos os grupos de nós encontrados em um arquivo de configuração que é passado com. --config-file

Da mesma forma que escalar um único grupo de nós, o mesmo conjunto de validações se aplica a cada grupo de nós. Por exemplo, o número desejado de nós deve estar dentro da faixa do número mínimo e máximo de nós.

Excluindo e drenando grupos de nós

Para excluir um grupo de nós, execute:

eksctl delete nodegroup --cluster=<clusterName> --name=<nodegroupName>

As regras de inclusão e exclusão também podem ser usadas com esse comando.

nota

Isso drenará todos os pods desse grupo de nós antes que as instâncias sejam excluídas.

Para ignorar as regras de despejo durante o processo de drenagem, execute:

eksctl delete nodegroup --cluster=<clusterName> --name=<nodegroupName> --disable-eviction

Todos os nós são isolados e todos os pods são removidos de um grupo de nós na exclusão, mas se você precisar drenar um grupo de nós sem excluí-lo, execute:

eksctl drain nodegroup --cluster=<clusterName> --name=<nodegroupName>

Para desconectar um grupo de nós, execute:

eksctl drain nodegroup --cluster=<clusterName> --name=<nodegroupName> --undo

Para ignorar as regras de despejo, como PodDisruptionBudget configurações, execute:

eksctl drain nodegroup --cluster=<clusterName> --name=<nodegroupName> --disable-eviction

Para acelerar o processo de drenagem, você pode especificar --parallel <value> o número de nós a serem drenados em paralelo.

Outros recursos

Você também pode ativar o acesso SSH, ASG e outros recursos para um grupo de nós, por exemplo:

eksctl create nodegroup --cluster=cluster-1 --node-labels="autoscaling=enabled,purpose=ci-worker" --asg-access --full-ecr-access --ssh-access

Atualizar rótulos

Não há comandos específicos eksctl para atualizar os rótulos de um grupo de nós, mas isso pode ser facilmente obtido usandokubectl, por exemplo:

kubectl label nodes -l alpha.eksctl.io/nodegroup-name=ng-1 new-label=foo

Acesso SSH

Você pode habilitar o acesso SSH para grupos de nós configurando um dos publicKeyName e publicKeyPath em sua configuração de publicKey grupo de nós. Como alternativa, você pode usar o AWS Systems Manager (SSM) para fazer SSH nos nós, configurando o grupo de nós com: enableSsm

managedNodeGroups: - name: ng-1 instanceType: m5.large desiredCapacity: 1 ssh: # import public key from file publicKeyPath: ~/.ssh/id_rsa_tests.pub - name: ng-2 instanceType: m5.large desiredCapacity: 1 ssh: # use existing EC2 key publicKeyName: ec2_dev_key - name: ng-3 instanceType: m5.large desiredCapacity: 1 ssh: # import inline public key publicKey: "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDqZEdzvHnK/GVP8nLngRHu/GDi/3PeES7+Bx6l3koXn/Oi/UmM9/jcW5XGziZ/oe1cPJ777eZV7muEvXg5ZMQBrYxUtYCdvd8Rt6DIoSqDLsIPqbuuNlQoBHq/PU2IjpWnp/wrJQXMk94IIrGjY8QHfCnpuMENCucVaifgAhwyeyuO5KiqUmD8E0RmcsotHKBV9X8H5eqLXd8zMQaPl+Ub7j5PG+9KftQu0F/QhdFvpSLsHaxvBzA5nhIltjkaFcwGQnD1rpCM3+UnQE7Izoa5Yt1xoUWRwnF+L2TKovW7+bYQ1kxsuuiX149jXTCJDVjkYCqi7HkrXYqcC1sbsror someuser@hostname" - name: ng-4 instanceType: m5.large desiredCapacity: 1 ssh: # enable SSH using SSM enableSsm: true