在阿里云上部署 TiDB Operator 和 TiDB 集群
aliyun-cli >= 3.0.15 并且
kubectl >= 1.12
- >= 2.9.1 且 <= 2.11.0
- jq >= 1.6
- 0.11.*
你可以使用阿里云的云命令行服务来进行操作,云命令行中已经预装并配置好了所有工具。
完整部署集群需要具备以下权限:
- AliyunESSFullAccess
- AliyunVPCFullAccess
- AliyunSLBFullAccess
- AliyunCSFullAccess
- AliyunEIPFullAccess
- AliyunECIFullAccess
- AliyunVPNGatewayFullAccess
- AliyunNATGatewayFullAccess
概览
默认配置下,会创建:
- 一个新的 VPC
- 一台 ECS 实例作为堡垒机
- 一个托管版 ACK(阿里云 Kubernetes)集群以及一系列 worker 节点:
- 属于一个伸缩组的 2 台 ECS 实例(2 核 2G)托管版 Kubernetes 的默认伸缩组中必须至少有两台实例,用于承载整个的系统服务,例如 CoreDNS
- 属于一个伸缩组的 3 台 实例,用于部署 PD
- 属于一个伸缩组的 3 台
ecs.i2.2xlarge
实例,用于部署 TiKV - 属于一个伸缩组的 2 台 ECS 实例(16 核 32G)用于部署 TiDB
- 属于一个伸缩组的 1 台 ECS 实例(4 核 8G)用于部署监控组件
除了默认伸缩组之外的其它所有实例都是跨可用区部署的。而伸缩组 (Auto-scaling Group) 能够保证集群的健康实例数等于期望数值。因此,当发生节点故障甚至可用区故障时,伸缩组能够自动为我们创建新实例来确保服务可用性。
安装部署
设置目标 Region 和阿里云密钥(也可以在运行
terraform
命令时根据命令提示输入):用于部署集群的各变量的默认值存储在
variables.tf
文件中,如需定制可以修改此文件或在安装时通过-var
参数覆盖。-
$ git clone --depth=1 https://github.com/pingcap/tidb-operator
$ cd tidb-operator/deploy/aliyun
$ terraform init
$ terraform apply
假如在运行
terraform apply
时出现报错,可根据报错信息(例如缺少权限)进行修复后再次运行terraform apply
。整个安装过程大约需要 5 至 10 分钟,安装完成后会输出集群的关键信息(想要重新查看这些信息,可以运行
terraform output
): 用
kubectl
或 对集群进行操作(其中cluster_name
默认值为tidb-cluster
):$ export KUBECONFIG=$PWD/credentials/kubeconfig_<cluster_name>
$ kubectl version
$ helm ls
通过堡垒机可连接 TiDB 集群进行测试,相关信息在安装完成后的输出中均可找到:
监控
访问 <monitor_endpoint>
就可以查看相关的 Grafana 大盘。相关信息可在安装完成后的输出中找到。默认帐号密码为:
- 用户名:admin
- 密码:admin
升级 TiDB 集群
设置 variables.tf
中的 tidb_version
参数,并再次运行 terraform apply
即可完成升级。
升级操作可能会执行较长时间,可以通过以下命令来持续观察进度:
kubectl get pods --namespace tidb -o wide --watch
按需修改 中的 tikv_count
和 tidb_count
数值,再次运行 terraform apply
即可完成 TiDB 集群的水平伸缩。
销毁集群
$ terraform state list
$ terraform state rm module.ack.alicloud_cs_managed_kubernetes.k8s
销毁集群操作需要执行较长时间。
自定义集群
默认配置下,Terraform 脚本会创建一个新的 VPC,假如要使用现有的 VPC,可以在 variable.tf
中设置 vpc_id
。注意,当使用现有 VPC 时,没有设置 vswitch 的可用区将不会部署 Kubernetes 节点。
出于安全考虑,TiDB 服务的 SLB 只对内网暴露,因此默认配置下还会创建一台堡垒机用于运维操作。堡垒机上还会安装 mysql-cli 和 sysbench 以便于使用和测试。假如不需要堡垒机,可以设置 variables.tf
中的 create_bastion
参数来关闭。
实例的规格可以通过两种方式进行定义:
- 通过声明实例规格名;
由于阿里云在不同地域会提供不同的规格类型,并且部分规格有售罄的情况,我们推荐使用第二种办法来定义更通用的实例规格。你可以在 variables.tf
中找到相关的配置项。
特殊地,由于 PD 和 TiKV 节点强需求本地 SSD 存储,脚本中不允许直接声明 PD 和 TiKV 的规格名,你可以通过设置 *_instance_type_family
来选择 PD 或 TiKV 的规格族(只能在三个拥有本地 SSD 的规格族中选择),再通过内存大小来筛选符合需求的型号。
更多自定义配置相关的内容,请直接参考项目中的 variables.tf
文件。
目前,pod cidr,service cid 和节点型号等配置在集群创建后均无法修改。