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--excludefor especificado, tudo está incluído -
se apenas
--includefor especificado, somente grupos de nós que correspondam a esses globos serão incluídos -
se somente
--excludefor especificado, todos os grupos de nós que não corresponderem a esses globos serão incluídos -
se ambos forem especificados,
--excludeas 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