我在 US-EAST-2 中创建了一个 EKS 托管节点集群,配置如下:
managedNodeGroups:
- name: eks-worker-nodegroup
instanceType: m5.xlarge
desiredCapacity: 2
minSize: 2
maxSize: 3
volumeSize: 200
instanceName: eks-worker-node
ebsOptimized: true
volumeEncrypted: true
labels: {mynodegroup: qa-a}
tags:
mynodegroup: qa-a
iam:
withAddonPolicies:
imageBuilder: true
autoScaler: true
albIngress: true
cloudWatch: true
ebs: true
efs: true
我想使用 Cluster Autoscaling 并一直在查看文档here,但需要一些指导来准确理解如何实现它。
create cluster 命令使用我在上面的配置中指定的大小在 AWS中eksctl
创建了一个 Autoscaling Group。此 ASG 跨越 US-EAST-2 的所有三个可用区。但是,来自 Amazon 的文档建议为每个可用区设置一个 ASG。
我正在寻找的行为是这样的:
- 从两个节点开始,运行一系列应用程序和服务。(目前没有一个是有状态的,但将来可能会改变 - 这就是为什么我认为每个 AZ 一个 ASG 路由实际上是更好的方法)
- 随着需求的增加,Kubernetes 将通过我的部署清单中定义的额外副本水平扩展我的 Pod。
- 当节点组中的可用资源耗尽时,Cluster Autoscaler 会启动其他节点并将它们临时添加到节点组中以支持增加的需求。Pod 被优雅地添加和/或重新平衡,随着需求的下降,额外的节点将被关闭。
我的问题是多方面的...
我是否应该以不同的方式设计集群配置文件以支持每个 AZ 一个 ASG(因此应该拆除我已经创建的基础架构并重新开始)?
这样做是否像为每个 AZ 手动创建新的 ASG 一样简单,然后将每个 ASG 标记为与
eksctl
为我创建的默认 ASG 相同的标签?如果是这样,那么在这样做之后部署 Cluster Autoscaler 应该可以自动检测手动创建的 ASG - 但这是正确的方法吗?
根据我正在寻求的行为实现集群自动缩放的最合适方法是什么?
编辑: 根据下面的评论之一并重新阅读 AWS 的文档,我现在想知道拥有单个托管节点组然后手动创建特定于 AZ 的 ASG 的方法是否错误。
是创建多个托管节点组的更好方法,每个托管节点组都限制在自己的可用区吗?这将产生为每个可用区创建一个 ASG 的效果。