写点什么

TiDB Operator 升级

  • 2023-01-13
    北京
  • 本文字数:3132 字

    阅读完需:约 10 分钟

作者: lqbyz 原文来源:https://tidb.net/blog/7e3ee6ad


在使用 TiDB Operator 部署管理 Kubernetes 上的 TiDB 集群时,有时需要对 Operator 进行升级,从而达到更稳定的管理 tidb 集群的功能和扩展一些新功能。一般在升级 TiDB Operator 的时候有常规升级和灰度升级。如果希望升级 TiDB Operator 至新版本,同时控制升级的影响范围,避免对整个 Kubernetes 集群中的所有 TiDB 集群产生不可预知的影响,可以采用灰度升级的方式升级 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 update3、搜索提供的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 升级,可跳过这一步



  • 更新 CRD


如果 Kubernetes 版本小于 1.16

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

  • 更新 CRD。

创建升级的 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 -ANAME                   NAMESPACE            REVISION        UPDATED                                        STATUS          CHART                        APP VERSION6                      tidb                 1               2022-12-02 14:48:48.917604258 +0800 CST        failed          tidb-lightning-v1.3.96.1.0                  tidb                 1               2022-12-02 12:25:10.149345501 +0800 CST        failed          tidb-lightning-v1.3.9chaos-mesh             chaos-testing        2               2022-06-09 16:51:49.542186958 +0800 CST        deployed        chaos-mesh-2.1.4             2.1.4lightning              tidb                 1               2022-12-02 14:49:21.495945953 +0800 CST        deployed        tidb-lightning-v1.3.9tidb-operator          tidb-admin           10              2023-01-10 13:50:24.288162887 +0800 CST        deployed        tidb-operator-v1.4.0         v1.4.0v1.3                   tidb                 1               2022-12-02 12:26:32.639264502 +0800 CST        failed          tidb-lightning-v1.3.9v6.1.0                 tidb                 1               2022-12-02 12:24:46.04948406 +0800 CST         failed          tidb-lightning-v1.3.9v6.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 集群中的 discovery Deployment 都会自动升级到对应的 TiDB Operator 版本。

离线升级

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

下载所需的 CRD.yaml 文件

  • 如果 Kubernetes 版本大于 1.16

  • 如果 Kubernetes 版本小于 1.16

下载 tidb-operator chart 包文件

wget http://charts.pingcap.org/tidb-operator-v1.4.0.tgz
复制代码

下载所需的镜像文件

docker pull pingcap/tidb-operator:v1.4.0docker pull pingcap/tidb-backup-manager:v1.4.0
docker save -o tidb-operator-v1.4.0.tar pingcap/tidb-operator:v1.4.0docker 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.yaml2、解压 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 Operator

helm -n tidb-admin-canary uninstall ${release_name}
复制代码

正常升级 TiDB Operator,采用常规升级即可

发布于: 刚刚阅读数: 2
用户头像

TiDB 社区官网:https://tidb.net/ 2021-12-15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
TiDB Operator升级_实践案例_TiDB 社区干货传送门_InfoQ写作社区