如何在 Minikube 中 运行 一个 Spring 启动应用程序?

How to run a Spring Boot application in Minikube?

我想在 Minikube 中 运行 this Spring Boot application 以便我可以在我的浏览器中访问 8080 端口(一旦应用程序 运行ning)。

为此,我执行以下步骤。

  1. 开始 Docker.
  2. 运行 mvn spring-boot:build-image.
  3. 使用minikube start启动Minikube。
  4. 使用 kubectl create deployment example-1-engine-1 --image=example-1-engine-1 创建 Minikube 部署。
  5. 使用 kubectl expose deployment example-1-engine-1 --type=NodePort --port=8080kubectl port-forward service/example-1-engine-1 8080:8080 公开端口 8080。
  6. 在 Minikube 中启动应用程序。
  7. 使用 minikube service example-1-engine-1 在 Minikube 中启动应用程序。

出现以下输出:

但是,浏览器无法打开 8080 端口上的 Web 应用程序(浏览器无法连接到 http://127.0.0.1:50947/ 上的应用程序)。

我做错了什么,我如何确保有问题的应用程序 运行 在 Minikube 中并且我可以通过端口 8080 访问 Web 应用程序?

更新 1: 这是 kubectl get pods 的输出:

C:\Users\XXXXXXX>kubectl get pods
NAME                                 READY   STATUS             RESTARTS   AGE
example-1-engine-1-d9fc48785-zdvkf   0/1     ImagePullBackOff   0          2d18h
hello-minikube-6ddfcc9757-wj6c2      1/1     Running            1          5d

更新 2: 我尝试输入 eval $(minikube -p minikube docker-env)。为此,我首先在Docker.

中打开了Minikube容器的shell

在之后出现的window中,我输入了eval $(minikube -p minikube docker-env)得到了响应minikube: not found

在我看来,您的案例可能存在两个问题。

1。使用本地构建的 Docker 图像

您想在 Kubernetes 中 运行 本地构建 Docker 图像,但开箱即用。 通常,您有两个选择:

  1. 使用 docker image push 命令将您的图像分享到 Docker Hub registry or to a self-hosted one as described in the Docker documentation

  2. 使用 eval $(minikube docker-env) 命令让您的终端使用 minikube 中的 docker 守护进程,如 minikube documentation.

    中所述

2。使用带有特定标签的 Docker 图像

正如我所见,您的图片具有特定标签 1.0-SNAPSHOT:

$ docker images
REPOSITORY                                TAG                     
example-1-engine-1                        1.0-SNAPSHOT            

您需要在 kubectl create deployment 命令中指定此标签:

$ kubectl create deployment example-1-engine-1 --image=example-1-engine-1:1.0-SNAPSHOT

我已经部署了你的Spring Boot application,以证明它对我来说是按预期工作的。

首先,让我的终端使用 minikube 中的 docker 守护进程 运行:

$ eval $(minikube -p minikube docker-env)

然后我创建了 Docker 图像并部署了 example-1-engine-1 应用程序:

$ mvn spring-boot:build-image
...
[INFO] Successfully built image 'docker.io/library/example-1-engine-1:1.0-SNAPSHOT'
[INFO] 
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
...

$ kubectl create deployment example-1-engine-1 --image=example-1-engine-1:1.0-SNAPSHOT
deployment.apps/example-1-engine-1 created

$ kubectl get pod
NAME                                 READY   STATUS    RESTARTS   AGE
example-1-engine-1-c98f8c569-xq2cv   1/1     Running   0          13s

最后,我公开了 example-1-engine-1 Deployment,如您的示例所示:

$ kubectl expose deployment example-1-engine-1 --type=NodePort --port=8080
service/example-1-engine-1 exposed

$ kubectl port-forward service/example-1-engine-1 8080:8080
Forwarding from 127.0.0.1:8080 -> 8080
Forwarding from [::1]:8080 -> 8080

$ minikube service example-1-engine-1
|-----------|--------------------|-------------|---------------------------|
| NAMESPACE |        NAME        | TARGET PORT |            URL            |
|-----------|--------------------|-------------|---------------------------|
| default   | example-1-engine-1 |        8080 | http://192.168.49.2:32766 |
|-----------|--------------------|-------------|---------------------------|
Opening service default/example-1-engine-1 in default browser...

在打开的浏览器选项卡中,我看到:

此外,我在 http://127.0.0.1:8080 看到了相同的页面。


不幸的是,我没有 Windows 机器(如您的示例),我使用 Linux 代替,所以我无法完全重现您的问题。