首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【k8s-数据库】KubeBlocks:基于K8s搭建高可用数据库(本文以mysql为例)集群

【k8s-数据库】KubeBlocks:基于K8s搭建高可用数据库(本文以mysql为例)集群

作者头像
编码如写诗
发布2025-06-24 10:55:42
发布2025-06-24 10:55:42
36300
代码可运行
举报
文章被收录于专栏:编码如写诗编码如写诗
运行总次数:0
代码可运行

KubeBlocks 是一个开源的 Kubernetes Operator,适用于数据库和中间件,目前已支持的服务有如下:

  • MySQL
  • PostgreSQL
  • Redis
  • MongoDB
  • Kafka
  • RabbitMQ
  • Minio
  • Elasticsearch
  • StarRocks
  • Qdrant
  • Milvus
  • ZooKeeper
  • etcd

随着上个月v1.0.0稳定版的发布,是时候值得我们体验一番了。本文以k8s 1.32版本为例,使用KubeBlocks进行在线部署mysql集群。

1.安装 Snapshot

1.1 验证是否存在所需的 CRD

代码语言:javascript
代码运行次数:0
运行
复制
kubectl get crd volumesnapshotclasses.snapshot.storage.k8s.io
kubectl get crd volumesnapshots.snapshot.storage.k8s.io
kubectl get crd volumesnapshotcontents.snapshot.storage.k8s.io
图片
图片

如果集群缺少这些 CRD,则需要先安装它们:

代码语言:javascript
代码运行次数:0
运行
复制
# v8.2.0 is the latest version of the external-snapshotter, you can replace it with the version you need.
kubectl create -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v8.2.0/client/config/crd/snapshot.storage.k8s.io_volumesnapshotclasses.yaml
kubectl create -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v8.2.0/client/config/crd/snapshot.storage.k8s.io_volumesnapshots.yaml
kubectl create -f https://raw.githubusercontent.com/kubernetes-csi/external-snapshotter/v8.2.0/client/config/crd/snapshot.storage.k8s.io_volumesnapshotcontents.yaml
图片
图片

1.2 部署快照控制器

代码语言:javascript
代码运行次数:0
运行
复制
helm repo add piraeus-charts https://piraeus.io/helm-charts/
helm repo update
# Update the namespace to an appropriate value for your environment (e.g. kb-system)
helm install snapshot-controller piraeus-charts/snapshot-controller -n kb-system --create-namespace
图片
图片

1.3 验证部署

代码语言:javascript
代码运行次数:0
运行
复制
kubectl get pods -n kb-system | grep snapshot-controller

需要导入镜像

代码语言:javascript
代码运行次数:0
运行
复制
docker pull registry.k8s.io/sig-storage/snapshot-controller:v8.2.1
图片
图片

2.安装 KubeBlocks

本文使用helm安装

2.1 安装crds

代码语言:javascript
代码运行次数:0
运行
复制
kubectl create -f https://github.com/apecloud/kubeblocks/releases/download/v1.0.0/kubeblocks_crds.yaml

若网络限制,可去github手动下载该yaml后上传至服务器。

代码语言:javascript
代码运行次数:0
运行
复制
kubectl create -f kubeblocks_crds.yaml
图片
图片

2.2 配置helm仓库

代码语言:javascript
代码运行次数:0
运行
复制
helm repo add kubeblocks https://apecloud.github.io/helm-charts
helm repo update

2.3 安装KubeBlocks

代码语言:javascript
代码运行次数:0
运行
复制
helm install kubeblocks kubeblocks/kubeblocks --namespace kb-system --create-namespace --version=v1.0.0

需要网络原因,可先下载helm离线包

代码语言:javascript
代码运行次数:0
运行
复制
VERSION=1.0.0    # Chart 版本
helm fetch kubeblocks/kubeblocks --version=${VERSION}

上传离线helm后安装

代码语言:javascript
代码运行次数:0
运行
复制
helm install kubeblocks kubeblocks-1.0.0.tgz --namespace kb-system --create-namespace --version=v1.0.0

2.4 验证

默认使用了阿里云镜像

图片
图片

用到的镜像

代码语言:javascript
代码运行次数:0
运行
复制
apecloud-registry.cn-zhangjiakou.cr.aliyuncs.com/apecloud/kubeblocks-charts:1.0.0 
apecloud-registry.cn-zhangjiakou.cr.aliyuncs.com/apecloud/kubeblocks-tools:1.0.0
apecloud-registry.cn-zhangjiakou.cr.aliyuncs.com/apecloud/kubeblocks:1.0.0 
apecloud-registry.cn-zhangjiakou.cr.aliyuncs.com/apecloud/kubeblocks-dataprotection:1.0.0

查看已安装的插件

图片
图片

3.安装mysql

https://kubeblocks.io/docs/preview/kubeblocks-for-mysql/02-quickstart

3.1 创建 MySQL 集群

代码语言:javascript
代码运行次数:0
运行
复制
#直接安装的mysql为8.0.35
kubectl apply -f https://raw.githubusercontent.com/apecloud/kubeblocks-addons/refs/heads/main/examples/mysql/cluster.yaml

若需要安装mysql:5.7.44版本,修改以下文件

代码语言:javascript
代码运行次数:0
运行
复制
https://raw.githubusercontent.com/apecloud/kubeblocks-addons/refs/heads/main/examples/mysql/cluster.yaml

vim cluster.yaml
图片
图片
图片
图片

由于使用了demo命名空间,demo不存在导致报错,需要先创建ns-demo,然后再kubectl apply -f cluster.yaml

代码语言:javascript
代码运行次数:0
运行
复制
kubectl create ns demo
图片
图片

用到的镜像,若网络限制可本地下载后再导入到服务器

代码语言:javascript
代码运行次数:0
运行
复制
apecloud/mysql:5.7.44
apecloud/mysqld-exporter:0.15.1
apecloud/xtrabackup:2.4
apecloud/jemalloc:5.3.0
apecloud/mysql_audit_log:5.7.44
apecloud/syncer:0.5.0
图片
图片

3.2 访问

服务-mysql-cluster-mysql,开启nodePort

图片
图片

密码在保密字典-mysql-cluster-mysql-account-root

图片
图片

4.验证

默认部署了两个mysql 容器组

图片
图片

我们将mysql-cluster-mysql-0对应容器停止,可以看到mysql-cluster-mysql服务秒级切换到了mysql-1

图片
图片

通过Navicat等工具,测试数据同步和连接,表现依然亮眼,全部秒级切换完成。

图片
图片
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-06-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 编码如写诗 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.安装 Snapshot
    • 1.1 验证是否存在所需的 CRD
    • 1.2 部署快照控制器
    • 1.3 验证部署
  • 2.安装 KubeBlocks
    • 2.1 安装crds
    • 2.2 配置helm仓库
    • 2.3 安装KubeBlocks
    • 2.4 验证
  • 3.安装mysql
    • 3.1 创建 MySQL 集群
    • 3.2 访问
  • 4.验证
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档