【问题标题】:Keeping a POD alive in Kubernetes在 Kubernetes 中保持 POD 存活
【发布时间】:2020-09-20 15:13:52
【问题描述】:

我正在将应用程序从 Windows 服务器迁移到在云上运行的 Kubernetes。我能够在 Kubernetes 中成功启动该应用程序。接下来是恢复,提供了一个脚本来将数据恢复到新实例,但应该在应用程序实例关闭时运行。有一个名为 stop.sh 的脚本可以关闭该应用程序的实例。恢复和关闭脚本都应该在 POD 内运行。我使用“Kubectl exec”进入 POD,然后尝试使用 stop.sh 关闭实例。然后实例将关闭,但 POD 也会随之退出,我无法在 POD 内运行 restore.sh 脚本。那么有没有一种方法可以让 POD 保持活动状态,即使在我的应用程序实例关闭以运行恢复脚本后也是如此。

问候, 约翰

【问题讨论】:

  • 你能让容器运行它自己的关闭序列吗?如果主容器进程崩溃,或者 Kubernetes 需要杀死 pod,因为它的节点正在关闭,你预计会发生什么?您将如何支持从 Deployment 运行的 pod 的多个副本? (我会避免 kubectl exec 进行日常操作。)

标签: docker kubernetes kubernetes-pod docker-container


【解决方案1】:

一个 POD 意味着在主进程运行时保持活动状态,当主进程关闭时,该 pod 将被终止。

您想要的是不是如何让 POD 保持活跃,而是如何重构您的应用程序以正确使用 Kubernetes。

您之前在脚本中的恢复阶段可能会以init container 运行。 Init 容器是在 Pod 中的其他容器之前运行的专用容器,因此您可以在主应用程序启动之前运行恢复逻辑。

下一个阶段是启动应用程序,当容器创建时,应用程序应该在容器内自行启动,因此 init 容器不应该影响它的生命周期。应用程序将假定 init 容器已完成工作并且环境设置正确。

下一个阶段是终止,当容器启动或停止时,Kubernetes 会为PostStartPreStop 触发container hooks。您可能需要使用 PreStop 挂钩来执行自定义脚本。

上面的场景,假设对应用程序的改动很小,如果您愿意重构应用程序以将其部署到 Kubernetes,还有其他方法可以实现,例如使用持久卷来存储数据并重用它当容器启动时,您无需一直进行备份和恢复。

【讨论】:

    猜你喜欢
    • 2018-09-23
    • 2019-11-04
    • 1970-01-01
    • 2019-10-19
    • 2021-04-08
    • 1970-01-01
    • 1970-01-01
    • 2017-12-13
    • 1970-01-01
    相关资源
    最近更新 更多