使用多套 TiDB Operator 单独管理不同的 TiDB 集群
你可使用一套 TiDB Operator 管理多个 TiDB 集群。如果你有以下业务需求,可以部署多套 TiDB Operator 分别管理不同的 TiDB 集群:
- 需要灰度升级 TiDB Operator 至新版本,避免新版本存在潜在问题影响业务
- 业务中有多个 TiDB 集群,且每个集群归属不同业务部门,各部门需要单独管理各自的集群
本文介绍如何部署多套 TiDB Operator,分别管理不同的 TiDB 集群。
在使用 TiDB Operator 时,tidb-scheduler 并不是必须使用。你可以参考 tidb-scheduler 与 default-scheduler,确认是否需要部署 tidb-scheduler。
操作步骤
部署第一套 TiDB Operator。
参考部署 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中添加如下配置,在不同的 namespace 中(例如tidb-admin-qa)使用不同的 Helm Release Name(例如helm install tidb-operator-qa ...)部署第二套 TiDB Operator(没有部署tidb-scheduler):controllerManager: selector: - user=qa appendReleaseSuffix: true scheduler: # 如果你不需要 `tidb-scheduler`,将这个值设置为 false create: false advancedStatefulset: create: false admissionWebhook: create: false部署第二套 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-lzdwvOutput
... 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-qa logs tidb-controller-manager-qa-5dfcd7f9-vll4cOutput
... 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集群。
如果需要部署第三套或更多 TiDB Operator 来管理集群,重复第 3 步、第 4 步和第 5 步的操作即可。
相关参数
tidb-operator chart 的 values.yaml 文件里,有以下参数与部署多套 TiDB Operator 相关。
appendReleaseSuffix如果配置为
true,部署时会自动为tidb-controller-manager和tidb-scheduler相关的资源名称添加后缀-{{ .Release.Name }}。例如,通过helm install canary pingcap/tidb-operator ...命令部署的tidb-controller-managerdeployment 名称为: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!=v2scheduler.create控制是否创建
tidb-scheduler。在使用 TiDB Operator 时,tidb-scheduler并不是必须使用。你可以参考 tidb-scheduler 与 default-scheduler,确认是否需要部署tidb-scheduler。默认值:
true。