我有一组 Pod 运行命令,可能需要长达几秒钟的时间。有一个进程可以跟踪打开的请求以及该请求正在哪个 Pod 上运行。我希望在缩小 Pod 规模时使用该信息 - 通过指定尝试离开哪些 Pod,或者指定要关闭哪些 Pod。更改副本数时是否可以指定此类信息,例如我想要 X 个副本,尽量不要终止我在 Pod A、B、C 上长时间运行的任务?
您可以使用
controller.kubernetes.io/pod-deletion-cost: -999
注释特定的 Pod 并启用 PodDeletionCost
功能门。此功能在 1.21 中实现 alpha,在 1.22 中实现 beta。
可以设置注释来提示删除某个 pod 与属于同一 ReplicaSet 的其他 pod 相比的成本。删除成本较低的 Pod 首先被删除。controller.kubernetes.io/pod-deletion-cost
https://github.com/kubernetes/kubernetes/pull/99163 https://github.com/kubernetes/kubernetes/pull/101080
目前这是不可能的。当你缩小副本数量时,系统会选择删除一个;没有一种方法可以“提示”您想要删除哪一个。
您可以做的一件事是更改正在运行的 Pod 上的标签,这可能会影响它们在复制控制器中的成员身份。这可用于隔离您想要调试的 Pod(以便它们不会成为服务的一部分或被扩展事件删除),但也可能用于您的用例。
我自己一直在寻找解决方案,但也找不到开箱即用的解决方案。 但是,可能有一个解决方法(如果您可以测试并确认,我会很高兴)
步骤:
1.删除复制控制器
2.删除X个想要的pod
3. 重新创建大小为 X 的复制控制器
kubectl scale deployment --replicas=5 my-app
如上所述,此操作的解决方法应该是这样的:
别名 k=kubectl
k 删除 pod
&& k 规模 --replicas= 部署/
确保您没有与部署相关的活动 hpa 资源。