你正在查看已归档的 TiDB 文档,该文档不再更新。

查看最新 LTS 版本文档

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。