TiDB Operator 灰度升级
本文介绍如何灰度升级 TiDB Operator。灰度升级可以控制 TiDB Operator 升级的影响范围,避免由于 TiDB Operator 升级导致对整个 Kubernetes 集群中的所有 TiDB 集群产生不可预知的影响,在确认 TiDB Operator 升级的影响或者确认 TiDB Operator 新版本能正常稳定工作后再正常升级 TiDB Operator。
注意:
- 目前仅支持灰度升级 tidb-controller-manager 和 tidb-scheduler,不支持灰度升级 AdvancedStatefulSet controller 和 AdmissionWebhook。
- v1.1.10 开始支持此项功能,所以当前 TiDB Operator 版本需 >= v1.1.10。
相关参数
为了支持灰度升级 TiDB Operator,tidb-operator
chart 中 values.yaml
文件里面添加了一些参数,可以参考文档。
灰度升级 TiDB Operator
为当前 TiDB Operator 配置 selector。
参考升级 TiDB Operator 文档,在 values.yaml 中添加如下配置,升级当前 TiDB Operator:
controllerManager:
selector:
- version!=canary
如果之前已经执行过上述步骤,可以直接进入下一步。
部署灰度 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
注意:
- 建议在单独的 namespace 部署新的 TiDB Operator。
appendReleaseSuffix
需要设置为true
。- 如果不需要灰度升级 tidb-scheduler,可以设置
scheduler.create: false
。 - 如果配置
scheduler.create: true
,会创建一个名字为{{ .scheduler.schedulerName }}-{{.Release.Name}}
的 scheduler,要使用这个 scheduler,需要配置 TidbCluster CR 中的spec.schedulerName
为这个 scheduler。 - 由于不支持灰度升级 AdvancedStatefulSet controller 和 AdmissionWebhook,需要配置
advancedStatefulset.create: false
和admissionWebhook.create: false
。
如果需要测试 tidb-controller-manager 灰度升级,通过如下命令为某个 TiDB 集群设置 label:
kubectl -n ${namespace} label tc ${cluster_name} version=canary
通过查看已经部署的两个 tidb-controller-manager 的日志可以确认,这个 TiDB 集群已经归灰度 TiDB Operator 管理。
查看当前 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
查看灰度 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
如果需要测试 tidb-scheduler 灰度升级,通过如下命令为某个 TiDB 集群修改
spec.schedulerName
为tidb-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
灰度测试完成后,可以将 3,4 步骤中的修改改回去,重新使用当前 TiDB Operator 管理。
kubectl -n ${namespace} label tc ${cluster_name} version-
kubectl -n ${namespace} edit tc ${cluster_name}
删除灰度 TiDB Operator。
helm -n tidb-admin-canary uninstall ${release_name}
参考升级 TiDB Operator 文档正常升级当前 TiDB Operator。