在 Google Cloud 上通过 Kubernetes 部署 TiDB 集群

本文介绍如何使用 TiDB Operator 在 Google Cloud 上部署 TiDB 集群。本教程需要在 Google Cloud Shell 上运行。

所包含的步骤如下:

  • 启动一个包含 3 个节点的 Kubernetes 集群(可选)
  • 部署 TiDB Operator 和 TiDB 集群
  • 访问 TiDB 集群
  • 扩容 TiDB 集群
  • 访问 Grafana 面板
  • 销毁 TiDB 集群
  • 删除 Kubernetes 集群(可选)

选择一个项目

本教程会启动一个包含 3 个 n1-standard-1 类型节点的 Kubernetes 集群。价格信息可以参考 All pricing

继续之前请选择一个项目:

启用 API

本教程需要使用计算和容器 API。继续之前请启用:

配置 gcloud

这一步配置 glcoud 默认访问你要用的项目和可用区,可以简化后面用到的命令:

gcloud config set project {{project-id}} && \ gcloud config set compute/zone us-west1-a

启动 3 个节点的 Kubernetes 集群

下面命令启动一个包含 3 个 n1-standard-1 类型节点的 Kubernetes 集群。

命令执行需要几分钟时间:

gcloud container clusters create tidb

集群启动完成后,将其设置为默认集群:

gcloud config set container/cluster tidb

最后验证 kubectl 可以访问集群并且 3 个节点正常运行:

kubectl get nodes

如果所有节点状态为 Ready,恭喜你,你已经成功搭建你的第一个 Kubernetes 集群。

安装 Helm

Helm 是一个 Kubernetes 的包管理工具。

  1. 安装 Helm 服务端

    curl https://raw.githubusercontent.com/helm/helm/master/scripts/get-helm-3 | bash
  2. 通过下面的命令添加仓库:

    helm repo add pingcap https://charts.pingcap.org/

部署 TiDB Operator

TiDB Operator 使用 Custom Resource Definition (CRD) 扩展 Kubernetes,所以要使用 TiDB Operator,必须先创建 TidbCluster 等各种自定义资源类型:

kubectl create -f https://raw.githubusercontent.com/pingcap/tidb-operator/v1.6.0/manifests/crd.yaml && \ kubectl get crd tidbclusters.pingcap.com

创建 TidbCluster 自定义资源类型后,接下来在 Kubernetes 集群上安装 TiDB Operator。

kubectl create namespace tidb-admin helm install --namespace tidb-admin tidb-operator pingcap/tidb-operator --version v1.6.0 kubectl get po -n tidb-admin -l app.kubernetes.io/name=tidb-operator

部署 TiDB 集群

通过下面命令部署 TiDB 集群:

  1. 创建 Namespace

    kubectl create namespace demo
  2. 部署 TiDB 集群:

    kubectl apply -f https://raw.githubusercontent.com/pingcap/tidb-operator/v1.6.0/examples/basic/tidb-cluster.yaml -n demo
  3. 部署 TiDB 集群监控:

    kubectl apply -f https://raw.githubusercontent.com/pingcap/tidb-operator/v1.6.0/examples/basic/tidb-monitor.yaml -n demo
  4. 通过下面命令查看 Pod 状态:

    kubectl get po -n demo

访问 TiDB 集群

从 pod 启动、运行到服务可以访问有一些延时,可以通过下面命令查看服务:

kubectl get svc -n demo --watch

如果看到 basic-tidb 出现,说明服务已经可以访问,可以 Ctrl+C 停止。

要访问 Kubernetes 集群中的 TiDB 服务,可以在 TiDB 服务和 Google Cloud Shell 之间建立一条隧道。建议这种方式只用于调试,因为如果 Google Cloud Shell 重启,隧道不会自动重新建立。要建立隧道:

kubectl -n demo port-forward svc/basic-tidb 4000:4000 &>/tmp/pf4000.log &

在 Cloud Shell 上运行:

sudo apt-get install -y mysql-client && \ mysql --comments -h 127.0.0.1 -u root -P 4000

在 MySQL 终端中输入一条 MySQL 命令:

select tidb_version();

如果安装的过程中没有指定密码,现在可以设置:

SET PASSWORD FOR 'root'@'%' = '<change-to-your-password>';

恭喜,你已经启动并运行一个兼容 MySQL 的分布式 TiDB 数据库!

扩容 TiDB 集群

使用 kubectl 修改集群所对应的 TidbCluster 对象中的 spec.pd.replicasspec.tidb.replicasspec.tikv.replicas 至期望值进行水平扩容。

kubectl -n demo patch tc basic --type merge -p '{"spec":{"pd":{"replicas":${pd_replicas}},"tikv":{"replicas":${tikv_replicas}},"tidb":{"replicas":${tidb_replicas}}}}'

访问 Grafana 面板

要访问 Grafana 面板,可以在 Grafana 服务和 shell 之间建立一条隧道,可以使用如下命令(Cloud Shell 占用了 3000 端口,我们选择 8080 做映射):

kubectl -n demo port-forward svc/basic-grafana 8080:3000 &>/tmp/pf8080.log &

在 Cloud Shell 中,点击右上方的 Web Preview 按钮并修改端口为 8080 后点击预览,将打开一个新的浏览器标签页访问 Grafana 面板。或者也可以在新浏览器标签或者窗口中直接访问 URL:https://ssh.cloud.google.com/devshell/proxy?port=8080

如果没有使用 Cloud Shell,可以在浏览器中访问 localhost:8080

默认用户名和密码为:admin / admin 。

销毁 TiDB 集群

要删除 TiDB 集群,执行以下命令:

kubectl delete tc basic -n demo

要删除监控组件,执行以下命令:

kubectl delete tidbmonitor basic -n demo

上面的命令只会删除运行的 Pod,但是数据还会保留。如果你不再需要那些数据,可以执行下面的命令清除数据和动态创建的持久化磁盘:

kubectl delete pvc -n demo -l app.kubernetes.io/instance=basic,app.kubernetes.io/managed-by=tidb-operator && \ kubectl get pv -l app.kubernetes.io/namespace=demo,app.kubernetes.io/managed-by=tidb-operator,app.kubernetes.io/instance=basic -o name | xargs -I {} kubectl patch {} -p '{"spec":{"persistentVolumeReclaimPolicy":"Delete"}}'

删除 Kubernetes 集群

实验结束后,可以使用如下命令删除 Kubernetes 集群:

gcloud container clusters delete tidb

文档内容是否有帮助?