问题描述
在使用Cluster Autoscaler(CAS)时遇到了一个问题。当Autoscaling Group(ASG)被缩放至0时,CAS的Pod版本1.17会停止工作,并进入一个循环,显示以下消息:
utils.go:126] Unable to build proper template node for my-nodegroup-NodeGroup-XXXXXX: ASG "eksctl-my-nodegroup-NodeGroup-XXXXXXX" uses the unknown EC2 instance type "c6i.8xlarge"
static_autoscaler.go:226] Failed to get node infos for groups: ASG "my-nodegroup-NodeGroup-XXXXXX" uses the unknown EC2 instance type "c6i.8xlarge"
即使另一个具有相同实例类型且副本数大于0的ASG也会出现相同的实例类型。
在CAS启动时,它会指示:
aws_cloud_provider.go:371] Successfully load 626 EC2 Instance Types: [...c6i.x8large,...]
我猜这应该允许CAS构建一个正确的模板。
用户曾经手动从CAS操作中删除了未使用的ASG,方法是删除ASG中的以下标签:
k8s.io/cluster-autoscaler/sports-models-dev-eks: owned
k8s.io/cluster-autoscaler/enabled: true
但是用户希望有一种不需要将ASG从CAS工作流中删除的解决方案。
解决方案
请注意以下操作可能因版本差异而有所不同,务必在进行操作前做好备份。
如何防止CAS在ASG缩至0时崩溃?
当ASG被缩放至0时,CAS可能会因为无法找到适当的实例类型模板而崩溃。为了防止这种情况发生,你可以考虑以下方法:
-
使用专用的实例类型: 确保CAS使用的实例类型在ASG被缩放至0时仍然可用。避免使用在缩放到0时被禁用或不可用的实例类型。
-
升级CAS版本: 检查是否有新的CAS版本可用。有时,已知的问题在较新的版本中可能已得到修复。
-
检查权限和配置: 确保CAS具有足够的权限和正确的配置,以便在ASG缩放至0时仍然能够获取所需的实例类型信息。
CAS的模板生成过程及为何加载EC2实例类型不足以让CAS继续工作?
CAS在处理ASG的缩放时,需要为新实例生成适当的模板。模板是一组实例配置参数,以便在需要时启动新实例。但是,当ASG缩放至0时,CAS可能无法为新实例生成正确的模板,因为它无法找到与所需实例类型相对应的模板。
在你的情况下,尽管CAS在启动时成功加载了EC2实例类型,包括”c6i.8xlarge”,但由于某种原因,CAS仍然无法构建适当的模板。这可能与CAS内部逻辑或依赖项有关。
CAS需要确保能够在ASG缩放至0时找到所需的实例类型模板,以便在需要时启动新实例。如果CAS无法找到适当的模板,就可能会出现崩溃的情况。
总结
当Cluster Autoscaler(CAS)的Autoscaling Group(ASG)被缩放至0时,CAS可能会崩溃,因为它无法构建适当的实例类型模板。为了防止这种情况发生,你可以考虑使用专用的实例类型、升级CAS版本以及确保CAS具有正确的权限和配置。CAS需要确保能够在需要时找到所需的实例类型模板,以便在ASG需要扩展时启动新实例。如果CAS无法构建适当的模板,就可能会出现崩溃情况。如果问题仍然存在,建议查阅CAS的文档或寻求社区支持以获取更多帮助。