本文介绍如何在 Kubernetes 上部署 TiDB Operator。
TiDB Operator 部署前,请确认以下软件需求:
注意:
- 尽管 TiDB Operator 可以使用网络卷持久化 TiDB 数据,TiDB 数据自身会存多副本,再走额外的网络卷性能会受到很大影响。强烈建议搭建本地卷以提高性能。
- 跨多可用区的网络卷需要 Kubernetes v1.12 或者更高版本。在
tidb-backup
chart 配置中,建议使用网络卷存储备份数据。
TiDB Operator 运行在 Kubernetes 集群,你可以使用 Getting started 页面列出的任何一种方法搭建一套 Kubernetes 集群。只要保证 Kubernetes 版本大于等于 v1.12。如果你使用 AWS、GKE 或者本机,下面是快速上手教程:
如果你要使用不同环境,必须在 Kubernetes 集群中安装 DNS 插件。可以根据官方文档搭建 DNS 插件。
TiDB Operator 使用持久化卷持久化存储 TiDB 集群数据(包括数据库,监控和备份数据),所以 Kubernetes 集群必须提供至少一种持久化卷。为提高性能,建议使用本地 SSD 盘作为持久化卷。可以根据这一步自动配置本地持久化卷。
Kubernetes 集群建议启用 RBAC。否则,需要在 tidb-operator
和 tidb-cluster
chart 的 values.yaml
中设置 rbac.create
为 false
。
TiDB 默认会使用很多文件描述符,工作节点和上面的 Docker 进程的 ulimit
必须设置大于等于 1048576
:
设置工作节点的 ulimit
值,详情可以参考如何设置 ulimit
sudo vim /etc/security/limits.conf
设置 root 账号的 soft
和 hard
的 nofile
大于等于 1048576
设置 Docker 服务的 ulimit
sudo vim /etc/systemd/system/docker.service
设置 LimitNOFILE
大于等于 1048576
。
注意:
LimitNOFILE
需要显示设置为1048576
或者更大,而不是默认的infinity
,由于systemd
的 bug,infinity
在systemd
某些版本中指的是65536
。
参考 使用 Helm 安装 Helm 并配置 PingCAP 官方 chart 仓库。
参考本地 PV 配置在你的 Kubernetes 集群中配置本地持久化卷。
TiDB Operator 使用 CRD (Custom Resource Definition) 扩展 Kubernetes,所以要使用 TiDB Operator,必须先创建 TidbCluster
自定义资源类型。只需要在你的 Kubernetes 集群上创建一次即可:
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=<chart-version> > /home/tidb/tidb-operator/values-tidb-operator.yaml
注意:
<chart-version>
在后续文档中代表 chart 版本,例如v1.0.0
,可以通过helm search -l tidb-operator
查看当前支持的版本。
配置 TiDB Operator
TiDB Operator 里面会用到 k8s.gcr.io/kube-scheduler
镜像,如果下载不了该镜像,可以修改 /home/tidb/tidb-operator/values-tidb-operator.yaml
文件中的 scheduler.kubeSchedulerImageName
为 registry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler
。
安装 TiDB Operator
helm install pingcap/tidb-operator --name=tidb-operator --namespace=tidb-admin --version=<chart-version> -f /home/tidb/tidb-operator/values-tidb-operator.yaml && \
kubectl get po -n tidb-admin -l app.kubernetes.io/name=tidb-operator
通过修改 /home/tidb/tidb-operator/values-tidb-operator.yaml
中的配置自定义 TiDB Operator。后续文档使用 values.yaml
指代 /home/tidb/tidb-operator/values-tidb-operator.yaml
。
TiDB Operator 有两个组件:
这两个组件是无状态的,通过 Deployment
部署。你可以在 values.yaml
中自定义资源 limit
、request
和 replicas
。
修改为 values.yaml
后,执行下面命令使配置生效:
helm upgrade tidb-operator pingcap/tidb-operator --version=<chart-version> -f /home/tidb/tidb-operator/values-tidb-operator.yaml