我正在使用 Kubernete 在永久循环中运行 Node 脚本。创建 pod 后,它会运行“npm start”,以循环模式使用默认参数启动脚本。 它非常适合这一点。
我有时还需要在 pod 中运行一些 Node 命令。
(eg: node dist/index run --parameter=xyz)
为此,我使用 kubectl :
kubectl exec -it PODNAME NAMESPACE -- /bin/ash
它允许我根据需要使用其他参数运行脚本但是
我没有找到一种方法可以在运行其他命令时暂停主进程(“npm start”)。
我希望在执行这些 Node 命令时暂停循环(它们不能并行运行)。我试图杀死通过输入“ps -aef”显示的主要处理,但它不起作用。它要么自动重新启动(restartPolicy:始终),要么使 Pod 出错并且我无法输入 Node 命令。
知道如何实现这一目标吗?
最佳答案
您可以做的就是向主进程发送信号,SIGUSR2 就是用于这种目的的。您可以catch the signal with an event handler并设置一个变量,然后让您的普通代码每隔一段时间或在代码中的设定点检查该变量,以判断它是否应该执行操作。
在发出暂停的 CLI 端,您可以简单地使用 kill
命令将信号发送到进程。
另请参阅:
- https://nodejs.org/api/process.html#process_signal_events
- http://man7.org/linux/man-pages/man7/signal.7.html
- how to use kill SIGUSR2 in bash?
但是,也许您不应该尝试暂停 Pod,只需优雅地让它关闭,然后在新的 Pod 中恢复剩余的工作负载?可能是一种更干净的方法,但这当然取决于您想要实现的目标。
关于javascript - 库伯内特斯 : Pause main script while keeping pod alive,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49818005/