如果我在 Kubernetes 环境中运行 Wordpress,其中代码是 Docker 映像的一部分,并且有人试图通过 Wordpress 管理员添加插件,我不认为这会很好,因为插件只会被安装在他们添加插件时命中的容器上,对吗?
我将代码构建到图像中的方法是失误吗?我考虑的另一种方法是保存代码的卷,它可以很好地处理这个用例。是否有关于我可以在某处阅读的此类内容的讨论?
如果我在 Kubernetes 环境中运行 Wordpress,其中代码是 Docker 映像的一部分,并且有人试图通过 Wordpress 管理员添加插件,我不认为这会很好,因为插件只会被安装在他们添加插件时命中的容器上,对吗?
我将代码构建到图像中的方法是失误吗?我考虑的另一种方法是保存代码的卷,它可以很好地处理这个用例。是否有关于我可以在某处阅读的此类内容的讨论?
假设您需要允许 wordpress 用户安装/升级插件,那么在 Docker 镜像中刻录 wordpress 是行不通的:要么您只允许通过分发新的 docker 镜像来更新应用程序,要么您不允许。您想要做的事情允许应用程序更新来自两个来源。
如果您没有这样的要求,只需添加:
到 wp-config.php,你很高兴。确保当您使用新版本的 Wordpress 升级 Docker 映像时,数据库架构会相应升级,并且当前正在执行的所有 Wordpress 版本都可以使用该数据库架构。
如果您无法禁用插件安装/更新,则需要解决 2 个问题:
1)您需要让所有容器访问相同的 wordpress 安装。
容器中的磁盘文件是短暂的,这意味着当容器崩溃时,kubelet 会重新启动它,但文件会丢失 - 每次你得到一个干净的状态。
这个问题的一个典型解决方案是创建一个卷来存储您的 wordpress 安装并将其安装在 Pod 中的所有容器上,如下所示:
更多信息:
https://kubernetes.io/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume/
2)您需要使共享卷的存储可靠/冗余。Kubernetes 提供了许多选项,这些选项根据您运行 Kubernetes 安装的位置而有所不同。如果您在公共云中,请使用该云提供的任何内容(例如 AWS 上的 EFS),如果您在本地,则可能需要查看 glusterfs 或者如果您有现有的 SAN,请使用它。
更多信息:https ://kubernetes.io/docs/concepts/storage/volumes/
关于您对该主题的一些参考书目的请求,您会发现许多文件告诉您您的应用程序应该是图像的一部分,例如第 7 点:
https://developers.redhat.com/blog/2016/02/24/10-things-to-avoid-in-docker-containers/
但同样,这假设应用程序只能由管理员升级/修改,而不是最终用户。您必须将您在网络上找到的建议与您的特定要求联系起来。