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
--version
O 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