在Kubernetes中保持POD的活力。

问题描述 投票:0回答:1

我正在将一个应用程序从Windows服务器迁移到运行在云上的Kubernetes.我能够在Kubernetes中成功启动应用程序。接下来是恢复,有一个提供的脚本来恢复数据到新的实例,但这应该在应用程序的实例被关闭时运行。有一个叫做stop.sh的脚本可以关闭该应用的实例。还原和关闭脚本都应该在POD里面运行。我使用 "Kubectl exec "进入POD,然后我尝试使用stop.sh关闭实例。然后实例会关闭,但POD也会随之退出,我无法在POD内运行 restore.sh脚本。所以,有没有一种方法可以让POD在我的应用实例关闭后仍能保持活力,以运行还原脚本。

祝贺你,约翰

docker kubernetes kubernetes-pod docker-container
1个回答
1
投票

POD是为了在主进程运行时保持活力,当主进程关闭时,pod将被终止。

你想要的是 如何保持POD的生命力,但如何重构你的应用,以正确地与Kubernetes一起工作。

你之前在脚本中的还原阶段,将可能以一个 启动容器.init容器是专门的容器,在Pod中先于其他容器运行,所以你可以在主应用启动之前运行你的还原逻辑。

下一个阶段是启动应用程序,当容器创建时,应用程序应该在容器内自行启动,所以init容器不应该影响它的生命周期。应用程序会认为init容器已经完成了它的工作,环境也设置正确。

下一个阶段是终止,当容器启动或停止时,Kubernetes将触发 容器钩 对于 PostStartPreStop. 您可能需要使用 PreStop 钩子来执行自定义脚本。

上面的方案,假设对应用的改动很小,如果你愿意重构应用,将其部署到Kubernetes上,还有其他方法可以实现,比如使用持久化卷来存储数据,并在容器启动时重新使用,这样你就不需要一直做备份和恢复。

© www.soinside.com 2019 - 2024. All rights reserved.