在 K8s 上使用 KubeBlocks 提供的 MySQL operator 部署高可用 WordPress 站点

张开发
2026/6/30 4:48:12 15 分钟阅读
在 K8s 上使用 KubeBlocks 提供的 MySQL operator 部署高可用 WordPress 站点
引言WordPressWordPress 是全球最流行的内容管理系统CMS自 2003 年发布以来已成为网站建设的首选工具。其广泛的插件和主题生态系统使用户能够轻松扩展功能和美化外观。活跃的社区提供丰富的资源和支持进一步降低了开发和维护的难度。凭借易用性、灵活性和强大的社区支持WordPress 已成为全球数百万用户的共同选择在网站建设领域占据了重要地位。什么是 KubeBlocksKubeBlocks 是一个可以管理多种数据库和有状态中间件的 K8s operator支持管理 MySQL、PostgreSQL、Redis、MongoDB、Kafka、ClickHouse、Elasticsearch 等 30 余种数据库。其原理是定义一组通用和抽象的 APICRDs来描述各种引擎的共同属性在其之上数据库厂商和开发者可以通过插件来描述不同引擎的差异。为什么要用 KubeBlocks 来管理 WordPress在使用 WordPress Bitnami 镜像时虽然内置的 MariaDB 提供了一个开箱即用的数据库解决方案但存在几方面的缺陷高可用性限制Bitnami 镜像中的 MariaDB 通常是单节点部署如果节点出现问题会导致网站服务中断内置的 MariaDB 也不具备自动故障转移机制。资源竞争MariaDB 的数据库和网站服务部署在同一个 Pod 中会产生资源竞争存在资源分配难题。扩展性差虽然 MariaDB 可以进行一定程度的扩展但水平扩展通过增加更多数据库实例来提升性能和容量相对复杂需要额外的管理和配置工具。监控与管理内置的 MariaDB 缺乏完善的监控和管理工具难以及时发现和解决性能问题或故障。而使用 KubeBlocks 来部署提供 WordPress 数据库服务可以很好解决 MariaDB 的缺陷高可用性可以分别为 WordPress 和数据库配置高可用方案提高整体系统的可靠性。资源隔离WordPress 和数据库运行在不同的 Pod 中资源隔离性更好避免了资源竞争。拓展性强可以独立扩展 WordPress 和数据库的副本数分别调整它们的资源配置。快捷管理KubeBlocks 可以快速一键部署 WordPress 所需数据库集群无需额外操作且内置数据库的备份和监控功能能提高管理效率。快速部署安装 KubeBlocksKubeBlocks 提供了专属的 kbcli 命令行管理工具如果您没有安装 KubeBlocks也能通过几行命令轻松安装KubeBlocks。安装前请确保您的环境满足 KubeBlocks 的环境要求。安装 kbcli。curl -fsSL https://kubeblocks.io/installer/install_cli.sh | bash安装 KubeBlocks。kbcli kubeblocks install检查 KubeBlocks 是否安装成功。kbcli kubeblocks status您也可参考官方安装文档查看具体操作说明。安装 kbcli安装 KubeBlocks一键部署高可用数据库集群在部署 WordPress 之前首先需要部署一个数据库集群用于管理 WordPress 的后台数据可使用 kbcli 或者 kubectl 部署集群。创建高可用集群。这里我们使用 KubeBlocks apecloud-mysql addon 创建一个 MySQL 数据库作为 WordPress 的数据库。使用 kbcli 快速部署一个具有高可用多副本且达到生产环境水平的 MySQL 数据库集群。设置集群参数 replicas3以启用数据库 RaftGroup 模式创建一个 MySQL 三副本集群。# 启用 addon默认开启 kbcli addon install apecloud-mysql # 部署集群 可以设置参数如 --set replicas3 表示三副本 kbcli cluster create apecloud-mysql --cluster-definitionapecloud-mysql --set replicas3查看集群状态等待所有相关 Pod 变为 running 状态kubectl get pods获取访问地址。可通过 services 访问已创建的 MySQL 集群也可通过 Pod 直接访问。本文以通过 services 访问为例。执行以下命令获取 service 地址即apecloud-mysql.default命名空间.svc.cluster.local 默认后缀。kubectl get servicesWordPress 部署配置数据库根据实际需要可以在数据库中创建若干用户以便于 WordPress 进行角色管理。下面我们将创建一个 myadmin 用户作为 WordPress 安装时的主用户。使用以下命令以 root 身份连接 MySQL 数据库。kbcli cluster connect apecloud-mysql进入数据库后执行以下 SQL 语句创建用户并赋予权限可根据需要设置数据库权限。CREATE USER myadmin% IDENTIFIED BY password; GRANT ALL PRIVILEGES ON *.* TO myadmin%; FLUSH PRIVILEGES; create database wordpress;注意可根据需求选择创建 secret用于 WordPress 安装时引用以避免明文传输密码。执行如下命令创建mysql-secret设置键mariadb-passwordpassword安装时 WordPress 会优先将该密码键值作为数据库密码注意密码的键名必须为mariadb-password。用户名不会从该 secret 中读取。kubectl create secret generic mysql-secret --from-literalmariadb-passwordpassword一键安装 WordPress使用 helm install 命令安装 WordPress同时配置前面所述参数。helm install my-release oci://registry-1.docker.io/bitnamicharts/wordpress \ --set mariadb.enabledfalse \ --set externalDatabase.hostapecloud-mysql.default.svc.cluster.local \ --set externalDatabase.databasewordpress \ --set externalDatabase.port3306 \ --set externalDatabase.usermyadmin --set externalDatabase.existingSecretmysql-secret \ --set replicaCount2参数说明mariadb.enabled需设置为false将禁用 MariaDB 的安装以使用外部数据库服务。host我们可以使用前面的 MySQL service 地址来访问 MySQL 服务如apecloud-mysql.default.svc.cluster.local。user,database,port根据实际情况设置。existingSecret推荐使用该方式传输密码。可引用前面创建的 secret 来传输密码以避免明文传输这些内容。注意 secret 必须包含连接密码设置了existingSecret后password 会被忽略。password可选设置。本文推荐使用existingSecret引用前面创建的 secret 来传输密码避免明文传输。此外设置了existingSecret后password将被忽略。replicaCount代表 WordPress 实例启动 Pod 数量。查看 Pod 运行情况 确保所有 Pod ready 且处于 running 状态 kubectl get pods进入 WordPress 容器可远程连接数据库查看 WordPress 数据库信息。kubectl exec -it wordpress-584444f68b-sxcss -- bash mysql -h apecloud-mysql.default.svc.cluster.local -u Wordpress至此你已经成功部署了 WordPress 和对应的数据库集群。高可用性能测试本文将通过删除其中一个 Pod 来模拟故障。kubectl delete pod apecloud-mysql-0可以看到 Podapecloud-mysql-0现在 ready 状态是 3/4其中 MySQL 容器无法使用。但并不影响正常连接数据库且可以看到apecloud-mysql-1成为了 leader默认是apecloud-mysql-0这是 KubeBlocks 强大故障转移能力的体现之一。数据库扩容测试当出现性能瓶颈等情况或许需要对数据库节点进行资源扩容KubeBlocks 提供了非常方便的扩容命令可使用 kbcli vsclae 命令轻松扩充计算资源。kbcli cluster vscale mycluster --componentsapecloud-mysql --cpu500m --memory500Mi更多数据库参数设置可以参考官方文档。相关阅读KubeBlocks MySQL K8s Operator

更多文章