部署多套 TiDB Operator 分别管理不同的 TiDB 集群

    为了支持部署多套 TiDB Operator,tidb-operator chart 中 values.yaml 文件里面添加了以下参数。

    • appendReleaseSuffix

      如果配置为 true,部署时会自动为 tidb-controller-managertidb-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 关系。

      示例:

    • scheduler.create

      控制是否创建 tidb-scheduler

      默认值:true

    部署多套 TiDB Operator 分别控制不同 TiDB 集群

    1. 部署第一套 TiDB Operator。

      参考,在 values.yaml 中添加如下配置,部署第一套 TiDB Operator:

      1. controllerManager:
      2. selector:
      3. - user=dev
    2. 部署 TiDB 集群。

      1. 参考在 Kubernetes 中配置 TiDB 集群配置 TidbCluster CR,并配置 labels 匹配上一步中为 tidb-controller-manager 配置的 selector,例如:

        1. kind: TidbCluster
        2. metadata:
        3. name: basic1
        4. labels:
        5. user: dev
        6. spec:

        如果创建 TiDB 集群时没有设置 label,也可以通过如下命令设置:

      2. 参考部署 TiDB 集群,并确认集群各组件正常启动。

    3. 参考部署 TiDB Operator 文档,在 values.yaml 中添加如下配置,在不同的 namespace 中(例如 tidb-admin-qa)使用不同的 (例如 helm install tidb-operator-qa ...)部署第二套 TiDB Operator (没有部署 tidb-scheduler):

      1. controllerManager:
      2. selector:
      3. - user=qa
      4. appendReleaseSuffix: true
      5. scheduler:
      6. create: false
      7. advancedStatefulset:
      8. create: false
      9. admissionWebhook:
      10. create: false

      注意:

      • 建议在单独的 namespace 部署新的 TiDB Operator。
      • appendReleaseSuffix 需要设置为 true
      • 如果配置 scheduler.create: true,会创建一个名字为 {{ .scheduler.schedulerName }}-{{.Release.Name}} 的 scheduler,要使用这个 scheduler,需要配置 TidbCluster CR 中的 spec.schedulerName 为这个 scheduler。
      • 由于不支持部署多套 AdvancedStatefulSet controller 和 AdmissionWebhook,需要配置 advancedStatefulset.create: falseadmissionWebhook.create: false
    4. 部署 TiDB 集群。

      1. 参考在 Kubernetes 中配置 TiDB 集群配置 TidbCluster CR,并配置 labels 匹配上一步中为 配置的 selector,例如:

        1. apiVersion: pingcap.com/v1alpha1
        2. kind: TidbCluster
        3. metadata:
        4. name: basic2
        5. user: qa
        6. spec:
        7. ...

        如果创建 TiDB 集群时没有设置 label,也可以通过如下命令设置:

      2. 参考部署 TiDB 集群,并确认集群各组件正常启动。

    5. 查看两套 TiDB Operator 的日志,确认两套 TiDB Operator 分别管理各自匹配 selector 的 TiDB 集群。

      示例:

      查看第一套 TiDB Operator tidb-controller-manager 的日志:

      1. kubectl -n tidb-admin logs tidb-controller-manager-55b887bdc9-lzdwv
      Output
      1. I0113 02:50:13.195779 1 main.go:69] FLAG: selector=”user=dev
      2. I0113 02:50:32.409378 1 tidbcluster_control.go:69] TidbCluster: [tidb-cluster-1/basic1] updated successfully
      3. I0113 02:50:32.773635 1 tidbcluster_control.go:69] TidbCluster: [tidb-cluster-1/basic1] updated successfully
      4. I0113 02:51:00.294241 1 tidbcluster_control.go:69] TidbCluster: [tidb-cluster-1/basic1] updated successfully

      查看第二套 TiDB Operator tidb-controller-manager 的日志:

      Output
      1. I0113 02:50:13.195779 1 main.go:69] FLAG: selector=”user=qa
      2. I0113 03:38:43.859387 1 tidbcluster_control.go:69] TidbCluster: [tidb-cluster-2/basic2] updated successfully
      3. I0113 03:38:45.060028 1 tidbcluster_control.go:69] TidbCluster: [tidb-cluster-2/basic2] updated successfully
      4. I0113 03:38:46.261045 1 tidbcluster_control.go:69] TidbCluster: [tidb-cluster-2/basic2] updated successfully