View a markdown version of this page

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 nodegroup a partir de um arquivo de configuração

Grupos de nós também podem ser criados por meio de uma definição de cluster ou arquivo de configuração. Dado o exemplo de arquivo de configuração a seguir 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 nodegroups 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 or/and grupos-alvo de 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 clássicos dos balanceadores de carga são automaticamente associados ao ASG ao criar grupos de nós. Isso só é compatível com 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 globos 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 exemplo de arquivo de configuração 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 nodegroup.

Incluir e excluir regras

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

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

  • se somente --exclude for especificado, todos os grupos de nós que não corresponderem 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 da escalabilidade), como a AMI ou o tipo de instância de um nodegroup, precisará criar um novo nodegroup com as alterações desejadas, mover a carga e excluir a antiga. Consulte a seção Excluindo e drenando grupos de nós.

Dimensionamento de grupos de nós

O escalonamento do grupo de nós é um processo que pode levar alguns minutos. Quando o --wait sinalizador não é especificado, espera com eksctl otimismo que o nodegroup 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 o 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 exclusivamente de mudanças no ASG. Isso significa que os nós que removed/terminated estão sendo drenados não estão explicitamente drenados. Essa pode ser uma área de melhoria no futuro.

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

Dimensionando um único grupo de nós

Um nodegroup 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 nodegroup ng-a345f4e1 em cluster-1 5 nós, execute:

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

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

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

Dimensionamento de 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 é transmitido. --config-file

Da mesma forma que o dimensionamento de 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 nodegroup, 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 despejados 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 descordar em 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 habilitar 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 nodegroup, 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 usar SSH nos nós, configurando o nodegroup 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