部署 TiDB Operator
注意: ${chartVersion} 在后续文档中代表 chart 版本,例如 v1.0.0-rc.1
如果 K8s 集群启动并正常运行,可以通过 helm 添加 chart 仓库并安装 TiDB Operator。
- 添加 Helm chart 仓库
helm repo add pingcap http://charts.pingcap.org/ && \helm repo list && \helm repo update && \helm search tidb-cluster -l && \helm search tidb-operator -l
- 安装 TiDB Operator
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 正常运行
kubectl get pods --namespace tidb-admin -l app.kubernetes.io/instance=tidb-operator
部署本地卷
- 查看新磁盘
fdisk -l
- 参考 operations guide in sig-storage-local-static-provisioner,
tidb-operator启动会为pd和tikv绑定pv,需要在discovery directory下创建多个目录 - 格式化磁盘
sudo mkfs.ext4 /dev/sdb
- 挂载磁盘
DISK_UUID=$(blkid -s UUID -o value /dev/sdb)sudo mkdir -p /mnt/$DISK_UUIDsudo 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
- 创建多个目录并
mount到discovery 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 访问远程主机的服务。如果使用
kubectl1.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
