Auto Scaling - Eksctl 用户指南

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Auto Scaling

启用 Auto Scaling

您可以使用允许使用集群自动扩缩程序的 IAM 角色创建集群(或现有集中的节点组):

eksctl create cluster --asg-access

此标志还会设置k8s.io/cluster-autoscaler/enabledk8s.io/cluster-autoscaler/<clusterName>标记,因此节点组发现应该可以正常工作。

集群运行后,您需要自行安装集群自动扩缩器

您还应在托管或非托管节点组定义中添加以下内容,以添加集群自动扩缩器扩展节点组所需的标签:

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

从 0 向上扩展

如果您希望能够从 0 向上扩展节点组,并且在节点组上定义了标签 and/or 污点,则需要将这些标签作为标签传播到 Auto Scaling Groups () 上。ASGs

一种方法是在节点组定义的tags字段中设置 ASG 标签。例如,给定一个带有以下标签和污点的节点组:

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

您需要添加以下 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"

对于托管节点组和非托管节点组,都可以通过将设置为来自动完成此操作true,这会将标签和污点作为标签添加propagateASGTags到 Auto Scaling 组中:

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

区域感知型 Auto Scaling

如果您的工作负载是特定于区域的,则需要为每个区域创建单独的节点组。这是因为cluster-autoscaler假设组中的所有节点都完全相等。因此,例如,如果扩容事件是由需要区域特定的 PVC(例如 EBS 卷)的 pod 触发的,则新节点可能会被调度到错误的可用区,并且 Pod 将无法启动。

如果您的环境符合以下标准,则无需为每个 AZ 设置单独的节点组:

  • 没有区域特定的存储要求。

  • 除主机以外的拓扑结构无需使用 PodaFfinity。

  • 区域标签上没有必需的 NodeAffinity。

  • 区域标签上没有 nodeSelector。

在这里和这里阅读更多。)

如果您满足上述所有要求(可能还满足其他要求),那么使用跨越多个节点组的单个节点组应该是安全的。 AZs否则,您需要创建单独的单可用区节点组:

之前:

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

之后:

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