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

news2024/9/22 7:16:18

引言

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 所需数据库集群,无需额外操作,且内置数据库的备份和监控功能,能提高管理效率。

快速部署

安装 KubeBlocks

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

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

  1. 安装 kbcli。

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

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

    kbcli kubeblocks status
    

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

  • 安装 kbcli
  • 安装 KubeBlocks

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

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

  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
    

  3. 获取访问地址。

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

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

    kubectl get services
    

WordPress 部署

配置数据库
  1. 根据实际需要,可以在数据库中创建若干用户,以便于 WordPress 进行角色管理。下面我们将创建一个 myadmin 用户作为 WordPress 安装时的主用户。

    使用以下命令以 root 身份连接 MySQL 数据库。

    kbcli cluster connect apecloud-mysql 
    
  2. 进入数据库后,执行以下 SQL 语句创建用户并赋予权限,可根据需要设置数据库权限。

    CREATE USER 'myadmin'@'%' IDENTIFIED BY 'password';
    GRANT ALL PRIVILEGES ON *.* TO 'myadmin'@'%';
    FLUSH PRIVILEGES;
    create database wordpress;
    

    注意

    可根据需求选择创建 secret,用于 WordPress 安装时引用,以避免明文传输密码。

  3. 执行如下命令创建 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
    

  3. 进入 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

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

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

数据库扩容测试

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

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

更多数据库参数设置可以参考官方文档。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1934546.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

npm install时卡在sill idealTree buildDeps卡着不动

场景:做导出功能的时候要用上xlsx,正常npm install xlsx --save 问题描述:npm install时卡在sill idealTree buildDeps,,卡着不动 过程:在网上一顿百度试过好多种方法 1、切换taobao的镜像地址 npm conf…

Flink History Server配置

目录 问题复现 History Server配置 HADOOP_CLASSPATH配置 History Server配置 问题修复 启动flink集群 启动Histroty Server 问题复现 在bigdata111上执行如下命令开启socket: nc -lk 9999 如图: 在bigdata111上执行如下命令运行flink应用程序 …

神经网络之多层感知机

目录 一、全连接层:二、单层感知机概念:三、多层感知机概念: 一、全连接层: 在神经网络中,全连接层就是每个神经元都与上一层的所有神经元相连接,即每个神经元都接收上一层所有神经元的输入,并…

Java后端开发(十四)-- Win10安装多版本JDK并随时切换

目录 1. 多版本JDK并随时切换的解决办法 2. jdk17切回jdk8时一直失败的解决办法 3. 测试jdk版本 我目前使用的是window10的操作系统,在环境变量中关于jdk的配置如下: 1. 多版本JDK并随时切换的解决办法 最后一步就是切换 JAVA_HOME 的环境变量的值,就能随意切换jdk的版本…

Amisco供应汽车线圈与Husco是一家私营公司高性能液压和机电部件在汽车和非公路应用的组件设计和制造方面拥有超过 75 年的经验10于年的合作

Amisco和Husco在汽车线圈和高性能液压和机电部件的设计和制造方面合作已经超过10年。 Amisco是一家供应汽车线圈的公司,而Husco则专注于高性能液压和机电部件的设计和制造。 这两家公司在汽车和非公路应用领域拥有超过75年的经验。通过合作,Amisco和Husc…

Go语言并发编程-Goroutine调度

goroutine 概念 在Go中,每个并发执行的单元称为goroutine。通常称为Go协程。 go 关键字启动goroutine go中使用关键字 go 即可启动新的goroutine。 示例代码: 两个函数分别输出奇数和偶数。采用常规调用顺序执行,和采用go并发调用&…

elementUI在手机端使用遇到的问题总结

之前的博客有写过用vue2elementUI封装手机端选择器picker组件,支持单选、多选、远程搜索多选,最终真机调试的时候发现有很多细节样式需要调整。此篇博客记录下我调试过程中遇到的问题和解决方法。 一、手机真机怎么连电脑本地代码调试? 1.确…

2-38 基于matlab的蚁群算法优化无人机uav巡检

基于matlab的蚁群算法优化无人机uav巡检,巡检位置坐标可根据需求设置,从基地出发,返回基地,使得路径最小。可设置蚁群数量,信息素系数。输出最佳路线长度。程序已调通,可直接运行。 2-38 蚁群算法优化无人…

C学习(数据结构)-->单链表习题

目录 一、环形链表 题一:环形链表 思路: 思考一:为什么? 思考二:快指针一次走3步、4步、......n步,能否相遇 step1: step2: 代码: 题二: 环形链表 I…

PolarisMesh源码系列--Polaris-Go注册发现流程

导语 北极星是腾讯开源的一款服务治理平台,用来解决分布式和微服务架构中的服务管理、流量管理、配置管理、故障容错和可观测性问题。在分布式和微服务架构的治理领域,目前国内比较流行的还包括 Spring Cloud,Apache Dubbo 等。在 Kubernete…

22.《C语言》——【如何进行文件操作?】上集

🆕 开场白 亲爱的读者,大家好!我是一名正在学习编程的高校生。在这个博客里,我将和大家一起探讨编程技巧、分享实用工具,并交流学习心得。希望通过我的博客,你能学到有用的知识,提高自己的技能&…

鸿蒙语言基础类库:【@system.prompt (弹窗)】

弹窗 说明: 从API Version 8 开始,该接口不再维护,推荐使用新接口[ohos.prompt]。本模块首批接口从API version 3开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import prompt from system.prompt;…

Python算法实现之排序算法的Python实现详解

概要 排序算法是计算机科学中最基础和最重要的算法之一。它们在数据处理中起着关键作用,广泛应用于搜索、数据分析和优化等领域。本文将详细介绍几种常见的排序算法及其Python实现,包括冒泡排序、选择排序、插入排序、归并排序和快速排序,并通过具体示例代码展示它们的工作…

插画感言:成都亚恒丰创教育科技有限公司

插画感言:笔触间的灵魂对话 在这个快节奏、高压力的时代,我们时常在寻找那些能够触动心灵、让灵魂得以片刻栖息的角落。而插画,这一融合了艺术与情感的独特形式,便如同一股清泉,缓缓流淌进每个人的心田,以…

【iOS】——编译链接和动态链接器

前言 计算机语言分为机器语言:汇编语言,高级语言。 可以将高级语言分为两种:1,编译语言和解释型语言(直译式语言)。 编译型语言(一次性翻译) 编译型语言的程序只要经过编译器编译之…

关于dom4j主节点的xmlns无法写入的问题

由于最近需要做一个xml的文件,使用dom4j的时候发现了一个bug,就是我的xmlns根本无法写入到xml的头部标签中。 Element element document.addElement("test"); element.addAttribute("xmlns", "urn:Declaration:datamodel:sta…

小程序js 把链接转换为二维码

GitHub - Rookie-M/weapp-qrcode: weapp.qrcode.js 在 微信小程序 中,快速生成二维码 1.要下载上面地址的插件包 2.引用 import drawQrcode from ../../utils/weapp.qrcode.minonLoad(options) {let that thisconsole.log(JSON.parse(options.info))that.setData…

[word] word表格跨页断开实现教程 #职场发展#媒体

word表格跨页断开实现教程 选中整个word表格 单击鼠标右键,选择“表格属性”选项 切换至“行”标签,找到“允许跨页断行”选项 勾选上“允许跨页断行”,单击“确定”按钮,完成! word表格跨页断开实现教程的下载地址&a…

Memcached介绍与使用

引言 本文是笔者对Memcached这个高性能分布式缓存组件的实践案例,Memcached是一种高性能的分布式内存对象缓存系统,用于减轻数据库负载,加速动态Web应用,提高网站访问速度。它通过在内存中缓存数据和对象来减少读取数据库的次数&…

路由数据获取及封装方法

数据库设计 自联表 定义tree字段 public class LabelValue{public int label { get; set; }public string? value { get; set; }public List<LabelValue> children { get; set; }}获取路由方法 public Response<object> getMenuList() {Response<object>…