命名空间 PodNodeSelector 对现有运行的 pods/statefulsets 没有影响

问题描述

我在裸机上有 kubernetes 集群,我想对节点进行逻辑分离 DEV 环境将在功率较小的机器上,而生产环境将在最强大的机器上。我实现了准入控制器的 PodNodeselector。它在新创建的命名空间上运行良好,但在现有命名空间上,对其进行编辑和添加注释,Statefulset 上的所有现有 pod 都不会转到指定的强大机器上,只需继续运行即可。如何在不重新创建或删除 Pod/Statefulset 的情况下应用新注释并对 Statefulset 产生影响,无法承受 Elassandra 的停机时间

解决方法

你不能。这就是它目前的工作方式。一旦一个 Pod 被调度到一个节点上,它就会留在一个节点上。

同样适用于亲和性/反亲和性。

但在 k8s docs 中,您可以阅读:

未来我们计划提供 requiredDuringSchedulingRequiredDuringExecution 这将只是 像 requiredDuringSchedulingIgnoredDuringExecution 只是它 将从不再满足 Pod 节点的节点中驱逐 Pod 亲和力要求。

这就是您要寻找的,但尚未实施。 看起来删除 Pod 以强制然后重新安排是目前唯一可用的选项。