gpt4 book ai didi

kubernetes - 在可能缩小时防止杀死一些 pod ?

转载 作者:行者123 更新时间:2023-12-04 01:55:35 25 4
gpt4 key购买 nike

我需要扩展一组运行基于队列的工作程序的 pod。 worker 的工作可以运行很长时间(小时),不应中断。 Pod 的数量基于工作队列的长度。缩放要么使用使用自定义指标的水平自动缩放器,要么使用一个改变副本数量的简单 Controller 。

任一解决方案的问题在于,在缩小规模时,无法控制终止哪个 Pod。在任何给定时间,大多数 worker 可能都在处理短期运行的工作、空闲或(更罕见的)处理长期运行的工作。我想避免杀死长时间运行的工作人员,空闲或短期运行的工作人员可以毫无问题地终止。

以低复杂度做到这一点的方法是什么?我能想到的一件事是根据 pod 的 CPU 使用情况来执行此操作。不理想,但它可能已经足够好了。另一种方法可能是工作人员以某种方式公开一个优先级,表明他们是否是要删除的首选 pod。不过,每次 worker 接受新工作时,这个优先级都会改变。

最终所有的工作都将是短期运行的,这个问题会消失,但这是目前的长期目标。

最佳答案

期间process of termination对于 Pod,Kubernetes 会向 Pod 的容器发送一个 SIGTERM 信号。您可以使用该信号正常关闭您的应用程序。问题是 Kubernetes 不会永远等待您的应用程序完成,在您的情况下,您的应用程序可能需要很长时间才能退出。
在这种情况下,我建议您使用 preStop hook ,这在 Kubernetes 向容器发送 KILL 信号之前完成。有一个例子here关于如何使用处理程序:

apiVersion: v1
kind: Pod
metadata:
name: lifecycle-demo
spec:
containers:
- name: lifecycle-demo-container
image: nginx
lifecycle:
postStart:
exec:
command: ["/bin/sh", "-c", "echo Hello from the postStart handler > /usr/share/message"]
preStop:
exec:
command: ["/bin/sh","-c","nginx -s quit; while killall -0 nginx; do sleep 1; done"]

关于kubernetes - 在可能缩小时防止杀死一些 pod ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55836106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com