tidb-operator : v1.1.6
tidb version: v4.0.8
在一个老集群里通过apply -f crd.yaml文件,升级operator从v1.1.3 到v1.1.6 ,并启用v1.1.6的operator,挂掉node节点后,没有failover,直接在新集群里部署operator v1.1.6 是可以自动故障恢复的。对比了下tidbCluster的yaml文件,
而且旧集群的controller-manager.log提示大量的failed to update TidbCluster
目前猜测,update操作失败会影响failover。(这个先帮忙确认下,谢谢!!!)
看日志,提示类型不对,对照新集群中的文件,修改,这里以spec.tikv.config
的配置为例
但提示:
spec.tikv.config: Invalid value: "string": spec.tikv.config in body must be of type object: "string"
tc的配置项期望object类型,而我这里赋值string所以错误?那是因为老k8s集群中的crd没有更新吗(第一张图)?这里确实apply 过最新的crd的。
handlerww
(Handlerww)
2
如果PD都停止服务的话, 不会发生failover, 要先恢复PD的状态, 把 PD 的 config 改对, 让 PD 启动起来才能 failover.
应该需要更新下CRD, toml 配置透传是在 v1.1.6 引入的功能, 可能是CRD没有更新成功
目前pd是3个pod,我重新,apply 下crd ,然后需要重启下operator的pod的吧?
handlerww
(Handlerww)
4
可以先 apply 一下 crd, 然后创建一个 tc 看一下 crd 更新成功没有
handlerww
(Handlerww)
5
从我这里测试看, apply 1.1.3 的 CRD, 可以复现你的错误
The TidbCluster "basic" is invalid: spec.tikv.config: Invalid value: "string": spec.tikv.config in body must be of type object: "string"
apply 1.1.6 的 CRD 之后, tidbcluster对象可以创建了
kubectl apply -f crd.yaml
kubectl get crd tidbclusters.pingcap.com -oyaml > tc.yaml
对比了下crd.yaml和tc.yaml,config字段确实没有改过来,需要先delete下crd.yaml吗?
发现tc.yaml里除了config外,基本都应更新,跟crd没有什么不一样的
确认个问题,如果k8s集群里有v1.1.3-crd.yaml的实例,apply v1.1.6-crd.yaml,config字段也可以修改成功吗?我这边看起来,并不能
有个奇怪的象限,直接apply -f crd-v1.1.6.yaml还是报错。换一种方法,先apply -f crd-v1.1.3.yaml ,在apply -f crd-v1.1.6.yaml就没问题。
确认一下两个 yaml 参数差异,是不是有那些参数存在生效顺序。
system
(system)
关闭
13
此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。