basic-pd-0 会去请求 tidb-discovery-xxx 这个服务,现在需要去查看下这个 Pod 的日志,看看有什么报错信息?
1,从日志看 basic-pd-0 这个 已经启动了?看看这个 pod 的日志。
2,kubectl get sts -n tidb-demo 看下有没有 tikv 的 sts 创建。
目前看来,tidb-discovery 已经给 basic-pd-0 返回了启动参数。但是 basic-pd-0 貌似没有接受到这个参数,现在确认下这两个 Pod 之前的网络是否是通的吧?
m1(150) m2(151) w1(152) w2(153)
150 ping 151、152、153 都通
152 ping 153 通
153 ping 152 通
@swz-wyyy
你执行下这个命令,我看下 basic-pd-0 与 discovery 服务连通性。
kubectl -n tidb-demo exec -it basic-pd-0 – sh -c ‘nc -z -v basic-discovery 10261’
一直卡在 “waiting for discovery service to return start args” 一般有两个原因:
- 与 discovery pod 连接不通
- discovery pod 出现问题,无法返回正确的 start args
前者的话,需要检查下集群网络。后者的话,可能是集群哪里状态出现 bug 。
不好意思,前面命令在中文输入法字符产生错误 。完整的是:
kubectl -n tidb-demo exec -it basic-pd-0 – sh -c ‘nc -z -v basic-discovery 10261’
另外可以检查下 kube-system 下所有 pods 是否运行正常,以及 nodes 状态。
kubectl -n kube-system get pods -o wide
kubectl get nodes -o wide
当然若没有业务在 k8s 环境运行,也可以尝试重装再看下。
另外,也可以先用 kind 快速创建一个 k8s 集群,先玩起来。这类工具创建、销毁 k8s 集群没啥成本。
是中间的 - 应该是两个 – 。
若测试环境下,可能重来简单一点。
看来 pd 与 discovery 网络是联通的。可以先将 tidb-demo namespace 全部删除重来一下:
kubectl delete ns tidb-demo
kubectl create ns tidb-demo # 等待之前的 tidb-demo namespace 删除完成后操作
curl -LO https://raw.githubusercontent.com/pingcap/tidb-operator/master/examples/basic-cn/tidb-cluster.yaml
kubectl -n tidb-demo apply -f tidb-cluster.yaml
可以了。感谢赞美
Good!
又遇到一个尴尬的问题,我现在不知道访问 数据库的端口是多少不知道了,
之前可以通过 【kubectl -n tidb-demo get svc basic-tidb -ojsonpath=“{.spec.ports[?(@.name==‘mysql-client’)].nodePort}{’
'}”】来获取 端口
使用 NodePort 的话,需要编辑 tidb cluster yaml ,在 tidb.service 字段配置以下内容:
service: type: NodePort externalTrafficPolicy: Local
我前面举的例子用的是 type 为 ClusterIP,需要修改为 NodePort 。可选地使用 externalTrafficPolicy: Local 。
关于 Kubernetes NodePort Serivice 类型检查可以参考:Service | Kubernetes
用于生产环境的话,建议过一遍详细的配置项:https://github.com/pingcap/tidb-operator/blob/master/examples/advanced/tidb-cluster.yaml
比如 spec.pvReclaimPolicy 建议配置为 Retain ,即使误删除 PVC 也不会将 PV 删除(避免丢失数据)等。
是的,之前是按 nodeport 配置的,刚curl 过来的配置文件没注意这个问题,好的,谢谢
如果有问题再继续跟帖,多谢。