【发布时间】:2020-11-27 08:35:49
【问题描述】:
我正在阅读 Cloud Native Patterns 的第 5 章(Cornelia Davis,Manning Press,(c) 2019)。我正在尝试通过 curl 命令访问 minikube 服务,但始终超时。
我在 Windows 10 家庭版计算机上运行。它有 Docker(带虚拟盒子)、Minikube、kubectl、MySql 8 和 OpenJdk 1.8。我使用的是 GIT 提供的 Bash 终端(MINGW64)。
根据说明,我使用作者提供的应用程序(连接、发布、连接+发布)并使用 Maven 编译它们。然后我将它们上传到我的 Docker Hub 帐户,以便 Docker 可以使用它们。然后我通过 kubectl 启动了 mysql-svc,就像教程告诉我的那样。
启动 mysql 后,我使用 minikube service mysql-svc --format ... 命令获取 IP:Port 并将其安装到 YAML 文件中,用于每个连接服务和 post 服务。我启动了这两个服务,它们——瞬间——启动并运行。
这是我的集群状态:
$ kubectl get all
NAME READY STATUS RESTARTS AGE
pod/connections-56bcf7896-h4tz7 0/1 CrashLoopBackOff 8 26m
pod/mysql-7dbfd4dbc4-2jsjt 1/1 Running 0 24h
pod/posts-5d7f46b546-crfmj 1/1 Running 1 102s
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/connections-svc NodePort 10.104.27.91 <none> 80:31286/TCP 26m
service/kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 2d12h
service/mysql-svc NodePort 10.107.19.70 <none> 3306:31067/TCP 24h
service/posts-svc NodePort 10.97.232.158 <none> 80:31651/TCP 103s
NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/connections 0/1 1 0 26m
deployment.apps/mysql 1/1 1 1 24h
deployment.apps/posts 1/1 1 1 103s
NAME DESIRED CURRENT READY AGE
replicaset.apps/connections-56bcf7896 1 1 0 26m
replicaset.apps/mysql-7dbfd4dbc4 1 1 1 24h
replicaset.apps/posts-5d7f46b546 1 1 1 103s
好的,帖子服务已启动。所以问它一些东西:
$ curl $(minikube service --url posts-svc)/posts
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- 0:00:02 --:--:-- 0
curl: (7) Failed to connect to 192.168.99.101 port 31651: Connection refused
我不知道它为什么拒绝,有人可以解释一下吗?或者至少提供一种连接被拒绝的方法,即使我的 IP:Port 正确。
一个可能相关的问题是服务不断崩溃。甚至不到四分钟后,posts-svc 就崩溃了多次:
$ kubectl get all
NAME READY STATUS RESTARTS AGE
pod/connections-56bcf7896-h4tz7 0/1 CrashLoopBackOff 9 28m
pod/mysql-7dbfd4dbc4-2jsjt 1/1 Running 0 24h
pod/posts-5d7f46b546-crfmj 0/1 CrashLoopBackOff 3 3m53s
[SNIP]
我怎样才能在这里获得更高的稳定性?
谢谢,
杰罗姆。
2020 年 8 月 11 日更新:
查看日志后,我更改了以下内容:
-
minikube 启动文件 mysql-deployment.yaml 现在显式使用密码,比如
containers: - name: mysql image: mysql:5.7.22 env: - name: MYSQL_ROOT_PASSWORD value: "the_actual_password" -
我在 application.properties 文件中添加了一种方言。现在示例的 h2 测试文件不喜欢那种方言,所以我重新编译跳过测试。稍后我可以在测试中添加一个 h2 方言。
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL57Dialect
现在我得到的只是 root 用户无法登录:
java.sql.SQLException: Access denied for user 'root'@'172.17.0.1' (using password: YES)
从 mysql CLI,我可以以 root 身份登录并访问此代码使用的“cookbook”数据库。我检查了 root 是否有所有授权等。它只是不起作用。
还有线索吗?
杰罗姆。
2020 年 8 月 12 日更新:
我现在取得了不错的成绩。这是我的投诉和现在的不同之处。
教程让我通过 Docker 下载了 MySQL 版本。但是,我的计算机上还有一个 PC 版本的 MySQL。我认为 Docker / Minikube 服务器会以某种方式使用下载的 MySQL 连接到我的桌面 MySQL。所以我修改了下载命令,以及用于启动 mysql-svc 的 Minikube 启动的 .yaml 文件,以复制版本号、密码以及可能使用 MySQL 的其他方面。最终结果是程序和 mysql 互不喜欢,所以服务不断重启。
处理 Minikube 的正确方法是将所有需要的软件下载到容器中,并且不会触及已经存在的内容。我读了,但显然没有理解。现在我的手指已经烫伤了,看到容器里有我需要的所有程序。
所以我将所有配置恢复到 GIT 存储库开始时的配置,并将最初安装的 mysql(版本 8.+,以匹配我的桌面)替换为教程要求的(5.7.22)。
重新编译后,然后将更改推送到我的 Docker Hub 帐户,一切都按照教程承诺的那样工作。 请注意,本书在命令中有许多拼写错误,特别是在第 121 页的“minikube 服务...”命令中缺少子句“--url”。小心点。
我之前的会计说我是“按照说明”创建文件的,但我对我实际所做的更改视而不见。
杰罗姆。
抱歉,2020 年 8 月 13 日又一次更新:
我说我最终完全按照提供的方式使用了 .yaml 配置文件。我实际上做了两个更改。
-
这些文件有 apiVersion: apps/v1beta 。这必须成为 apps/v1 或 其他的都行不通。
-
这些文件以 cdavisafc/* 形式查找其 Docker Hub 映像,例如 cdavisafc/cloudnative-statelessness-posts。因为我将镜像放到自己的 Docker Hub 账户中,所以我的镜像被命名为logicaltiger/cloudnative-statelessness-posts 等。
本教程说的很好,但是通过获取提供的代码以实际部署 OK,您将学到很多关于 docker 和 minikube 的知识。
杰罗姆。
【问题讨论】:
标签: java mysql docker kubectl minikube