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

转载3个月前发布 SanS三石
18 0 0

引言

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

WordPress

WordPress 是全球最流行的内容管理系统(CMS),自 2003 年发布以来,已成为网站建设的首选工具。其广泛的插件和主题生态系统使用户能够轻松扩展功能和美化外观。活跃的社区提供丰富的资源和支持,进一步降低了开发和维护的难度。

凭借易用性、灵活性和强大的社区支持,WordPress 已成为全球数百万用户的共同选择,在网站建设领域占据了重要地位。

什么是 KubeBlocks

KubeBlocks 是一个可以管理多种数据库和有状态中间件的 K8s operator,支持管理 MySQL、PostgreSQL、Redis、MongoDB、Kafka、ClickHouse、Elasticsearch 等 30 余种数据库。其原理是定义一组通用和抽象的 API(CRDs)来描述各种引擎的共同属性,在其之上,数据库厂商和开发者可以通过插件来描述不同引擎的差异。

为什么要用 KubeBlocks 来管理 WordPress

在使用 WordPress Bitnami 镜像时,虽然内置的 MariaDB 提供了一个开箱即用的数据库解决方案,但存在几方面的缺陷:

  • 高可用性限制:Bitnami 镜像中的 MariaDB 通常是单节点部署,如果节点出现问题会导致网站服务中断;内置的 MariaDB 也不具备自动故障转移机制。
  • 资源竞争:MariaDB 的数据库和网站服务部署在同一个 Pod 中,会产生资源竞争,存在资源分配难题。
  • 扩展性差:虽然 MariaDB 可以进行一定程度的扩展,但水平扩展(通过增加更多数据库实例来提升性能和容量)相对复杂,需要额外的管理和配置工具。
  • 监控与管理:内置的 MariaDB 缺乏完善的监控和管理工具,难以及时发现和解决性能问题或故障。

而使用 KubeBlocks 来部署提供 WordPress 数据库服务,可以很好解决 MariaDB 的缺陷:

  • 高可用性:可以分别为 WordPress 和数据库配置高可用方案,提高整体系统的可靠性。
  • 资源隔离:WordPress 和数据库运行在不同的 Pod 中,资源隔离性更好,避免了资源竞争。
  • 拓展性强:可以独立扩展 WordPress 和数据库的副本数,分别调整它们的资源配置。
  • 快捷管理:KubeBlocks 可以快速一键部署 WordPress 所需数据库集群,无需额外操作,且内置数据库的备份和监控功能,能提高管理效率。

快速部署

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


01

安装 KubeBlocks

KubeBlocks 提供了专属的 kbcli 命令行管理工具,如果您没有安装 KubeBlocks,也能通过几行命令轻松安装KubeBlocks。

安装前,请确保您的环境满足 KubeBlocks 的环境要求[1]

  1. 安装 kbcli。

    curl -fsSL https://kubeblocks.io/installer/install_cli.sh | bash
  2. 安装 KubeBlocks。

    kbcli kubeblocks install
  3. 检查 KubeBlocks 是否安装成功。

    kbcli kubeblocks status

您也可参考官方安装文档,查看具体操作说明。

  • 安装 kbcli[2]
  • 安装 KubeBlocks[3]

02

一键部署高可用数据库集群

在部署 WordPress 之前,首先需要部署一个数据库集群用于管理 WordPress 的后台数据,可使用 kbcli[4] 或者 kubectl[5] 部署集群。

  1. 创建高可用集群。

    这里我们使用 KubeBlocks apecloud-mysql addon 创建一个 MySQL 数据库作为 WordPress 的数据库。使用 kbcli 快速部署一个具有高可用多副本且达到生产环境水平的 MySQL 数据库集群。

    设置集群参数 replicas=3,以启用数据库 RaftGroup 模式,创建一个 MySQL 三副本集群。

    # 启用 addon(默认开启)
    kbcli addon install apecloud-mysql 

    # 部署集群 可以设置参数,如 --set replicas=3 表示三副本
    kbcli cluster create apecloud-mysql --cluster-definition=apecloud-mysql --set replicas=3
  2. 查看集群状态,等待所有相关 Pod 变为 running 状态:

    kubectl get pods
    【转载】在 K8s 上使用 KubeBlocks 提供的 MySQL operator 部署高可用 WordPress 站点
  3. 获取访问地址。

    可通过 services 访问已创建的 MySQL 集群,也可通过 Pod 直接访问。本文以通过 services 访问为例。

    执行以下命令,获取 service 地址,即 apecloud-mysql.default(命名空间).svc.cluster.local (默认后缀)

    kubectl get services
    【转载】在 K8s 上使用 KubeBlocks 提供的 MySQL operator 部署高可用 WordPress 站点



03

部署 WordPress

配置数据库

  1. 根据实际需要,可以在数据库中创建若干用户,以便于 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 安装时引用,以避免明文传输密码。

  2. 执行如下命令创建 mysql-secret,设置键 mariadb-password=password,安装时 WordPress 会优先将该密码键值作为数据库密码,注意密码的键名必须为 mariadb-password。用户名不会从该 secret 中读取。

    kubectl create secret generic mysql-secret --from-literal=mariadb-password=password

一键安装 WordPress

  1. 使用 helm install 命令安装 WordPress,同时配置前面所述参数。

    helm install my-release oci://registry-1.docker.io/bitnamicharts/wordpress 
    --set mariadb.enabled=false 
    --set externalDatabase.host=apecloud-mysql.default.svc.cluster.local  
    --set externalDatabase.database=wordpress  
    --set externalDatabase.port=3306 
    --set externalDatabase.user="myadmin"
    --set externalDatabase.existingSecret="mysql-secret" 
    --set replicaCount=2

    参数说明:

    • 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 数量。
  2. 查看 Pod 运行情况 ,确保所有 Pod ready 且处于 running 状态 :

    kubectl get pods
    【转载】在 K8s 上使用 KubeBlocks 提供的 MySQL operator 部署高可用 WordPress 站点
  3. 进入 WordPress 容器,可远程连接数据库,查看 WordPress 数据库信息。

    kubectl exec -it wordpress-584444f68b-sxcss  -- bash
    mysql -h  apecloud-mysql.default.svc.cluster.local  -u Wordpress
    【转载】在 K8s 上使用 KubeBlocks 提供的 MySQL operator 部署高可用 WordPress 站点

至此,你已经成功部署了 WordPress 和对应的数据库集群。

04

高可用性能测试

本文将通过删除其中一个 Pod 来模拟故障。

kubectl delete pod apecloud-mysql-0

可以看到 Pod apecloud-mysql-0 现在 ready 状态是 3/4,其中 MySQL 容器无法使用。

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

但并不影响正常连接数据库,且可以看到 apecloud-mysql-1 成为了 leader(默认是 apecloud-mysql-0),这是 KubeBlocks 强大故障转移能力的体现之一。

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

05

数据库扩容

当出现性能瓶颈等情况,或许需要对数据库节点进行资源扩容,KubeBlocks 提供了非常方便的扩容命令,可使用 kbcli vsclae 命令轻松扩充计算资源。

kbcli cluster vscale mycluster --components=apecloud-mysql --cpu=500m --memory=500Mi

更多数据库参数设置可以参考官方文档[6]

参考资料
[1]

KubeBlocks 的环境要求: https://kubeblocks.io/docs/preview/user_docs/installation/install-with-kbcli/install-kubeblocks-with-kbcli#environment-preparation

[2]

安装 kbcli: https://kubeblocks.io/docs/preview/user_docs/installation/install-with-kbcli/install-kbcli

[3]

安装 KubeBlocks: https://kubeblocks.io/docs/preview/user_docs/installation/install-with-kbcli/install-kubeblocks-with-kbcli

[4]

使用 kbcli 创建集群: https://kubeblocks.io/docs/preview/user_docs/kubeblocks-for-apecloud-mysql/cluster-management/create-and-connect-an-apecloud-mysql-cluster

[5]

使用 kubectl 创建集群: https://kubeblocks.io/docs/preview/api_docs/kubeblocks-for-apecloud-mysql/cluster-management/create-and-connect-an-apecloud-mysql-cluster

[6]

数据库参数设置官方文档: https://github.com/bitnami/containers/tree/main/bitnami/wordpress#connect-wordpress-container-to-an-existing-database

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

End

KubeBlocks 已发布 v0.9.0KubeBlocks v0.9.0 全面升级了 API,构建一个 Cluster 更像是在用 Component “搭积木”!新增 topologies 字段,支持多种部署形态。InstanceSet 代替了 StatefulSet 来管理 Pods,支持将指定的 Pod 下线、Pod 原地更新,同时也支持数据库主从架构里主库和从库采用不同的 Pod spec。v0.9.0 还新增了 Reids 集群模式(分片模式),系统的容量、性能以及可用性显著提升!还支持了 MySQL 主备,资源的要求更少,数据复制的开销也更小!快来试试看!

小猿姐诚邀各位体验 KubeBlocks,也欢迎您成为产品的使用者和项目的贡献者。跟我们一起构建云原生数据基础设施吧!

官网: www.kubeblocks.io

GitHub: https://github.com/apecloud/kubeblocks

Get started: https://cn.kubeblocks.io/docs/preview/user-docs/try-out-on-playground/try-kubeblocks-on-local-host

关注小猿姐,一起学习更多云原生技术干货。

 戳「阅读原文」,star KubeBlocks 

© 版权声明

相关文章

暂无评论

您必须登录才能参与评论!
立即登录
暂无评论...