br中toolImage怎么自动获取Tikv的版本?

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:

【概述】:场景 + 问题概述
场景:升级Tidb-Operator 从v1.1.6到v1.1.12,遇到一个问题,之前创建一个备份,备份的Pod只包含一个Container,信息如下:

apiVersion: v1
kind: Pod
metadata:
  ......
spec:
  containers:
  - args:
    - backup
    - --namespace=tidb-xxxx
    - --backupName=backup-tidb-xxxx-1234568
    - --tikvVersion=v4.0.8
    ......
    image: xxxx/tidb/tidb-backup-manager:v1.1.6
    imagePullPolicy: IfNotPresent
......

升级到tidb-operator V1.1.12版本后,是把br的镜像单独拿出来了,作为Init Container ,但是br的默认值是pingcap/br:${tikv_version}
这里有个问题:
1、通过配置.spec.toolImage可以配置镜像,包括镜像路径和镜像版本,但是对于k8s里存在多个TiDB实例,且存在TikV的版本不一致的情况,怎么动态设置.spec.toolImage

【问题】:当前遇到的问题
存在多TiDB实,即TiKV版本不一致,怎么动态pull br的镜像版本。

【TiDB Operator 版本】:
TiDB Operator V1.1.6 升级—> V1.1.12

【K8s 版本】:
Version : V1.16.14

1赞

为什么 TiKV 版本不一致,TiDB 目前不支持一套集群多版本节点。能否先将 TiKV 节点升级到统一版本 。

我们有多套TiDB集群,每套TiDB实例的小版本号,可能不一致。

例如:我们有3个TiDB集群,服务于3个业务线,鉴于业务线上线时间不一致,有的可能是V4.0.7,有的是V4.0.8(刚看了下我们这边目前都是V4.0.8),也就是说一个K8s集群里存在多套版本不一致的TiDB集群(这个应该是允许的吧)

新版本的TiDB-Operator,在做备份时,把br镜像提取出来,如果不指定镜像,就采用PingCAP官方镜像(环境无法访问公网);如果指定br镜像,那就需要跟TiDB集群中tikv的镜像版本一致。但问题是,对于不同的TiDB集群,怎么知道TikV的镜像版本的?不能每次备份时,就手动去查下待备份实例TiKV的镜像版本,然后在填充bk中的toolImage字段吧?
···
apiVersion: pingcap.com/v1alpha1
kind: Backup
metadata:

spec:
toolImage: internal-dockerhub-bj-xxx.com/tidb/br:${tikv_version}
br:
cluster: tidb-kb55ll0xiw
···

我想问的是,
1、怎么自动获取tikv的版本? 我这边尝试了,下面的命令

tikv_version=`/usr/bin/mysql   -htidb-kb55ll0xiw-tidb.tidb-kb55ll0xiw   -uroot -P4000 -pxxxxx  -Nse "select distinct(version)  from INFORMATION_SCHEMA.CLUSTER_INFO where type='tikv';"`

2、感觉这里toolImage需要设置tikv_version完全没有必要吧,本来备份是期望br的镜像版本跟tikv一致的,所以这里应该是一个toolBaseImage更合理吧,或者在添加个Br_version,默认值跟tikv_version一致。

这个场景合理,可以改下现在的代码,判断 toolImage,如果包含 tag 就直接用,如果不包含 tag 就用 tikv_version。

https://github.com/pingcap/tidb-operator/issues/4047

:+1:,期待这块灵活处理

Merged,坐等v1.1.13发布了:grin: