我们有一个基于官方 wordpress 图像的自定义 docker 图像,其中包含我们正在开发的自定义主题。我们在这个项目上有 CI/CD,使用 Gitlab CI 并在裸机 Kubernetes Cluster v1.6 上部署分支以供审查。它工作正常,但是我们正在尝试通过在部署新实例时自动执行所需的手动操作来增强流程:
- 安装 WordPress
- 设置管理员凭据
- 设置站点名称和网址
- 激活主题
- 激活插件
- 导入数据
- 等等
wp-cli有所有需要的命令。但是如何将它与容器和 K8S 一起使用呢?我们知道有两种选择:
- 在我们基于 WordPress 的映像中安装该工具。
- 使用仅包含wp-cli并与主容器通信的第二个容器。
有预装 wp-cli 的 WordPress 图像(例如tutum-docker-wordpress),但我们认为这不是正确的方法。在某些时候,我们希望每天使用带有 cli 图像的 CronJob 资源来导出数据,并且我们正在努力使该过程尽可能通用,并且我们希望坚持使用官方图像,因此首选第二个选项。根据我们的研究,为了实施第二个选项,我们需要实现两件事:
- 从 CLI 容器访问 WordPress 安装文件。
- 执行成功后不要重试。
我们研究了几个没有完全成功的选项:
- 同一个 pod 中的第二个容器 - 看起来可以使用EmptyDir在两个容器之间共享文件,但是即使容器成功,它也会重新启动。
- InitContainer - 这听起来很诱人,因为数据库迁移是以这种方式完成的。但是,除非您使用自定义图像,否则似乎无法获取文件。
- Job - 它被专门设计用于处理一次性任务,但是访问 pod 中容器的文件似乎是不可能的。
当您在 Kubernetes 上部署 Wordpress 的审核部署时,这似乎是一个非常常见的功能,并且应该已经有人这样做了。但我们找不到有关此用例的任何具体信息。
请就根据您的要求实现所需实施的最佳方法是什么以及如何提供建议?