Auto Scaling - 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á.

Auto Scaling

Ativar o Auto Scaling

Você pode criar um cluster (ou grupo de nós em um cluster existente) com a função do IAM que permitirá o uso do autoescalador de cluster:

eksctl create cluster --asg-access

Esse sinalizador também define k8s.io/cluster-autoscaler/enabled e marcak8s.io/cluster-autoscaler/<clusterName>, portanto, a descoberta de grupos de nós deve funcionar.

Depois que o cluster estiver em execução, você precisará instalar o próprio Cluster Autoscaler.

Você também deve adicionar o seguinte às suas definições de grupo de nós gerenciado ou não gerenciado para adicionar as tags necessárias para que o autoescalador de cluster escale o grupo de nós:

nodeGroups: - name: ng1-public iam: withAddonPolicies: autoScaler: true

Aumentando a partir de 0

Se você quiser escalar seu grupo de nós a partir de 0 e tiver manchas de rótulos definidas em seus grupos de and/or nós, precisará propagá-las como tags em seus Grupos de Auto Scaling (). ASGs

Uma maneira de fazer isso é definir as tags ASG no tags campo de suas definições de grupo de nós. Por exemplo, dado um grupo de nós com os seguintes rótulos e manchas:

nodeGroups: - name: ng1-public ... labels: my-cool-label: pizza taints: key: feaster value: "true" effect: NoSchedule

Você precisaria adicionar as seguintes tags ASG:

nodeGroups: - name: ng1-public ... labels: my-cool-label: pizza taints: feaster: "true:NoSchedule" tags: k8s.io/cluster-autoscaler/node-template/label/my-cool-label: pizza k8s.io/cluster-autoscaler/node-template/taint/feaster: "true:NoSchedule"

Para grupos de nós gerenciados e não gerenciados, isso pode ser feito automaticamente configurando propagateASGTags paratrue, que adicionará os rótulos e manchas como tags ao grupo Auto Scaling:

nodeGroups: - name: ng1-public ... labels: my-cool-label: pizza taints: feaster: "true:NoSchedule" propagateASGTags: true

Auto Scaling com reconhecimento de zona

Se suas cargas de trabalho forem específicas de uma zona, você precisará criar grupos de nós separados para cada zona. Isso ocorre porque cluster-autoscaler pressupõe que todos os nós em um grupo sejam exatamente equivalentes. Então, por exemplo, se um evento de aumento de escala for acionado por um pod que precisa de um PVC específico da zona (por exemplo, um volume do EBS), o novo nó pode ser programado na AZ errada e o pod não será iniciado.

Você não precisará de um grupo de nós separado para cada AZ se seu ambiente atender aos seguintes critérios:

  • Não há requisitos de armazenamento específicos para cada zona.

  • Não é necessário PodAffinity com topologia diferente do host.

  • Não é necessário NodeAffinity no rótulo da zona.

  • Sem NodeSelector em um rótulo de zona.

(Leia mais aqui e aqui.)

Se você atender a todos os requisitos acima (e possivelmente a outros), deverá estar seguro com um único grupo de nós que abrange vários. AZs Caso contrário, você desejará criar grupos de nós Single-AZ separados:

ANTES DE:

nodeGroups: - name: ng1-public instanceType: m5.xlarge # availabilityZones: ["eu-west-2a", "eu-west-2b"]

DEPOIS DE:

nodeGroups: - name: ng1-public-2a instanceType: m5.xlarge availabilityZones: ["eu-west-2a"] - name: ng1-public-2b instanceType: m5.xlarge availabilityZones: ["eu-west-2b"]