Kubernetes缩小特定的Pods

13

我有一组正在运行命令的Pod,可能需要几秒钟。 有一个进程会跟踪打开的请求以及请求正在运行的Pod。 当缩小Pod的规模时,我希望使用该信息 - 可通过指定要保留的Pod或指定要关闭的Pod来实现。在更改副本数量时是否可能指定这种类型的信息,例如我想要X个副本,请尽量不要在A、B、C Pod上杀死我的长时间运行任务?


据我所知,目前还没有。我记得读到过一个未解决的问题,他们正在尝试实现某种检查来确定是否可以关闭该Pod。 - cristi
请查看此答案以获取可能的解决方案。 - Juniper
4个回答

6
您可以使用 controller.kubernetes.io/pod-deletion-cost: -999 注释来标注特定的Pod,并启用 PodDeletionCost 功能开关。此功能在 1.21 版本中实现 Alpha 版本,在 1.22 版本中实现 Beta 版本。

controller.kubernetes.io/pod-deletion-cost 注释可设置以提示删除与同一 ReplicaSet 中其他 Pod 相比,删除 Pod 的成本。成本较低的 Pod 将首先被删除。

https://github.com/kubernetes/kubernetes/pull/99163 https://github.com/kubernetes/kubernetes/pull/101080


这是正确的,但有时它不会被执行。 - skygeek
@skygeek 这个有文档说明不会被执行吗?还是只是你个人的经验? - et071385

5

目前这是不可能的。当您缩小副本数量时,系统会选择一个进行删除;没有一种方法可以“提示”要删除哪个副本。

您可以做的一件事是更改正在运行的 Pod 上的标签,这可能会影响它们在复制控制器中的成员资格。这可用于隔离您想要调试的 Pod(使其不成为服务的一部分或被缩放事件删除),但也可能适用于您的用例。


2
我一直在寻找解决方案,但是我也没有找到现成的解决方法。不过,可能有一个变通办法(如果您能测试并确认,那就太好了)。
步骤: 1. 删除复制控制器 2. 删除X个期望的Pod 3. 重新创建大小为X的复制控制器

2
看起来您可以停止和启动复制控制器,因此也许最好先停止它,删除 Pod,使用 scale 命令更改副本数,然后再启动它。 - nathan g

-2
如上所述,此操作的解决方法应该是这样的:
别名 k=kubectl
k delete pod && k scale --replicas= deploy/ 请确保您没有与部署相关的活动 hpa 资源。

删除后,Pod 将立即重新创建,并且在缩小规模后,Kube 仍将选择任何 Pod。 - Mr Davron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接