部署 TiDB Operator

注意: ${chartVersion} 在后续文档中代表 chart 版本,例如 v1.0.0-rc.1

如果 K8s 集群启动并正常运行,可以通过 helm 添加 chart 仓库并安装 TiDB Operator。

  • 添加 Helm chart 仓库
  1. helm repo add pingcap http://charts.pingcap.org/ && \
  2. helm repo list && \
  3. helm repo update && \
  4. helm search tidb-cluster -l && \
  5. helm search tidb-operator -l
  • 安装 TiDB Operator
  1. helm install charts/tidb-operator --name=tidb-operator --namespace=tidb-admin --set scheduler.kubeSchedulerImageName=registry.aliyuncs.com/google_containers/kube-scheduler --version=v1.0.0
  • 等待几分钟确保 TiDB Operator 正常运行
  1. kubectl get pods --namespace tidb-admin -l app.kubernetes.io/instance=tidb-operator

部署本地卷

  • 查看新磁盘
  1. fdisk -l
  1. sudo mkfs.ext4 /dev/sdb
  • 挂载磁盘
  1. DISK_UUID=$(blkid -s UUID -o value /dev/sdb)
  2. sudo mkdir -p /mnt/$DISK_UUID
  3. sudo mount -t ext4 /dev/sdb /mnt/$DISK_UUID
  • /etc/fstab 持久化 mount
echo UUID=`sudo blkid -s UUID -o value /dev/sdb` /mnt/$DISK_UUID ext4 defaults 0 2 | sudo tee -a /etc/fstab
  • 创建多个目录并 mountdiscovery directory
for i in $(seq 1 10); do
  sudo mkdir -p /mnt/${DISK_UUID}/vol${i} /mnt/disks/${DISK_UUID}_vol${i}
  sudo mount --bind /mnt/${DISK_UUID}/vol${i} /mnt/disks/${DISK_UUID}_vol${i}
done
  • /etc/fstab 自动挂载
for i in $(seq 1 10); do
  echo /mnt/${DISK_UUID}/vol${i} /mnt/disks/${DISK_UUID}_vol${i} none bind 0 0 | sudo tee -a /etc/fstab
done
  • tidb-operator 创建 local-volume-provisioner
kubectl apply -f manifests/local-dind/local-volume-provisioner.yaml
kubectl get po -n kube-system -l app=local-volume-provisioner
kubectl get pv --all-namespaces | grep local-storage

部署 TiDB Cluster

  • 通过 helm 和 TiDB Operator,我们可以很轻松的部署一套 TiDB 集群
helm install charts/tidb-cluster --name=tidb-cluster --namespace=tidb --version=v1.0.0
  • 等待几分钟,确保 TiDB 所有组件正常创建并进入 ready 状态,可以通过下面命令持续观察
watch kubectl get pods --namespace tidb -l app.kubernetes.io/instance=tidb-cluster -o wide
  • 获取集群信息
kubectl get tidbcluster -n tidb
kubectl get statefulset -n tidb
kubectl get service -n tidb
kubectl get configmap -n tidb
kubectl get pod -n tidb

访问数据库

通过 kubectl port-forward 暴露服务到主机,可以访问 TiDB 集群。命令中的端口格式为:<主机端口>:<k8s 服务端口>

注意: 如果你不是在本地 PC 而是在远程主机上部署的 DinD 环境,可能无法通过 localhost 访问远程主机的服务。如果使用 kubectl 1.13 或者更高版本,可以在执行 kubectl port-forward 命令时添加 --address 0.0.0.0 选项,在 0.0.0.0 暴露端口而不是默认的 127.0.0.1

kubectl port-forward svc/tidb-cluster-tidb 4000:4000 --namespace=tidb --address 0.0.0.0
  • 版本:MySQL 5.7.25
  • 账号:root
  • 密码:空

注意: 目前 TiDB 只支持 MySQL5.7 版本客户端 8.0 会报 ERROR 1105 (HY000): Unknown charset id 255

查看监控面板

使用 kubectl 暴露 Grafana 服务端口

kubectl port-forward svc/tidb-cluster-grafana 3000:3000 --namespace=tidb --address 0.0.0.0

在浏览器中打开 http://192.168.141.110:3000 访问 Grafana 监控面板

  • 账号:admin
  • 密码:admin

销毁 TiDB Cluster

测试结束后,使用如下命令销毁 TiDB 集群

helm delete tidb-cluster --purge

注意: 上述命令只是删除运行的 Pod,数据仍然会保留。

如果你不再需要那些数据,可以通过下面命令清除数据(这将永久删除数据

kubectl get pv -l app.kubernetes.io/namespace=tidb -o name | xargs -I {} kubectl patch {} -p '{"spec":{"persistentVolumeReclaimPolicy":"Delete"}}' && \
kubectl delete pvc --namespace tidb --all