- 关于 TiDB Operator
- 快速上手
- 部署
- 部署 TiDB 集群
- 部署到自托管的 Kubernetes
- 跨多个 Kubernetes 集群部署 TiDB 集群
- 部署异构集群
- 部署 TiFlash
- 部署 TiCDC
- 部署 TiDB Binlog
- 部署 TiDB 企业版集群
- 部署多套 TiDB Operator
- 部署 TiDB 集群监控
- 部署 TiDB 集群
- 安全
- 运维
- 备份与恢复
- 使用 S3 兼容存储备份与恢复
- 使用 GCS 备份与恢复
- 使用持久卷备份与恢复
- 备份与恢复
- 灾难恢复
- 参考
- TiDB Operator Roadmap
- 版本发布历史
- v1.2
- v1.1
- v1.0
- v0
部署多套 TiDB Operator 分别管理不同的 TiDB 集群
本文介绍如何部署多套 TiDB Operator,分别管理不同的 TiDB 集群。
注意:
- 目前仅支持部署多套 tidb-controller-manager 和 tidb-scheduler。
- 如果部署了多套 TiDB Operator,有的开启了
Advanced StatefulSet
,有的没有开启,那么同一个 TidbCluster Custom Resource (CR) 不能在这些 TiDB Operator 之间切换。
相关参数
为了支持部署多套 TiDB Operator,tidb-operator
chart 中 values.yaml
文件里面添加了以下参数。
appendReleaseSuffix
如果配置为
true
,部署时会自动为tidb-controller-manager
和tidb-scheduler
相关的资源名称添加后缀-{{ .Release.Name }}
,例如,通过helm install canary pingcap/tidb-operator ...
命令部署的tidb-controller-manager
deployment 名称为:tidb-controller-manager-canary
,如果要部署多套 TiDB Operator 需要开启此参数。默认值:
false
。controllerManager.create
控制是否创建
tidb-controller-manager
。默认值:
true
。controllerManager.selector
配置
tidb-controller-manager
的-selector
参数,用于根据 CR 的 label 筛选tidb-controller-manager
控制的 CR,多个 selector 之间为and
关系。默认值:
[]
,控制所有 CR。示例:
selector: - canary-release=v1 - k1==v1 - k2!=v2
scheduler.create
控制是否创建
tidb-scheduler
。默认值:
true
。
部署多套 TiDB Operator 分别控制不同 TiDB 集群
部署第一套 TiDB Operator。
参考部署 TiDB Operator 文档,在 values.yaml 中添加如下配置,部署第一套 TiDB Operator:
controllerManager: selector: - user=dev
部署 TiDB 集群。
参考在 Kubernetes 中配置 TiDB 集群配置 TidbCluster CR,并配置
labels
匹配上一步中为tidb-controller-manager
配置的selector
,例如:apiVersion: pingcap.com/v1alpha1 kind: TidbCluster metadata: name: basic1 labels: user: dev spec: ...
如果创建 TiDB 集群时没有设置 label,也可以通过如下命令设置:
kubectl -n ${namespace} label tidbcluster ${cluster_name} user=dev
参考在 Kubernetes 中部署 TiDB 集群部署 TiDB 集群,并确认集群各组件正常启动。
部署第二套 TiDB Operator。
参考部署 TiDB Operator 文档,在 values.yaml 中添加如下配置,部署第二套 TiDB Operator (没有部署
tidb-scheduler
):controllerManager: selector: - user=qa appendReleaseSuffix: true scheduler: create: false
注意:
如果配置
scheduler.create: true
,会创建一个名字为{{ .scheduler.schedulerName }}-{{.Release.Name}}
的 scheduler,要使用这个 scheduler,需要配置 TidbCluster CR 中的spec.schedulerName
为这个 scheduler。部署 TiDB 集群。
参考在 Kubernetes 中配置 TiDB 集群配置 TidbCluster CR,并配置
labels
匹配上一步中为tidb-controller-manager
配置的selector
,例如:apiVersion: pingcap.com/v1alpha1 kind: TidbCluster metadata: name: basic2 labels: user: qa spec: ...
如果创建 TiDB 集群时没有设置 label,也可以通过如下命令设置:
kubectl -n ${namespace} label tidbcluster ${cluster_name} user=qa
参考在 Kubernetes 中部署 TiDB 集群部署 TiDB 集群,并确认集群各组件正常启动。
查看两套 TiDB Operator 的日志,确认两套 TiDB Operator 分别管理各自匹配 selector 的 TiDB 集群。
示例:
查看第一套 TiDB Operator
tidb-controller-manager
的日志:kubectl -n tidb-admin logs tidb-controller-manager-55b887bdc9-lzdwv
Output
... I0113 02:50:13.195779 1 main.go:69] FLAG: --selector="user=dev" ... I0113 02:50:32.409378 1 tidbcluster_control.go:69] TidbCluster: [tidb-cluster-1/basic1] updated successfully I0113 02:50:32.773635 1 tidbcluster_control.go:69] TidbCluster: [tidb-cluster-1/basic1] updated successfully I0113 02:51:00.294241 1 tidbcluster_control.go:69] TidbCluster: [tidb-cluster-1/basic1] updated successfully
查看第二套 TiDB Operator
tidb-controller-manager
的日志:kubectl -n tidb-admin logs tidb-controller-manager-tidb-operator-v2-5dfcd7f9-vll4c
Output
... I0113 02:50:13.195779 1 main.go:69] FLAG: --selector="user=qa" ... I0113 03:38:43.859387 1 tidbcluster_control.go:69] TidbCluster: [tidb-cluster-2/basic2] updated successfully I0113 03:38:45.060028 1 tidbcluster_control.go:69] TidbCluster: [tidb-cluster-2/basic2] updated successfully I0113 03:38:46.261045 1 tidbcluster_control.go:69] TidbCluster: [tidb-cluster-2/basic2] updated successfully
通过对比两套 TiDB Operator tidb-controller-manager 日志,第一套 TiDB Operator 仅管理
tidb-cluster-1/basic1
集群,第二套 TiDB Operator 仅管理tidb-cluster-2/basic2
集群。