TiDB简介
TiDB 是 PingCAP 公司自主设计、研发的开源分布式关系型数据库,具备水平扩容或者缩容、金融级高可用、实时 HTAP、云原生的分布式数据库、兼容 MySQL 5.7 协议和 MySQL 生态等重要特性。TiDB 适合高可用、强一致要求较高、数据规模较大等各种应用场景。

kubeSphere简介
KubeSphere 是在 Kubernetes 之上构建的以应用为中心的多租户容器平台,完全开源,支持多云与多集群管理,提供全栈的 IT 自动化运维的能力,简化企业的 DevOps 工作流。KubeSphere 提供了运维友好的向导式操作界面,帮助企业快速构建一个强大和功能丰富的容器云平台。

部署环境准备
KubeSphere是青云开源的容器平台,除了支持在本地kubernetes集群独立部署外,青云公有云上也支持一键部署kubesphere,并且与开源版本相比操作界面和功能体验完全一致。
下面以在青云环境快速启用容器平台为例部署tidb分布式数据库,至少需要准备3个可调度的node节点。
登录青云控制台:https://console.qingcloud.com/
点击左侧容器平台,选择KubeSphere,点击创建并选择合适的集群规格:

创建完成后登录到kubesphere管理界面:

点击下方的kubectl集群客户端命令行工具,连接到命令行界面;
执行以下命令安装TiDB Operator CRD:
kubectl apply -f https://raw.githubusercontent.com/pingcap/tidb-operator/v1.1.6/manifests/crd.yaml
执行结果如下:

点击左上角平台管理,选择访问控制,新建企业空间,这里命名为dev-workspace

进入企业空间,选择应用仓库,添加仓库

将pingcap官方helm仓库添加到容器平台,地址如下:
https://charts.pingcap.org
添加方式如下:

部署tidb-operator
参考:https://github.com/pingcap/docs-tidb-operator/blob/master/zh/get-started.md
首选创建项目(namespace)用于运行tidb集群:

创建完成后点击进入项目,选择应用,部署新应用

选择来自应用模板:

切换到pingcap,该仓库包含了多个helm chart,当前主要部署tidb-operator和tidb-cluster,其他为辅助工具,可自行视情况部署。

点击tidb-operator进入chat,点击配置文件可查看或下载默认的values.yaml,选择版本,点击部署:

配置应用名称并选择应用版本,确认应用部署位置:

继续下一步,该步骤可以直接编辑values.yaml文件,自定义配置,当前默认即可:

点击部署,等待应用状态变为活跃:

点击工作负载(deployment),查看tidb-operator部署了2个deployment类型资源:

部署tidb-cluster
tidb-operator部署完成后可以继续部署tidb-cluster。
与部署tidb-operator操作相同,选择左侧应用,点击tidb-cluster:

切换到配置文件,选择版本,下载values.yaml到本地:

TiDB cluster中部分组件需要持久存储卷,青云平台提供了以下类型storageclass:
/ # kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
csi-high-capacity-legacy csi-qingcloud Delete Immediate true 101m
csi-high-perf csi-qingcloud Delete Immediate true 101m
csi-ssd-enterprise csi-qingcloud Delete Immediate true 101m
csi-standard (default) csi-qingcloud Delete Immediate true 101m
csi-super-high-perf csi-qingcloud Delete Immediate true 101m
这里选择csi-standard类型,values.yaml中的storageClassName字段默认配置为local-storage。
在下载的yaml文件中直接替换所有的local-storage字段为csi-standard,。
在最后一步使用修改后的values.yaml覆盖应用配置文本框中的内容,当然也可以手动编辑配置文件逐个替换:

这里仅修改storageClassName字段用于引用外部持久存储,如果需要将tidb、tikv或pd组件调度到独立节点,可参考nodeAffinity相关参数进行修改。
点击部署,将tidb cluster部署到容器平台,最终在应用列表中可以看到如下2个应用:

查看tidb集群状态
tidb集群部署后需要一定时间完成初始化,选择工作负载,查看无状态应用:

查看有状态副本集(statefulset),其中tidb、tikv和pd都为有状态应用:

查看tidb负载情况:

查看tikv负载情况:

查看容器组(pod),tidb集群包含了3个pd、2个tidb以及3个tikv:

点击存储管理,查看存储卷,其中tikv和pd这2个组件使用了持久存储:

查看某个存储卷用量信息,以tikv为例:

tidb-cluster项目中资源用量排行:

访问tidb集群
点击左侧服务,查看tibd集群创建和暴露的服务信息

其中tidb 4000端口绑定的服务类型为nodeport,直接可以在集群外通过nodeIP访问.
测试使用mysql客户端连接数据库
[root@k8s-master1 ~]# docker run -it --rm mysql bash
[root@0d7cf9d2173e:/# mysql -h 192.168.1.102 -P 32682 -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 201
Server version: 5.7.25-TiDB-v4.0.6 TiDB Server (Apache License 2.0) Community Edition, MySQL 5.7 compatible
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| INFORMATION_SCHEMA |
| METRICS_SCHEMA |
| PERFORMANCE_SCHEMA |
| mysql |
| test |
+--------------------+
5 rows in set (0.01 sec)
mysql>
另外tidb 自带了prometheus和grafana,用于数据库集群的性能监控,可以看到grafana的serivce 3000端口同样绑定了nodeport端口;
访问grafana UI,查看某个指标:

上传TiDB到应用商店
添加公网 helm 仓库到kubesphere容器平台适合有外网访问权限的情况,kubesphere也支持上传打包后的helm chat配置文件。
安装helm工具
version=v3.3.1
curl -LO https://repo.huaweicloud.com/helm/${version}/helm-${version}-linux-amd64.tar.gz
tar -zxvf helm-${version}-linux-amd64.tar.gz
mv linux-amd64/helm /usr/local/bin/helm && rm -rf linux-amd64
添加pingcap tidb helm仓库
helm repo add pingcap https://charts.pingcap.org/
查看helm仓库包含的组件
# helm search repo pingcap --version=v1.1.6
NAME CHART VERSION APP VERSION DESCRIPTION
pingcap/tidb-backup v1.1.6 A Helm chart for TiDB Backup or Restore
pingcap/tidb-cluster v1.1.6 A Helm chart for TiDB Cluster
pingcap/tidb-drainer v1.1.6 A Helm chart for TiDB Binlog drainer.
pingcap/tidb-lightning v1.1.6 A Helm chart for TiDB Lightning
pingcap/tidb-operator v1.1.6 v1.1.6 tidb-operator Helm chart for Kubernetes
pingcap/tikv-importer release-1.1 A Helm chart for TiKV Importer
下载需要的chats到本地:
helm pull pingcap/tidb-operator --version=v1.1.6
helm pull pingcap/tidb-cluster --version=v1.1.6
查看拉取到本地的helm chart:
# ls | grep tidb
tidb-cluster-v1.1.6.tgz
tidb-operator-v1.1.6.tgz
登录kubesphere web console,点击工作台,选择访问控制,进入企业空间,选择应用管理,应用模板,上传模板:

上传完成后如下图:

此时在选择应用部署时选择来自企业空间即可,部署方式与导入helm仓库一致:

手动上传的helm chat 还支持发布到应用商店,共享给其他企业空间或项目使用,流程如下:
点击应用模板,选择tidb应用,展开后点击提交审核:

切换到管理员用户,点击左上角平台管理,应用商店管理

选择应用审核,选择右侧审核通过:

再次回到普通用户,选择应用模板,进入tidb应用,展开发现此时应用可以发布到商店

发布后点击左上角应用商店,在应用商店中即可看到上架的tidb应用:

备注:
TiDB可以结合kubesphere多集群联邦功能,部署应用时可一键分发tidb组件副本到不同集群,实现跨集群、跨区域高可用。