首页 > 解决方案 > jdbc 驱动程序在 kubernetes 中不起作用,超时失败

问题描述

我有一个带有 jdbc 驱动程序的 java 11 应用程序与 mysql 8.0 一起运行,该应用程序能够连接到 mysql 并执行一个 sql,但看起来它永远不会得到响应?

标签: mysqljdbckubernetes

解决方案


它看起来像一个连接问题。首先,最好看看 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

获得标签后,您可以列出相关的 pod 及其容器:

$ 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]

从这里开始,连接诊断与裸机服务器非常相似,只是您受到容器内部可用工具的限制。您可以根据需要将缺少的软件包安装到容器中。

一旦您获得更多诊断信息,您就会知道接下来要检查的内容。


推荐阅读