Kubernetes 如果某个节点尚未运行,如何使EKS AutoScalingGroup启动具有特定实例类型的节点?

Kubernetes 如果某个节点尚未运行,如何使EKS AutoScalingGroup启动具有特定实例类型的节点?,kubernetes,amazon-ec2,amazon-eks,aws-auto-scaling,Kubernetes,Amazon Ec2,Amazon Eks,Aws Auto Scaling,我一直在梳理文档,试图找出我们是否能够为我们的用例实现一个特定的EKS架构,但还没有找到一个关于如何实现或者是否可能实现的明确答案 范围 我们有几个24/7运行的小吊舱,用于监视新的任务请求。当检测到一个新任务时,这些监视器吊舱会启动工作吊舱,这对CPU和内存的需求要大得多 我们希望在EKS上实现的是在单个AutoScalingGroup中有2个(或更多)实例类型: 运行24/7吊舱的小型廉价实例 运行任务然后终止的大型昂贵实例 根据文档,在ASG中拥有多个实例类型是没有问题的,但是它没有指

我一直在梳理文档,试图找出我们是否能够为我们的用例实现一个特定的EKS架构,但还没有找到一个关于如何实现或者是否可能实现的明确答案

范围

我们有几个24/7运行的小吊舱,用于监视新的任务请求。当检测到一个新任务时,这些监视器吊舱会启动工作吊舱,这对CPU和内存的需求要大得多

我们希望在EKS上实现的是在单个AutoScalingGroup中有2个(或更多)实例类型:

  • 运行24/7吊舱的小型廉价实例

  • 运行任务然后终止的大型昂贵实例

  • 根据文档,在ASG中拥有多个实例类型是没有问题的,但是它没有指定如何确保将小POD分配给小实例,将大POD分配给大实例

    到目前为止已完成的测试:

    (Max = 3, Min = 1, Desired = 1)
    
    • 我们目前将大型实例类型作为优先级1,将小型实例类型作为优先级2。因此,在启动时,启动一个大型实例

    • 当我在节点选择器设置为小实例类型的情况下启动小pod时,由于错误事件,它仍处于“挂起”状态: 0/1个节点可用:1个节点与节点选择器不匹配

    所以现在我的问题是: 如果某个节点尚未运行,如何根据pod对该特定实例类型的要求,让ASG启动该节点?
    任何指向链接、文档或更好方法的建议都将不胜感激,谢谢

    我从未使用过这个用例,但我认为您应该尝试将集群自动缩放器与nodeAffinity相结合


    这似乎是我对自动定标器和ASG的工作原理缺乏了解。根据来自不同论坛的反馈,我了解到

    A) 自动定标器在集群本身上作为pod运行(因此,开箱即用EKS不支持至少0个节点;至少需要一个节点才能运行kube系统/自动定标器pod)

    和B)单个自动缩放器吊舱能够缩放集群上存在的多个ASG。因此,这允许我们按成本将实例分离为单独的ASG,并确保昂贵的实例仅在worker Pod请求时使用

    到目前为止,我们的解决方案是:

    • 设置至少2个ASG:

    • 运行24/7吊舱和kube系统吊舱。这个ASG使用更小、更便宜的实例类型
    • (或者更多,如果它适合用例的话)运行burstable吊舱。此ASG使用任务处理所需的更大、更昂贵的实例类型
    • 将识别标签应用于ASG。EKS推荐的方法(特别是如果您想使用Spot实例)是使用实例大小(例如,micro、large、4XL)。这使您可以轻松地将具有相同资源大小的实例添加到现有ASG,以提高可靠性。例如:

        Labels:             asgsize=xlarge
      
    • 在pod yaml中应用节点选择器以匹配所需节点:

        spec:
          nodeSelector:
            asgsize: xlarge
      
    • 将24/7小实例ASG设置为最小值=1,期望值=1,最大值=1(至少;如果满足您的需要,最大值可以更大)

    • 将burstable、大型实例ASG设置为min=0、desired=0、max=(环境所需的任何内容)

    当我们实现这种方法时,我们能够成功地让一个小实例24/7运行,并且只有在创建一个带有该标签的pod时,才能让更大的实例从0爆发出来

    免责声明

    我们在自动定标器上也遇到了一个小错误,大型ASG最初没有从0开始扩展:


    该问题的变通解决方案对我们有效。我们强迫我们的大型ASG的最小值为1。然后,我们在该组上启动了一个pod,再次将min设置为0,并删除了pod。实例自动缩小并被终止,下一次我们请求pod时,它自动正确放大。

    我键入自己的解决方案时,您回答:)是的,这基本上就是我们在了解到我们误解了几个关键的自动缩放行为后所做的。谢谢你的反馈!