在 Minikube 集群上部署 TiDB 集群
Minikube 可以让你在个人电脑上的虚拟机中创建一个 Kubernetes 集群,支持 macOS、Linux 和 Windows 系统。本文介绍如何在 Minikube 集群上部署 TiDB 集群。
警告:
对于生产环境,不要使用此方式进行部署。
尽管 Minikube 支持通过
--vm-driver=none
选项使用主机 Docker 而不使用虚拟机,但是目前尚没有针对 TiDB Operator 做过全面的测试,可能会无法正常工作。如果你想在不支持虚拟化的系统(例如,VPS)上试用 TiDB Operator,可以考虑使用 kind。
安装 Minikube 并启动 Kubernetes 集群
参考安装 Minikube,在你的机器上安装 Minikube 1.0.0+。
安装完 Minikube 后,可以执行下面命令启动一个 Kubernetes 集群:
minikube start
对于中国大陆用户,可以使用国内 gcr.io mirror 仓库,例如 registry.cn-hangzhou.aliyuncs.com/google_containers
。
minikube start --image-repository registry.cn-hangzhou.aliyuncs.com/google_containers
或者给 Docker 配置 HTTP/HTTPS 代理。
将下面命令中的 127.0.0.1:1086
替换为你自己的 HTTP/HTTPS 代理地址:
minikube start --docker-env https_proxy=http://127.0.0.1:1086 \
--docker-env http_proxy=http://127.0.0.1:1086
注意:
由于 Minikube 通过虚拟机(默认)运行,
127.0.0.1
是虚拟机本身,有些情况下你可能想要使用你的主机的实际 IP。
参考 Minikube setup 查看配置虚拟机和 Kubernetes 集群的更多选项。
安装 kubectl 并访问集群
Kubernetes 命令行工具 kubectl,可以让你执行命令访问 Kubernetes 集群。
参考 Install and Set Up kubectl 安装和配置 kubectl。
kubectl 安装完成后,测试 Minikube Kubernetes 集群:
kubectl cluster-info
安装 Helm
Helm 是一个 Kubernetes 的包管理工具,确保安装的 Helm 版本为 >= 2.11.0 && < 3.0.0 && != 2.16.4。安装步骤如下:
- 参考官方文档安装 Helm 客户端
安装 Helm 服务端
在集群中应用 Helm 服务端组件
tiller
所需的RBAC
规则,并安装tiller
:kubectl apply -f https://raw.githubusercontent.com/pingcap/tidb-operator/master/manifests/tiller-rbac.yaml && \
helm init --service-account=tiller --upgrade
通过下面命令确认
tiller
Pod 进入 running 状态:kubectl get po -n kube-system -l name=tiller
通过下面的命令添加仓库:
helm repo add pingcap https://charts.pingcap.org/
添加完成后,可以使用
helm search
搜索 PingCAP 提供的 chart:helm search pingcap -l
部署 TiDB Operator
TiDB Operator 使用 CRD (Custom Resource Definition) 扩展 Kubernetes,所以要使用 TiDB Operator,必须先创建 TidbCluster
等各种自定义资源类型:
kubectl apply -f https://raw.githubusercontent.com/pingcap/tidb-operator/master/manifests/crd.yaml && \
kubectl get crd tidbclusters.pingcap.com
创建 TidbCluster
自定义资源类型后,接下来在 Kubernetes 集群上安装 TiDB Operator。
获取你要安装的
tidb-operator
chart 中的values.yaml
文件:mkdir -p /home/tidb/tidb-operator && \
helm inspect values pingcap/tidb-operator --version=v1.1.0-rc.1 > /home/tidb/tidb-operator/values-tidb-operator.yaml
按需修改
values.yaml
文件中的配置。安装 TiDB Operator
helm install pingcap/tidb-operator --name=tidb-operator --namespace=tidb-admin --version=v1.1.0-rc.1 -f /home/tidb/tidb-operator/values-tidb-operator.yaml && \
kubectl get po -n tidb-admin -l app.kubernetes.io/name=tidb-operator
部署 TiDB 集群
通过下面命令部署 TiDB 集群:
创建
Namespace
:kubectl create namespace demo
部署 TiDB 集群:
kubectl apply -f https://raw.githubusercontent.com/pingcap/tidb-operator/master/examples/basic/tidb-cluster.yaml -n demo
部署 TiDB 集群监控:
kubectl apply -f https://raw.githubusercontent.com/pingcap/tidb-operator/master/examples/basic/tidb-monitor.yaml -n demo
通过下面命令查看 Pod 状态:
kubectl get po -n demo
测试 TiDB 集群
测试 TiDB 集群之前,请确保已经安装 MySQL 客户端。从 Pod 启动、运行到服务可以访问有一些延时,可以通过下面命令查看服务:
kubectl get svc -n demo --watch
如果看到 basic-tidb
出现,说明服务已经可以访问,可以 Ctrl+C 停止。
按照以下步骤访问 TiDB 集群:
转发本地端口到 TiDB 端口。
kubectl -n demo port-forward svc/basic-tidb 4000:4000
在另一个终端窗口中,通过 MySQL 客户端访问 TiDB:
mysql -h 127.0.0.1 -P 4000 -uroot
或者可以直接执行 SQL 命令:
mysql -h 127.0.0.1 -P 4000 -uroot -e 'select tidb_version();'
监控 TiDB 集群
按照以下步骤监控 TiDB 集群状态:
转发本地端口到 Grafana 端口。
kubectl -n demo port-forward svc/basic-grafana 3000:3000
打开浏览器,通过
http://localhost:3000
访问 Grafana。或者,Minikube 提供了
minikube service
的方式暴露 Grafana 服务,可以更方便的接入。minikube service basic-grafana -n demo
上述命令会自动搭建代理并在浏览器中打开 Grafana。
删除 TiDB 集群
要删除 TiDB 集群,执行以下命令:
kubectl delete tc basic -n demo
要删除监控组件,执行以下命令:
kubectl delete tidbmonitor basic -n demo
更新 demo 集群使用的 PV 的 reclaim 策略为 Delete:
kubectl get pv -l app.kubernetes.io/instance=basic -o name | xargs -I {} kubectl patch {} -p '{"spec":{"persistentVolumeReclaimPolicy":"Delete"}}'
删除 PVC:
kubectl delete pvc -l app.kubernetes.io/managed-by=tidb-operator
FAQ
Minikube 上的 TiDB 集群不响应或者响应非常慢
Minikube 虚拟机默认配置为 2048 MB 内存和 2 个 CPU。可以在 minikube start
时通过--memory
和 --cpus
选项为其分配更多资源。注意,为了使配置修改生效,你需要重新创建 Minikube 虚拟机。
minikube delete && \
minikube start --cpus 4 --memory 4096 ...