代码之家  ›  专栏  ›  技术社区  ›  Neil Trodden

为什么缩减部署似乎总是删除最新的pod?

  •  5
  • Neil Trodden  · 技术社区  · 6 年前

    (在开始之前,我在Windows10上使用minikubeV27。)

    我使用nginx的“hello world”容器创建了一个部署,所需的计数为2:

    pods before scaling up

    实际上,我进入了“2小时”的pod,将index.html文件从欢迎消息编辑为“broken”——我想用k8s来显示如果一个pod出现“故障”时的样子。

    如果我将这个部署扩展到更多的实例,然后再缩小,我几乎期望k8s删除最旧的pod,但它始终删除最新的:

    pods after scaling down

    我该如何让它先移除最老的豆荚?

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

    1 回复  |  直到 6 年前
        1
  •  8
  •   Jonah Benton    6 年前

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

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

    摘要-优先删除播客:

    • 未分配给节点的,vs分配给节点的
    • 处于挂起或未运行状态的
    • 还没准备好
    • 已经在就绪状态下不到几秒钟了
    • 有更高的重启次数
    • 有较新和较旧创建时间的

    这些检查不能直接配置。

    根据规则,如果你可以让一个旧的pod没有准备好,或者让一个旧的pod重新启动,那么在一个新的pod准备好并且没有重新启动之前,它将在缩减时间被删除。

    关于控制删除优先级的能力(主要涉及作业和服务混合的工作负载)的用例有以下讨论:

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