在 Kubernetes 上动态添加 Wordpress 插件

qui*_*tin 5 wordpress docker kubernetes

如果我在 Kubernetes 环境中运行 Wordpress,其中代码是 Docker 映像的一部分,并且有人尝试通过 Wordpress 管理员添加插件,我认为这不会很好地工作,因为只会安装该插件在他们添加插件时命中的容器上,对吗?

我将代码构建到图像中的方法是错误的吗?我考虑过的另一种方法是保存代码的卷,它可以很好地处理这个用例。是否有关于我可以在某处阅读的此类内容的讨论?

Luc*_*lli 2

假设您需要允许 WordPress 用户安装/升级插件,则在 Docker 映像中刻录 WordPress 是行不通的:您要么允许通过分发新的 docker 映像来更新应用程序,要么不允许。您想要做的事情允许应用程序更新来自两个来源。

\n\n

如果您没有这样的要求,只需添加:

\n\n
define(\xe2\x80\x98DISALLOW_FILE_MODS\xe2\x80\x99,true);\n
Run Code Online (Sandbox Code Playgroud)\n\n

到 wp-config.php 就可以了。\n确保当您使用新版本的 Wordpress 升级 Docker 映像时,数据库架构也会相应升级,并且当前正在执行的所有版本的 Wordpress 都可以使用该数据库架构。

\n\n

如果您无法禁用插件安装/更新,则需要解决两个问题:

\n\n

1) 您需要让所有容器访问相同的 WordPress 安装。

\n\n

容器中的磁盘文件是短暂的,这意味着当容器崩溃时,kubelet 会重新启动它,但文件将会丢失 - 每次您都会重新开始。

\n\n

此问题的典型解决方案是创建一个卷来存储您的 WordPress 安装并将其安装到 Pod 中的所有容器上,如下所示:

\n\n
volumes:\n  - name: wp-webroot\n    emptyDir: {}\n\n- name: wp-container\n    image: wp\n    volumeMounts:\n    - name: wp-webroot\n      mountPath: /var/www/html\n\n- name: wp-container2\n    image: wp\n    volumeMounts:\n    - name: wp-webroot\n      mountPath: /var/www/html\n
Run Code Online (Sandbox Code Playgroud)\n\n

更多信息:

\n\n

https://kubernetes.io/docs/tasks/access-application-cluster/communicate-containers-same-pod-shared-volume/

\n\n

2) 您需要使共享卷的存储可靠/冗余。\nKubernetes 提供了许多选项,这些选项根据运行 Kubernetes 安装的位置而有所不同。\n如果您位于公共云中,请使用云提供的任何可用选项(例如 EFS)在 AWS 上),如果您在本地,您可能需要研究 glusterfs,或者如果您有现有的 SAN,请使用它。

\n\n

更多信息: https: //kubernetes.io/docs/concepts/storage/volumes/

\n\n

关于您对有关该主题的一些参考书目的请求,您会发现许多文档告诉您您的应用程序应该是图像的一部分,例如第 7 点:

\n\n

https://developers.redhat.com/blog/2016/02/24/10-things-to-avoid-in-docker-containers/

\n\n

但同样,这假设应用程序只能由管理员升级/修改,而​​最终用户不能。您必须将在网上找到的建议与您的具体要求结合起来。

\n