mysql - jdbc 驱动程序在 kubernetes 中不起作用,超时失败
问题描述
我有一个带有 jdbc 驱动程序的 java 11 应用程序与 mysql 8.0 一起运行,该应用程序能够连接到 mysql 并执行一个 sql,但看起来它永远不会得到响应?
解决方案
它看起来像一个连接问题。首先,最好看看 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]
从这里开始,连接诊断与裸机服务器非常相似,只是您受到容器内部可用工具的限制。您可以根据需要将缺少的软件包安装到容器中。
一旦您获得更多诊断信息,您就会知道接下来要检查的内容。
推荐阅读
- excel - 根据条件从列中复制所有数据
- javascript - 如何通过 Yarn 将 JS 插件添加到 Rails 6 应用程序
- python - 提交按钮在 Python Selenium 中不起作用
- python - 即使没有添加任何内容,也会在布局中添加空间
- arrays - 如何创建 JUnit 测试以查看用户的数组是否正确
- php - 在 MYSQL 数据库中插入 CSV 文件期间处理特定范围行
- r - 滑块文本输入的标签不显示
- javascript - 有没有办法使用猫鼬从数据库中提取值并将所需的结果存储到变量中?
- azure - SFTP/SSH (ISE) 的逻辑应用部署模板 - 设置 JSON 属性名称
- flutter - Flutter Getx - 将数据发送到其他页面