我有一个Java 11应用程序,它带有与mysql 8.0一起运行的jdbc驱动程序,该应用程序能够连接到mysql并执行一个sql,但看起来好像再也没有响应?
答案 0 :(得分:0)
似乎是连接问题。 首先,最好看看Java程序的输出。
首先简单的检查是在Kubernetes级别上,以确保关键组件仍然存在:
$ kubectl get deployments
$ kubectl get services
$ kubectl get pods
可以在运行Java应用程序的容器内进行其他检查。 下面是一种可能的方法。
列出您的应用程序及其标签的部署:
$ kubectl get deployments --show-labels
NAME READY UP-TO-DATE AVAILABLE AGE LABELS
hello-node 2/2 2 2 1h app=hello-node
有了标签,您可以列出相关的容器及其容器:
$ LABEL=hello-node; kubectl get pods -l app=$LABEL -o custom-columns=POD:metadata.name,CONTAINER:spec.containers[*].name
POD CONTAINER
hello-node-55b49fb9f8-7tbh4 hello-node
hello-node-55b49fb9f8-p7wt6 hello-node
现在可以从Java应用程序容器中运行基本的诊断命令。 Ping可能无法实现目标,但几乎总是在容器中可用,并且会进行DNS解析的原始检查。 来自同一个名称空间的服务应通过短DNS名称提供。 来自同一Kubernetes集群内部其他名称空间的服务应该通过内部FQDN可用。
$ kubectl exec hello-node-55b49fb9f8-p7wt6 -c hello-node -- ping -c1 hello-node
$ kubectl exec hello-node-55b49fb9f8-p7wt6 -c hello-node -- ping -c1 hello-node.default.svc.cluster.local
$ kubectl exec hello-node-55b49fb9f8-p7wt6 -c hello-node -- mysql -u [username] -p [dbname] -e [query]
从这里开始,连通性诊断与裸机服务器非常相似,不同之处在于您受到容器内部可用工具的限制。您可以根据需要将缺少的软件包安装到容器中。
获取更多诊断信息后,您将获得下一步需要检查的线索。