TiDB Operator 升级指南

网友投稿 669 2024-03-19



在使用TiDB Operator部署管理 Kubernetes 上的 TiDB 集群时,有时需要对Operator进行升级,从而达到更稳定的管理tidb集群的功能和扩展一些新功能。一般在升级TiDB Operator的时候有常规升级和灰度升级。如果希望升级TiDB Operator至新版本,同时控制升级的影响范围,避免对整个 Kubernetes 集群中的所有 TiDB 集群产生不可预知的影响,可以采用灰度升级的方式升级 TiDB Operator。使用灰度升级后,你可以在灰度部署的集群中确认 TiDB Operator 升级的影响,在确认 TiDB Operator 新版本稳定工作后,再常规升级TiDB Operator。

TiDB Operator 升级指南

常规升级

常规升级指升级TiDB Operator到指定的版本,一般常用的方式有在线升级(可以连外网)和离线升级(不能连外网)。

在线升级

查看升级的TiDB Operator版本

helm search repo -l tidb-operator

如果输出中未包含你需要的版本则可以执行如下添加helm chart仓库,然后升级

1、添加chart仓库 helm repo add pingcap https://charts.pingcap.org/ 2、更新chart仓库 helm repo update 3、搜索提供的chart仓库 helm search repo pingcap

更新 Kubernetes 的 CustomResourceDefinition (CRD)

如果Kubernetes版本大于等于1.16

如果 TiDB Operator 从 v1.3.x 升级到 v1.4.0 及以后版本,需要先执行下面命令创建新增加的 TidbDashboard CRD。如果是 v1.4.0 及以后版本的 TiDB Operator 升级,可跳过这一步

kubectl create -f https://raw.githubusercontent.com/pingcap/tidb-operator/${operator_version}/manifests/crd/v1/pingcap.com_tidbdashboards.yaml

更新CRD

kubectl replace -f https://raw.githubusercontent.com/pingcap/tidb-operator/${operator_version}/manifests/crd.yaml && \ kubectl get crd tidbclusters.pingcap.com 如果Kubernetes版本小于1.16

如果 TiDB Operator 从 v1.3.x 升级到 v1.4.0 及以后版本,需要先执行下面命令创建新增加的 TidbDashboard CRD。如果是 v1.4.0 及以后版本的 TiDB Operator 升级,可跳过这一步。

kubectl create -f https://raw.githubusercontent.com/pingcap/tidb-operator/${operator_version}/manifests/crd/v1beta1/pingcap.com_tidbdashboards.yaml

更新 CRD。

kubectl replace -f https://raw.githubusercontent.com/pingcap/tidb-operator/${operator_version}/manifests/crd_v1beta1.yaml && \ kubectl get crd tidbclusters.pingcap.com

创建升级的values-tidb-operator.yaml文件

mkdir -p ${HOME}/tidb-operator/v1.4.0 && \ helm inspect values pingcap/tidb-operator --version=v1.4.0 > ${HOME}/tidb-operator/v1.4.0/values-tidb-operator.yaml

旧版本 values.yaml 中设置了自定义配置,将自定义配置合并到 ${HOME}/tidb-operator/v1.4.0/values-tidb-operator.yaml 中。

执行升级

helm upgrade tidb-operator pingcap/tidb-operator --version=v1.4.0 -f ${HOME}/tidb-operator/v1.4.0/values-tidb-operator.yaml -ntidb-admin

如果不加namespaces的话会出现如下报错:Error: UPGRADE FAILED: "tidb-operator" has no deployed releases"

解决步骤如下:加上命名空间tidb-admin,如果不清楚命名空间可以通过如下进行查询。

[root@k8s-master ~]# helm list -A NAME NAMESPACE REVISION UPDATED STATUS CHART APP VERSION 6 tidb 1 2022-12-02 14:48:48.917604258 +0800 CST failed tidb-lightning-v1.3.9 6.1.0 tidb 1 2022-12-02 12:25:10.149345501 +0800 CST failed tidb-lightning-v1.3.9 chaos-mesh chaos-testing2 2022-06-09 16:51:49.542186958 +0800 CST deployed chaos-mesh-2.1.4 2.1.4 lightning tidb 1 2022-12-02 14:49:21.495945953 +0800 CST deployed tidb-lightning-v1.3.9 tidb-operator tidb-admin 10 2023-01-10 13:50:24.288162887 +0800 CST deployed tidb-operator-v1.4.0 v1.4.0 v1.3 tidb1 2022-12-02 12:26:32.639264502 +0800 CST failed tidb-lightning-v1.3.9 v6.1.0 tidb 1 2022-12-02 12:24:46.04948406 +0800 CST failed tidb-lightning-v1.3.9 v6.1.0-20221130 tidb 1 2022-12-02 12:32:32.747777196 +0800 CST failed tidb-lightning-v1.3.9 升级后加上命名空间就可以解决了

pod全部正常启动后,查看确认TiDB Operator镜像版本

kubectl get po -n tidb-admin -l app.kubernetes.io/instance=tidb-operator -o yaml | grep image:.*operator:

如果输出类似下方的结果,则表示升级成功。其中,v1.4.0 表示已升级到的版本号。

TiDB Operator 升级之后,所有 TiDB 集群中的 discoveryDeployment 都会自动升级到对应的 TiDB Operator 版本。

离线升级

下载升级所需的文件和镜像

下载所需的CRD.yaml文件

如果Kubernetes版本大于1.16

wget -O crd.yaml https://raw.githubusercontent.com/pingcap/tidb-operator/${operator_version}/manifests/crd.yaml

如果Kubernetes版本小于1.16

wget -O crd.yaml https://raw.githubusercontent.com/pingcap/tidb-operator/${operator_version}/manifests/crd_v1beta1.yaml下载tidb-operator chart包文件wget http://charts.pingcap.org/tidb-operator-v1.4.0.tgz下载所需的镜像文件docker pull pingcap/tidb-operator:v1.4.0 docker pull pingcap/tidb-backup-manager:v1.4.0 docker save -o tidb-operator-v1.4.0.tar pingcap/tidb-operator:v1.4.0 docker save -o tidb-backup-manager-v1.4.0.tar pingcap/tidb-backup-manager:v1.4.0

将下载文件和镜像上传到私有仓库和升级的operator服务器上,依次执行

1、升级 TiDB Operator 需要的 crd.yaml 文件: kubectl replace -f ./crd.yaml 2、解压 tidb-operator chart 包文件,并拷贝 values.yaml 文件到升级目录: tar zxvf tidb-operator-v1.4.0.tgz && \ mkdir -p ${HOME}/tidb-operator/v1.4.0 && \ cp tidb-operator/values.yaml ${HOME}/tidb-operator/v1.4.0/values-tidb-operator.yaml

修改values.yaml中operatorImage镜像版本为升级的版本

执行升级命令

helm upgrade tidb-operator ./tidb-operator --version=v1.4.0 -f ${HOME}/tidb-operator/v1.4.0/values.yaml -n tidb-admin

pod全部启动后,运行如下命令确认TiDB Operator镜像版本

kubectl get po -n tidb-admin -l app.kubernetes.io/instance=tidb-operator -o yaml | grep image:.*operator:

灰度升级

TiDB Operator 目前只支持对部分组件进行灰度升级,即 tidb-controller-managertidb-scheduler,不支持对增强型 StatefulSet 控制器准入控制器进行灰度升级。

在使用 TiDB Operator 时,tidb-scheduler 并不是必须使用。你可以参考 tidb-scheduler 与 default-scheduler,确认是否需要部署tidb-scheduler

为当前TiDB Operator配置selector并进行升级

在当前的tidb operator的values-tidb-operator.yaml中添加如下selector配置

controllerManager: selector: - version!=canary

对当前tidb operator执行升级步骤

helm upgrade tidb-operator pingcap/tidb-operator --version=${chart_version} -f ${HOME}/tidb-operator/values-tidb-operator.yaml -ntidb-admin

部署灰度的TiDB Operator

在values-tidb-operator.yaml中添加appendReleaseSuffix 需要设置为 true

在不同的namespaces中部署灰度的tidb operator

helm install tidb-operator-canary pingcap/tidb-operator --namespace=tidb-admin-canary --version=${operator_version} -f ${HOME}/tidb-operator/${operator_version}/values-tidb-operator.yaml

${operator_version} 替换为你需要灰度升级到的 TiDB Operator 版本号。

正常升级tidb operator

确认灰度部署的 TiDB Operator 已经正常工作后,可以正常升级 TiDB Operator。

删除灰度部署的TiDB Operatorhelm -n tidb-admin-canary uninstall ${release_name}正常升级TiDB Operator,采用常规升级即可

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:TiDB OOM 问题解析与最佳实践 SOP
下一篇:TiDB Operator 在 K8S 集群环境配置指南
相关文章