如何避免在AKS中自动节点按比例缩小最后一个pod被杀死

时间:2020-10-07 14:14:58

标签: kubernetes azure-aks

我们正在使用具有自动缩放功能的Azure AKS v1.17.9,既可以用于Pod(使用Horizo​​ntalPodAutoscaler),也可以用于节点。总体而言,它运作良好,但在某些情况下我们发现出现故障。我们有一些部署,其中minReplicas = 1和maxReplicas = 4。在大多数情况下,只有一个Pod可以运行。在某些情况下,自动缩放器决定按比例缩小节点,最后一个剩余的容器被杀死。后来,新的Pod在另一个节点上启动,但这意味着中断。

我希望自动缩放器首先创建一个在另一个节点上运行的新容器(将副本数提高到允许的2个值),然后按比例缩小旧容器。这样就可以在没有停机的情况下工作。因为它先杀死,然后再问问题。

除了设置minReplicas = 2的明显替代方案(由于将所有这些Pod都加倍,需要额外的VM)会增加成本之外,还有其他方法吗?这是预期的,还是一个错误?

1 个答案:

答案 0 :(得分:1)

在某些情况下,自动缩放器决定按比例缩小节点,最后一个剩余的pod被杀死。后来,新的Pod在另一个节点上启动,但这意味着中断。

因此,在生产环境中,Deployment上应始终至少有2个副本。并且您应该使用Pod Anti-Affinity,以使这两个Pod不会安排在同一Availability Zone上。例如。如果一个可用区中存在网络问题,则您的应用仍然可用。

通常至少要有3个副本,每个可用区中都有一个副本,因为云提供商通常在每个Region中都有3个可用区-因此您可以 使用区域间流量通常比跨区域流量便宜。

您总是可以使用更少的副本来节省成本,但这是一个折衷方案,可用性会降低。