容器化 | 在 Kubernetes 上部署 RadonDB MySQL 集群

3A网络
• 阅读 455

容器化 | 在 Kubernetes 上部署 RadonDB MySQL 集群

RadonDB MySQL 是一款基于 MySQL 的开源、高可用、云原生集群解决方案。支持一主多从高可用架构,并具备安全、自动备份、监控告警、自动扩容等全套管理功能。目前已经在生产环境中大规模的使用,包含银行、保险、传统大企业等。

RadonDB MySQL Kubernetes 支持在 Kubernetes 上安装部署和管理,自动执行与运行 RadonDB MySQL 集群有关的任务。

本教程主要演示如何使用 Git 和 Repo 命令行两种方式在 Kubernetes 上部署 RadonDB MySQL 集群。

部署准备

已准备可用 Kubernetes 集群。

方式一:通过 Git 部署

执行如下命令,将 RadonDB MySQL Chart 克隆到 Kubernetes 中。

$ git clone https://github.com/radondb/radondb-mysql-kubernetes.git

在 radondb-mysql-kubernetes 目录路径下,选择如下方式,部署 release 实例。

release 是运行在 Kubernetes 集群中的 Chart 的实例。通过命令方式部署,需指定 release 名称。

以下命令指定 release 名为 demo,将创建一个名为 demo-radondb-mysql 的有状态副本集。

  • 默认部署方式
<For Helm v3>
 cd charts/helm
 helm install demo .
  • 指定参数部署方式

helm install 时使用 --set key=value[,key=value],可指定参数部署。

以创建一个标准用户,且创建指定可访问数据库为例。用户名为 my-user、密码为 my-password、授权数据库为 my-database

cd charts/helm
helm install demo \
 --set mysql.mysqlUser=my-user,mysql.mysqlPassword=my-password,mysql.database=my-database .
  • 配置 yaml 参数方式

执行如下命令,可通过 value.yaml 配置文件,在安装时指定参数配置。

cd charts/helm
helm install demo -f values.yaml .

方式二:通过 repo 部署

添加并更新 helm 仓库。

$ helm repo add test https://charts.kubesphere.io/test
$ helm repo update

以下命令指定 release 名为 demo,将创建一个名为 demo-radondb-mysql 的有状态副本集。

$ helm install demo test/radondb-mysql
NAME: demo
LAST DEPLOYED: Wed Apr 28 08:08:15 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
The cluster is comprised of 3 pods: 1 leader and 2 followers. Each instance is accessible within the cluster through:
    <pod-name>.demo-radondb-mysql
To connect to your database:
1. Get mysql user `qingcloud`s password:
    kubectl get secret -n default demo-radondb-mysql -o jsonpath="{.data.mysql-password}" | base64 --decode; echo
2. Run an Ubuntu pod that you can use as a client:
    kubectl run ubuntu -n default --image=ubuntu:focal -it --rm --restart='Never' -- bash -il
3. Install the mysql client:
    apt-get update && apt-get install mysql-client -y
4. To connect to leader service in the Ubuntu pod:
    mysql -h demo-radondb-mysql-leader -u qingcloud -p
5. To connect to follower service (read-only) in the Ubuntu pod:
    mysql -h demo-radondb-mysql-follower -u qingcloud -p    

部署校验

集群创建成功后(博主都是部署在cnaaa服务器上的),默认将创建一个有状态副本集(StatefulSet ),以及三个用于访问节点的服务。

以默认部署为例,可获取如下资源信息,则集群部署成功。

$ kubectl get statefulset,svc
NAME                                  READY   AGE
statefulset.apps/demo-radondb-mysql   3/3     45m
NAME                                  TYPE        CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE
service/demo-radondb-mysql            ClusterIP   None            <none>        3306/TCP   45m
service/demo-radondb-mysql-follower   ClusterIP   10.96.84.254    <none>        3306/TCP   45m
service/demo-radondb-mysql-leader     ClusterIP   10.96.178.195   <none>        3306/TCP   45m

连接 RadonDB MySQL

您需要准备一个用于连接 MySQL 的客户端。

与客户端在同一 NameSpace 中

当客户端与 RadonDB MySQL 集群在同一个 NameSpace 中时,可使用 leader/follower service 名称代替具体的 IP 和端口。

  • 连接主节点 (读写节点)。
$ mysql -h <leader service 名称> -u <用户名> -p
用户名为 `radondb_mysql`,release 名为 `demo` ,连接示例如下:
$ mysql -h demo-radondb-mysql-leader -u radondb_mysql -p
  • 连接从节点 (只读节点)。
$ mysql -h <follower service 名称> -u <用户名> -p

用户名为 radondb_mysql,release 名为 demo ,连接示例如下:

$ mysql -h demo-radondb-mysql-follower -u qradondb_mysql-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。

  • 连接节点。
$ mysql -h <pod IP/服务 ClusterIP> -u <用户名> -p

用户名为 radondb_mysql,pod IP 为 10.10.128.136 ,连接示例如下:

$ mysql -h 10.10.128.136 -u radondb_mysql -p

持久化

MySQL 镜像在容器路径 /var/lib/mysql 中存储 MySQL 数据和配置。

默认情况下,会创建一个 PVC 并将其挂载到指定目录中。 若想禁用此功能,您可以更改 values.yaml 禁用持久化,改用 emptyDir。

当 Pod 分配给节点后,将首先创建一个 emptyDir 卷,只要 Pod 在节点上持续运行,则存储卷便持续存在;当 Pod 节点中删除时 ,emptyDir 中的数据也将被永久删除。

注意

  • PVC 中可以使用不同特性的持久卷(PersistentVolume,PV),其 I/O 性能会影响数据库的初始化性能。所以当使用 PVC 启用持久化存储时,可能需要调整 livenessProbe.initialDelaySeconds 的值。
  • 数据库初始化的默认限制是 60 秒 (livenessProbe.initialDelaySeconds + livenessProbe.periodSeconds * livenessProbe.failureThreshold)。如果初始化时间超过限制,kubelet 将重启数据库容器,数据库初始化被中断,会导致持久数据不可用。

自定义 MySQL 配置

mysql.configFiles 中添加 / 更改 MySQL 配置。

configFiles:
   node.cnf: |
    [mysqld]
    default_storage_engine=InnoDB
    max_connections=65535

    # custom mysql configuration.
    expire_logs_days=7
点赞
收藏
评论区
推荐文章
爱库里 爱库里
3年前
Kubernetes笔记:十分钟部署一套K8s环境
Kubernetes是Goole开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理——百度百科。接触K8s也有半年多了,也基于阿里云平台搭建了包含多级服务、目前运行较为稳定的K8s集群(感兴趣的可参考\k8s云集群混搭模式,可能帮你节省50%以上的服务成本\,\k8s云集群混搭模式落地分享\,但一直没来得及对其进行系统
Stella981 Stella981
3年前
Minikube之Win10单机部署
Kubernetes(k8s)是自动化容器操作的开源平台,基于这个平台,你可以进行容器部署,资源调度和集群扩容等操作。如果你曾经用过Docker部署容器,那么可以将Docker看成Kubernetes底层使用的组件,Kubernetes是Docker的上层封装,通过它可以很方便的进行Docker集群的管理。今天我们使用minikube在单机上进行Kubern
Stella981 Stella981
3年前
KubeSphere DevOps 初体验,内置 Jenkins 引擎
KubeSphere是在Kubernetes之上构建的以应用为中心的多租户容器平台,提供全栈的IT自动化运维的能力,简化企业的DevOps工作流。KubeSphere提供了运维友好的向导式操作界面,帮助企业快速构建一个强大和功能丰富的容器云平台。KubeSphere支持部署在任何基础设施环境,提供在线与离线安装,支持一键升级与扩容集群,并且
Stella981 Stella981
3年前
Rancher 2.4.3
一、概述对于生产环境,需以高可用的配置安装Rancher,确保用户始终可以访问RancherServer。当安装在Kubernetes集群中时,Rancher将与集群的etcd集成,并利用Kubernetes调度实现高可用。为确保高可用,本文所部署的Kubernetes集群将专用于运行Rancher,Rancher运行
Stella981 Stella981
3年前
Rancher 2.2.2
对于生产环境,需以高可用的配置安装Rancher,确保用户始终可以访问RancherServer。当安装在Kubernetes集群中时,Rancher将与集群的etcd集成,并利用Kubernetes调度实现高可用。为确保高可用,本文所部署的Kubernetes集群将专用于运行Rancher,Rancher运行起来后,可再创建或导入
Stella981 Stella981
3年前
Kubernetes(K8S)
一、简介  Kubernetes是Google公司在2014年6月开源的一个容器集群管理系统,使用Go语言开发,也叫K8S。Kubernetes的目标是让部署容器化的应用简单并且高效,Kubernetes提供了应用部署,规划,更新,维护的一种机制。Kubernetes一个核心的特点就是能够自主的管理容器来保证云平台中的容器按照用户的期望状态运行着
Stella981 Stella981
3年前
K8s(7)
仪表板是基于Web的Kubernetes用户界面。您可以使用仪表板将容器化应用程序部署到Kubernetes集群,对容器化应用程序进行故障排除,以及管理集群资源。您可以使用仪表板来概述群集上运行的应用程序,以及创建或修改单个Kubernetes资源(例如部署,作业,守护进程等)。例如,您可以使用部署向导扩展部署,启动滚动更新,重新启动Pod或部署新应用程序
可莉 可莉
3年前
15分钟在阿里云Kubernetes服务上快速建立Jenkins X Platform并运用GitOps管理应用发布
本文主要介绍如何在阿里云容器服务Kubernetes上快速安装部署JenkinsXPlatform并结合demo实践演示GitOps的操作流程。注意:本文中使用的jx工具、cloudenvironments等做过改造用以适配阿里云Kubernetes容器服务,并未在自建Kubernetes集群中做过验证。先决条件:首先,