将容器悬挂在kubernetes容器中

Wax*_*Off 5 kubernetes

我想将主进程挂在运行在kubernetes容器中的docker容器中。我试图通过运行来做到这一点

kubectl exec <pod-name> -c <container-name> kill -STOP 1
Run Code Online (Sandbox Code Playgroud)

但该信号不会停止容器。研究其他方法,它看起来像docker stop --signal=SIGSTOPdocker pause可能起作用。但是,据我所知,kubectl exec总是在容器的上下文中运行,而这些命令将需要在容器的上下文之外的pod中运行。kubectl的界面是否允许这样的事情?我是否可以通过调用基础kubernetes API来实现此行为?

小智 10

您可以将副本集设置为0,这会将正在工作的部署数设置为0。这不是一个暂停,但是它确实停止了部署,直到您将部署数设置为> 0。

kubectl scale --replicas=0 deployment/<pod name> --namespace=<namespace>
Run Code Online (Sandbox Code Playgroud)


sur*_*ajd 5

因此kubernetes不支持挂起Pod,因为这是一种VM行为,而且由于启动新的Pod更便宜,因此它仅在发生故障的情况下计划新的Pod。实际上,您的广告连播应该是无状态的。并且任何需要存储状态的应用程序都应在pod内安装一个永久卷。

Kubernetes的简单机制(和一般行为)是,如果容器内的进程失败,则Kuberentes将通过创建新的Pod重新启动它。

如果您还评论您要达到的最终目标,我想我可以为您提供更好的帮助。

  • 我认为暂停 pod 的一个用例是,如果您有一个正在运行的进程并希望为其保留其 RAM 状态。例如,如果您有一个 Jupyter Notebook pod,您希望在不终止 Jupyter 内核的情况下迁移到另一个节点。 (2认同)