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

Nei*_*den 7 kubernetes

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

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

扩大之前的广告连播

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

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

缩小后的豆荚

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

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

Jon*_*ton 8

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