在 Kubernetes 上部署 TiDB Operator

本文介绍如何在 Kubernetes 上部署 TiDB Operator。

准备环境

TiDB Operator 部署前,请确认以下软件需求:

部署 Kubernetes 集群

TiDB Operator 运行在 Kubernetes 集群,你可以使用 Getting started 页面列出的任何一种方法搭建一套 Kubernetes 集群。只要保证 Kubernetes 版本大于等于 v1.12。若想创建一个简单集群测试,可以参考快速上手教程

对于部分公有云环境,可以参考如下文档部署 TiDB Operator 及 TiDB 集群:

TiDB Operator 使用持久化卷持久化存储 TiDB 集群数据(包括数据库,监控和备份数据),所以 Kubernetes 集群必须提供至少一种持久化卷。为提高性能,建议使用本地 SSD 盘作为持久化卷。可以根据这一步配置本地持久化卷。

Kubernetes 集群建议启用 RBAC

安装 Helm

参考 使用 Helm 安装 Helm 并配置 PingCAP 官方 chart 仓库。

配置本地持久化卷

参考本地 PV 配置在你的 Kubernetes 集群中配置本地持久化卷。

部署 TiDB Operator

创建 CRD

TiDB Operator 使用 Custom Resource Definition (CRD) 扩展 Kubernetes,所以要使用 TiDB Operator,必须先创建 TidbCluster 自定义资源类型。只需要在你的 Kubernetes 集群上创建一次即可:

  1. kubectl apply -f https://raw.githubusercontent.com/pingcap/tidb-operator/master/manifests/crd.yaml

如果服务器没有外网,需要先用有外网的机器下载 crd.yaml 文件,然后再进行安装:

  1. wget https://raw.githubusercontent.com/pingcap/tidb-operator/master/manifests/crd.yaml
  2. kubectl apply -f ./crd.yaml

如果显示如下信息表示 CRD 安装成功:

  1. kubectl get crd
  1. NAME CREATED AT
  2. backups.pingcap.com 2020-06-11T07:59:40Z
  3. backupschedules.pingcap.com 2020-06-11T07:59:41Z
  4. restores.pingcap.com 2020-06-11T07:59:40Z
  5. tidbclusterautoscalers.pingcap.com 2020-06-11T07:59:42Z
  6. tidbclusters.pingcap.com 2020-06-11T07:59:38Z
  7. tidbinitializers.pingcap.com 2020-06-11T07:59:42Z
  8. tidbmonitors.pingcap.com 2020-06-11T07:59:41Z

自定义部署 TiDB Operator

若需要快速部署 TiDB Operator,可参考快速上手中部署 TiDB Operator文档。本节介绍自定义部署 TiDB Operator 的配置方式。

创建 CRDs 之后,在 Kubernetes 集群上部署 TiDB Operator有两种方式:在线和离线部署。

在线部署 TiDB Operator

  1. 获取你要部署的 tidb-operator chart 中的 values.yaml 文件:

    1. mkdir -p ${HOME}/tidb-operator && \
    2. helm inspect values pingcap/tidb-operator --version=${chart_version} > ${HOME}/tidb-operator/values-tidb-operator.yaml

    注意:

    ${chart_version} 在后续文档中代表 chart 版本,例如 v1.2.4,可以通过 helm search repo -l tidb-operator 查看当前支持的版本。

  2. 配置 TiDB Operator

    TiDB Operator 里面会用到 k8s.gcr.io/kube-scheduler 镜像,如果无法下载该镜像,可以修改 ${HOME}/tidb-operator/values-tidb-operator.yaml 文件中的 scheduler.kubeSchedulerImageNameregistry.cn-hangzhou.aliyuncs.com/google_containers/kube-scheduler

    TiDB Operator 默认会管理 Kubernetes 集群中的所有 TiDB 集群,如仅需其管理特定 namespace 下的集群,则可在 values.yaml 中设置 clusterScoped: false

    注意:

    在设置 clusterScoped: false 后,TiDB Operator 默认仍会操作 Kubernetes 集群中的 Nodes、Persistent Volumes 与 Storage Classes。若部署 TiDB Operator 的角色不具备这些资源的操作权限,则可以将 controllerManager.clusterPermissions 下的相应权限请求设置为 false 以禁用 TiDB Operator 对这些资源的操作。

    其他项目例如:limitsrequestsreplicas,请根据需要进行修改。

  3. 部署 TiDB Operator

    1. helm install tidb-operator pingcap/tidb-operator --namespace=tidb-admin --version=${chart_version} -f ${HOME}/tidb-operator/values-tidb-operator.yaml && \
    2. kubectl get po -n tidb-admin -l app.kubernetes.io/name=tidb-operator

    注意:

    如果对应 tidb-admin namespace 不存在,则可先使用 kubectl create namespace tidb-admin 创建该 namespace。

  4. 升级 TiDB Operator

    如果需要升级 TiDB Operator,请先修改 ${HOME}/tidb-operator/values-tidb-operator.yaml 文件,然后执行下面的命令进行升级:

    1. helm upgrade tidb-operator pingcap/tidb-operator --namespace=tidb-admin -f ${HOME}/tidb-operator/values-tidb-operator.yaml

离线安装 TiDB Operator

如果服务器没有外网,需要按照下面的步骤来离线安装 TiDB Operator:

  1. 下载 tidb-operator chart

    如果服务器上没有外网,就无法通过配置 Helm repo 来安装 TiDB Operator 组件以及其他应用。这时,需要在有外网的机器上下载集群安装需用到的 chart 文件,再拷贝到服务器上。

    通过以下命令,下载 tidb-operator chart 文件:

    1. wget http://charts.pingcap.org/tidb-operator-v1.2.4.tgz

    tidb-operator-v1.2.4.tgz 文件拷贝到服务器上并解压到当前目录:

    1. tar zxvf tidb-operator.v1.2.4.tgz
  2. 下载 TiDB Operator 运行所需的 Docker 镜像

    如果服务器没有外网,需要在有外网的机器上将 TiDB Operator 用到的所有 Docker 镜像下载下来并上传到服务器上,然后使用 docker load 将 Docker 镜像安装到服务器上。

    TiDB Operator 用到的 Docker 镜像有:

    1. pingcap/tidb-operator:v1.2.4
    2. pingcap/tidb-backup-manager:v1.2.4
    3. bitnami/kubectl:latest
    4. pingcap/advanced-statefulset:v0.3.3
    5. k8s.gcr.io/kube-scheduler:v1.16.9

    其中 k8s.gcr.io/kube-scheduler:v1.16.9 请跟你的 Kubernetes 集群的版本保持一致即可,不用单独下载。

    接下来通过下面的命令将所有这些镜像下载下来:

    1. docker pull pingcap/tidb-operator:v1.2.4
    2. docker pull pingcap/tidb-backup-manager:v1.2.4
    3. docker pull bitnami/kubectl:latest
    4. docker pull pingcap/advanced-statefulset:v0.3.3
    5. docker save -o tidb-operator-v1.2.4.tar pingcap/tidb-operator:v1.2.4
    6. docker save -o tidb-backup-manager-v1.2.4.tar pingcap/tidb-backup-manager:v1.2.4
    7. docker save -o bitnami-kubectl.tar bitnami/kubectl:latest
    8. docker save -o advanced-statefulset-v0.3.3.tar pingcap/advanced-statefulset:v0.3.3

    接下来将这些 Docker 镜像上传到服务器上,并执行 docker load 将这些 Docker 镜像安装到服务器上:

    1. docker load -i tidb-operator-v1.2.4.tar
    2. docker load -i tidb-backup-manager-v1.2.4.tar
    3. docker load -i bitnami-kubectl.tar
    4. docker load -i advanced-statefulset-v0.3.3.tar
  3. 配置 TiDB Operator

    TiDB Operator 内嵌了一个 kube-scheduler 用来实现自定义调度器,请修改 ./tidb-operator/values.yaml 文件来配置这个内置 kube-scheduler 组件的 Docker 镜像名字和版本,例如你的 Kubernetes 集群中的 kube-scheduler 使用的镜像为 k8s.gcr.io/kube-scheduler:v1.16.9,请这样设置 ./tidb-operator/values.yaml

    1. ...
    2. scheduler:
    3. serviceAccount: tidb-scheduler
    4. logLevel: 2
    5. replicas: 1
    6. schedulerName: tidb-scheduler
    7. resources:
    8. limits:
    9. cpu: 250m
    10. memory: 150Mi
    11. requests:
    12. cpu: 80m
    13. memory: 50Mi
    14. kubeSchedulerImageName: k8s.gcr.io/kube-scheduler
    15. kubeSchedulerImageTag: v1.16.9
    16. ...

    其他项目例如:limitsrequestsreplicas,请根据需要进行修改。

  4. 安装 TiDB Operator

    使用下面的命令安装 TiDB Operator:

    1. helm install tidb-operator ./tidb-operator --namespace=tidb-admin

    注意:

    如果对应 tidb-admin namespace 不存在,则可先使用 kubectl create namespace tidb-admin 创建该 namespace。

  5. 升级 TiDB Operator

    如果需要升级 TiDB Operator,请先修改 ./tidb-operator/values.yaml 文件,然后执行下面的命令进行升级:

    1. helm upgrade tidb-operator ./tidb-operator --namespace=tidb-admin

自定义配置 TiDB Operator

可以通过修改 ${HOME}/tidb-operator/values-tidb-operator.yaml 来配置 TiDB Operator。本节后续使用 values.yaml 来代表 ${HOME}/tidb-operator/values-tidb-operator.yaml

TiDB Operator 包含两个组件:

  • tidb-controller-manager
  • tidb-scheduler

这两个组件都是无状态的,由 Deployment 部署。在 values.yaml 文件中,你可以配置其中的 limitrequestreplicas 参数。

修改了 values.yaml 文件后,请运行以下命令使更改生效:

  1. helm upgrade tidb-operator pingcap/tidb-operator --version=${chart_version} --namespace=tidb-admin -f ${HOME}/tidb-operator/values-tidb-operator.yaml