为什么缩小部署规模似乎总是删除最新的Pod?

时间:2018-07-22 16:53:02

标签: kubernetes

(开始之前,我在Windows 10上使用minikube v27。)

我使用nginx'hello world'容器创建了一个部署,期望数量为2:

pods before scaling up

我实际上进入了“ 2小时”旧容器,并将index.html文件从欢迎消息中编辑为“损坏”-我想和k8s一起玩,看一看如果一个容器“有故障”的样子

如果我将此部署扩展到更多实例,然后再次缩减,则几乎可以预期k8会删除最旧的Pod,但始终会删除最新的pod:

pods after scaling down

我如何使其首先移除最旧的豆荚?

(理想情况下,我想说的是“如果可以的话,将所有内容重新部署为在滚动部署中具有完全相同的版本/图像/所需数量”)

1 个答案:

答案 0 :(得分:4)

Pod删除首选项基于一系列有序检查,在此处的代码中定义:

https://github.com/kubernetes/kubernetes/blob/release-1.11/pkg/controller/controller_utils.go#L737

总结-删除豆荚的优先级:

  • 未分配给节点,而未分配给节点
  • 处于待处理状态或未运行状态与正在运行
  • 尚未准备就绪,已准备就绪
  • 处于就绪状态的时间少于几秒钟
  • 重启次数更高
  • 创建时间较新

这些检查不能直接配置。

根据规则,如果您可以使旧的Pod尚未准备好,或者使旧的Pod重新启动,则它将在缩小时被删除,然后再准备好尚未重启的新Pod。 >

围绕用例来控制删除优先级的能力进行了讨论,其中主要涉及工作和服务混合的工作负载,在这里:

https://github.com/kubernetes/kubernetes/issues/45509