【 TiDB 使用环境`】测试环境
【 TiDB 版本】6.1 & 5.4 都会出现
【遇到的问题】在部署 tidb cluster时,basic-pd-0 Pod 容器 30s 后失败重启,log 中查看是domain 字段拼接有问题,报错如下:
** server can't find basic-pd-0.basic-pd-peer.tidb-cluster.svc.cluster.local.basic-pd-peer.tidb.cluster.svc: NXDOMAIN
nslookup domain basic-pd-0.basic-pd-peer.tidb-cluster.svc.cluster.local.basic-pd-peer.tidb-cluster.svc failed
使用startUpScriptVersion: "v1"
有类似的报错
domain resolve basic-pd-0.basic-pd-peer.tidb-cluster.svc.cluster.local.basic-pd-peer.tidb-cluster.svc no record return
这段报错应该来源于源码 manager/member/tempalte.go
120行 pdStartScriptTpl
的命令,对 domain
变量的拼接出现了问题,这里的拼接结果应该是:
basic-pd-0.basic-pd-peer.tidb-cluster.svc # 正确结果
basic-pd-0.basic-pd-peer.tidb-cluster.svc.cluster.local.basic-pd-peer.tidb-cluster.svc # 实际错误结果
请问这是一个bug吗,之前有没有遇到过?
【TiDB Operator 版本】:1.3.7
【K8s 版本】:1.20 & containerd 1.2.10
1 个赞
xfworld
(魔幻之翼)
2
目前K8S的环境,对于domain 是依靠什么服务来支持的?
是否能够满足 tidb operator 的基本要求?
https://docs.pingcap.com/zh/tidb-in-kubernetes/stable/deploy-tidb-operator
是否配置了 tc.clusterDomain? 可以提供一下 tc 的配置
目前的K8S环境用 CoreDNS 来支持的,准备环境的内容应该都没有问题;
tc.clusterDomain字段没有设置,tc配置和quickstart里应该是完全一致的。
我现在发现了问题所在,在manager/member/template.go 文件的pd启动脚本 pdStartScriptTpl 中(刚刚github更新之后是在 tidb-operator/charts/tidb-cluster/templates/scripts/_start_pd.sh.tpl 文件中)这一行:
POD_NAME=${POD_NAME:-$HOSTNAME}
如果kubelet 没有给容器注入 $POD_NAME,$HOSTNAME 得到的值包含的不仅仅是容器的 hostname,后面还跟了许多svc,namespace等,导致 domain结果不正确。这行应该改为:
POD_NAME=${POD_NAME:-$(hostname)}
目前我这里修改后结果正确了。
Min_Chen
(Make the world more reliable)
5
Hi, 可以提供一下你的 tc 定义 yaml 和 pod 的 yaml 输出吗?
还有 kubectl -nkube-system get cm/coredns -oyaml --export
和 kubectl -ntidb-test exec -ti tidb4012-pd-0 – cat /etc/resolv.conf
tc yaml 没有改过,https://github.com/pingcap/tidb-operator/blob/master/examples/basic/tidb-cluster.yaml
pod 的 yaml basic-pd-0.yaml (5.1 KB)
cm/coredns yaml cm-coredns.yaml (1.1 KB)
/etc/resolv/conf
search tidb-cluster.svc.cluster.local svc.cluster.local cluster.local
nameserver 22.0.0.10
options ndots:5
我觉得还需要关注这个,在 kubectl -n tidb-cluster exec -it basic-pd-0 – sh 中命令的结果
/ # echo $HOSTNAME
basic-pd-0.basic-pd-peer.tidb-cluster.svc.cluster.local
/ # hostname
basic-pd-0
Min_Chen
(Make the world more reliable)
7
本地没有复现您的问题。
看到您 yaml 里有 ali 字样,请问您的环境是怎么创建的?tidb operator 和 tidbcluster 是怎么部署的?
k8s环境是阿里ACK托管版,版本1.20.4,部署方式就是按照tidb quick start里的步骤