持久化卷变化:在 Kubernetes 容器中重启一个服务

Persistence volume change: Restart a service in Kubernetes container

我有一个 HTTP 应用程序 (Odoo)。此应用动态支持 install/updating 个模块(插件)。

我想 运行 这个应用程序在 Kubernetes 集群中。我想动态 install/update 模块。

这个问题我有两个解决方案。但是,我想知道是否还有其他解决方案。

方案一:

优点:我可以管理docker镜像版本,如果有什么事可以重启镜像

缺点:这个解决方案对生产来说还不错,但是所有自定义模块存储库的列表都应该包含在 docker 文件中。假设我在其存储库中各有两个自定义模块,对其中一个的更改将导致重建整个 docker 映像。

方案二:

优点:小改动不会触发镜像构建。我们不需要每次都重新创建 pods。

缺点:控制每次更新的版本比较困难(不知道Kubernetes有没有对persistent volume的版本控制)

问题:

非常感谢。

您的第一个解决方案可能会更好。特别是如果您已经拥有所有工具链来重建和部署图像。您可以更轻松地回滚到以前的版本并进行故障排除(因为您确切知道每个 pod 中 运行 的版本)。

有一个替代解决方案有时用于在 Web 服务器上配置静态资产:您可以向 pod 添加一个 emptyDir 卷和一个 sidecar 容器。 sidecar 以固定的时间间隔将插件存储库中的更改拉入 emptyDir。最后,您的应用程序容器,共享相同的 emptyDir 卷将可以访问插件。

无论如何运行更新插件的命令会很复杂。您可以按固定的时间间隔执行此操作,但您的应用可能不喜欢它。