Kubernetes 上部署 RadonDB MySQL 集群
Contents
- 在 Kubernetes 上部署 RadonDB MySQL 集群
- 简介
- 部署准备
- 部署步骤
- 步骤 1:克隆代码
- 步骤 2:部署 Operator
- 步骤 3:部署 RadonDB MySQL 集群
- 部署校验
- 校验 RadonDB MySQL Operator
- 校验 RadonDB MySQL 集群
- 连接 RadonDB MySQL
- 同 NameSpace 访问
- 跨 NameSpace 访问
- 卸载
- 卸载 Operator
- 卸载 RadonDB MySQL
- 卸载自定义资源
- 配置
- 容器配置
- 节点配置
- 持久化配置
- 参考
在 Kubernetes 上部署 RadonDB MySQL 集群(Operator)
简介
RadonDB MySQL 是一款基于 MySQL 的开源、高可用、云原生集群解决方案。支持一主多从高可用架构,并具备安全、自动备份、监控告警、自动扩容等全套管理功能。目前已经在生产环境中大规模的使用,包含银行、保险、传统大企业等。
RadonDB MySQL 支持在 Kubernetes 上安装部署和管理,自动执行与运行 RadonDB MySQL 集群有关的任务。
本教程主要演示如何在 Kubernetes 上部署 RadonDB MySQL 集群(Operator)。
部署准备
- 已准备可用 Kubernetes 集群。
部署步骤
步骤 1: 添加 helm 仓库
helm repo add radondb https://radondb.github.io/radondb-mysql-kubernetes/
校验仓库,可查看到名为 radondb/mysql-operator
的 chart。
helm search repo
NAME CHART VERSION APP VERSION DESCRIPTION
radondb/mysql-operator 0.1.1 latest Open Source,High Availability Cluster,based on MySQL
步骤 2: 部署 Operator
以下指定 release 名为 demo
, 创建一个名为 demo-mysql-operator
的 Deployment。
helm install demo radondb/mysql-operator
说明:在这一步骤中默认将同时创建集群所需的 CRD。
步骤 3: 部署 RadonDB MySQL 集群
执行以下指令,以默认参数为 CRD mysqlclusters.mysql.radondb.com
创建一个实例,即创建 RadonDB MySQL 集群。您可以参照配置自定义集群部署参数。
kubectl apply -f https://raw.githubusercontent.com/radondb/radondb-mysql-kubernetes/main/config/samples/mysql_v1alpha1_mysqlcluster.yaml
部署校验
校验 RadonDB MySQL Operator
查看 demo
的 Deployment 和对应监控服务,回显如下信息则部署成功。
kubectl get deployment,svc
NAME READY UP-TO-DATE AVAILABLE AGE
demo-mysql-operator 1/1 1 1 7h50m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/mysql-operator-metrics ClusterIP 10.96.142.22 <none> 8443/TCP 8h
校验 RadonDB MySQL 集群
执行如下命令,将查看到如下 CRD。
kubectl get crd | grep mysql.radondb.com
backups.mysql.radondb.com 2021-11-02T07:00:01Z
mysqlclusters.mysql.radondb.com 2021-11-02T07:00:01Z
mysqlusers.mysql.radondb.com 2021-11-02T07:00:01Z
以默认部署为例,执行如下命令将查看到名为 sample-mysql
的三节点 RadonDB MySQL 集群及用于访问节点的服务。
kubectl get statefulset,svc
NAME READY AGE
sample-mysql 3/3 7h33m
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/sample-follower ClusterIP 10.96.131.84 <none> 3306/TCP 7h37m
service/sample-leader ClusterIP 10.96.111.214 <none> 3306/TCP 7h37m
service/sample-mysql ClusterIP None <none> 3306/TCP 7h37m
连接 RadonDB MySQL
您需要准备一个用于连接 MySQL 的客户端。
同 NameSpace 访问
当客户端与 RadonDB MySQL 集群在同一个 NameSpace 中时,可使用 leader/follower service 名称代替具体的 IP 和端口。
-
连接主节点(读写节点)。
$ mysql -h <leader service 名称> -u <用户名> -p
用户名为
radondb_usr
,release 名为sample
,连接主节点示例如下:$ mysql -h sample-leader -u radondb_usr -p
-
连接从节点(只读节点)。
$ mysql -h <follower service 名称> -u <用户名> -p
用户名为
radondb_usr
,release 名为sample
,连接从节点示例如下:$ mysql -h sample-follower -u radondb_usr -p
跨 NameSpace 访问
当客户端与 RadonDB MySQL 集群不在同一个 NameSpace 中时,可以通过 podIP 或服务 ClusterIP 来连接对应节点。
-
查询 pod 列表和服务列表,分别获取需要连接的节点所在的 pod 名称或对应的服务名称。
$ kubectl get pod,svc
-
查看 pod/服务的详细信息,获取对应的 IP。
$ kubectl describe pod <pod 名称> $ kubectl describe svc <服务名称>
注意:pod 重启后 pod IP 会更新,需重新获取 pod IP,建议使用服务的 ClusterIP 来连接节点。
-
连接节点。
$ mysql -h <pod IP/服务 ClusterIP> -u <用户名> -p
用户名为
radondb_usr
,Cluster IP 为10.10.128.136
,连接示例如下:$ mysql -h 10.10.128.136 -u radondb_usr -p
卸载
卸载 Operator
卸载当前命名空间下 release 名为 demo
的 RadonDB MySQL Operator。
helm delete demo
卸载 RadonDB MySQL
卸载 release 名为 sample
RadonDB MySQL 集群。
kubectl delete mysqlclusters.mysql.radondb.com sample
卸载自定义资源
kubectl delete customresourcedefinitions.apiextensions.k8s.io mysqlclusters.mysql.radondb.com
kubectl delete customresourcedefinitions.apiextensions.k8s.io mysqlusers.mysql.radondb.com
kubectl delete customresourcedefinitions.apiextensions.k8s.io backups.mysql.radondb.com
配置
容器配置
参数 | 描述 | 默认值 |
---|---|---|
MysqlVersion | MySQL 版本号 | 5.7 |
MysqlOpts.RootPassword | MySQL Root 用户密码 | "" |
MysqlOpts.User | 默认新建的 MySQL 用户名称 | radondb_usr |
MysqlOpts.Password | 默认新建的 MySQL 用户密码 | RadonDB@123 |
MysqlOpts.Database | 默认新建的 MySQL 数据库名称 | radondb |
MysqlOpts.InitTokuDB | 是否启用TokuDB | true |
MysqlOpts.MysqlConf | MySQL 配置 | - |
MysqlOpts.Resources | MySQL 容器配额 | 预留: cpu 100m, 内存 256Mi; 限制: cpu 500m, 内存 1Gi |
XenonOpts.Image | xenon(高可用组件)镜像 | radondb/xenon:1.1.5-alpha |
XenonOpts.AdmitDefeatHearbeatCount | 允许的最大心跳检测失败次数 | 5 |
XenonOpts.ElectionTimeout | 选举超时时间(单位为毫秒) | 10000ms |
XenonOpts.Resources | xenon 容器配额 | 预留: cpu 50m, 内存 128Mi; 限制: cpu 100m, 内存 256Mi |
MetricsOpts.Enabled | 是否启用 Metrics(监控)容器 | false |
MetricsOpts.Image | Metrics 容器镜像 | prom/mysqld-exporter:v0.12.1 |
MetricsOpts.Resources | Metrics 容器配额 | 预留: cpu 10m, 内存 32Mi; 限制: cpu 100m, 内存 128Mi |
节点配置
参数 | 描述 | 默认值 |
---|---|---|
Replicas | 集群节点数,只允许为0、2、3、5 | 3 |
PodPolicy.ImagePullPolicy | 镜像拉取策略, 只允许为 Always/IfNotPresent/Never | IfNotPresent |
PodPolicy.Labels | 节点 pod 标签 | - |
PodPolicy.Annotations | 节点 pod 注解 | - |
PodPolicy.Affinity | 节点 pod 亲和性 | - |
PodPolicy.PriorityClassName | 节点 pod 优先级对象名称 | - |
PodPolicy.Tolerations | 节点 pod 污点容忍度列表 | - |
PodPolicy.SchedulerName | 节点 pod 调度器名称 | - |
PodPolicy.ExtraResources | 节点容器配额(除 MySQL 和 Xenon 之外的容器) | 预留: cpu 10m, 内存 32Mi |
PodPolicy.SidecarImage | Sidecar 镜像 | radondb/mysql-sidecar:latest |
PodPolicy.BusyboxImage | Busybox 镜像 | busybox:1.32 |
PodPolicy.SlowLogTail | 是否开启慢日志跟踪 | false |
PodPolicy.AuditLogTail | 是否开启审计日志跟踪 | false |
持久化配置
参数 | 描述 | 默认值 |
---|---|---|
Persistence.Enabled | 是否启用持久化 | true |
Persistence.AccessModes | 存储卷访问模式 | ReadWriteOnce |
Persistence.StorageClass | 存储卷类型 | - |
Persistence.Size | 存储卷容量 | 10Gi |
参考
1. 标签
2. 注解
3. 亲和性
4. 优先级
5. 污点容忍度
6. 调度器
7. Deployments
8. CRD
目录 返回
首页