TiDB Operator 灰度升级

本文介绍如何灰度升级 TiDB Operator。灰度升级可以控制 TiDB Operator 升级的影响范围,避免由于 TiDB Operator 升级导致对整个 Kubernetes 集群中的所有 TiDB 集群产生不可预知的影响,在确认 TiDB Operator 升级的影响或者确认 TiDB Operator 新版本能正常稳定工作后再正常升级 TiDB Operator。

相关参数

为了支持灰度升级 TiDB Operator,tidb-operator chart 中 values.yaml 文件里面添加了一些参数,可以参考文档

灰度升级 TiDB Operator

  1. 为当前 TiDB Operator 配置 selector。

    参考升级 TiDB Operator 文档,在 values.yaml 中添加如下配置,升级当前 TiDB Operator:

    controllerManager: selector: - version!=canary

    如果之前已经执行过上述步骤,可以直接进入下一步。

  2. 部署灰度 TiDB Operator。

    参考部署 TiDB Operator 文档,在 values.yaml 中添加如下配置,在不同的 namespace 中(例如 tidb-admin-canary)使用不同的 Helm Release Name(例如 helm install tidb-operator-canary ...)部署灰度 TiDB Operator:

    controllerManager: selector: - version=canary appendReleaseSuffix: true #scheduler: # create: false advancedStatefulset: create: false admissionWebhook: create: false
  3. 如果需要测试 tidb-controller-manager 灰度升级,通过如下命令为某个 TiDB 集群设置 label:

    kubectl -n ${namespace} label tc ${cluster_name} version=canary

    通过查看已经部署的两个 tidb-controller-manager 的日志可以确认,这个 TiDB 集群已经归灰度 TiDB Operator 管理。

    1. 查看当前 TiDB Operator tidb-controller-manager 的日志:

      kubectl -n tidb-admin logs tidb-controller-manager-55b887bdc9-lzdwv
      I0305 07:52:04.558973 1 tidb_cluster_controller.go:148] TidbCluster has been deleted tidb-cluster-1/basic1
    2. 查看灰度 TiDB Operator tidb-controller-manager 的日志:

      kubectl -n tidb-admin-canary logs tidb-controller-manager-canary-6dcb9bdd95-qf4qr
      I0113 03:38:43.859387 1 tidbcluster_control.go:69] TidbCluster: [tidb-cluster-1/basic1] updated successfully
  4. 如果需要测试 tidb-scheduler 灰度升级,通过如下命令为某个 TiDB 集群修改 spec.schedulerNametidb-scheduler-canary

    kubectl -n ${namespace} edit tc ${cluster_name}

    修改后,集群内各组件会滚动升级,可以通过查看灰度 TiDB Operator tidb-scheduler 的日志确认集群已经使用灰度 tidb-scheduler

    kubectl -n tidb-admin-canary logs tidb-scheduler-canary-7f7b6c7c6-j5p2j -c tidb-scheduler
  5. 灰度测试完成后,可以将 3,4 步骤中的修改改回去,重新使用当前 TiDB Operator 管理。

    kubectl -n ${namespace} label tc ${cluster_name} version-
    kubectl -n ${namespace} edit tc ${cluster_name}
  6. 删除灰度 TiDB Operator。

    helm -n tidb-admin-canary uninstall ${release_name}
  7. 参考升级 TiDB Operator 文档正常升级当前 TiDB Operator。