在 Kubernetes 上动态添加 Wordpress 插件

在 Kubernetes 上动态添加 Wordpress 插件

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

我将代码构建到图像中的方法是否是错误的?我考虑的另一种方法是使用一个包含代码的卷,这可以很好地处理这种用例。有没有关于这类事情的讨论我可以读到?

答案1

假设你必需的为了让 wordpress 用户安装/升级插件,在 Docker 镜像中刻录 wordpress 是行不通的:要么你允许应用程序更新仅有的通过分发新的 docker 镜像或不分发。您想要做的是允许应用程序更新来自两个来源。

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

define(‘DISALLOW_FILE_MODS’,true);

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

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

1)您需要让所有容器访问同一个 wordpress 安装。

容器中的磁盘文件是短暂的,这意味着当容器崩溃时,kubelet 将重新启动它,但文件将会丢失 - 每次你得到一个干净的记录时。

解决此问题的典型方法是创建一个卷,仅用于存储您的 wordpress 安装,并将其挂载在 Pod 中的所有容器上,如下所示:

volumes:
  - name: wp-webroot
    emptyDir: {}

- name: wp-container
    image: wp
    volumeMounts:
    - name: wp-webroot
      mountPath: /var/www/html

- name: wp-container2
    image: wp
    volumeMounts:
    - name: wp-webroot
      mountPath: /var/www/html

更多信息:

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/

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

相关内容