为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:
【概述】:场景 + 问题概述
场景:升级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。
system
(system)
关闭
9
此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。