首页 > 编程语言 >在 Spring 引导应用程序上部署的过程

在 Spring 引导应用程序上部署的过程

时间:2022-12-27 11:05:15浏览次数:42  
标签:引导 8080 Kubernetes kubectl demo 应用程序 Spring

在 Spring 引导应用程序上部署的过程_docker

Spring Boot Kubernetes

本指南将引导您完成在 Spring 引导应用程序上部署的过程Kubernetes.你可以从许多方式中选择使用 Spring Boot 和 Kubernetes 来做事。本指南的目的是让您尽快开始,而不是讨论所有替代方案或详细介绍如何投入生产。


有一些交互式教程可以补充和扩展本指南的内容卡塔科达/弹簧指南.如果您遵循这些教程,所有代码都将从您的浏览器在云中运行。或者,您可以创建自己的集群,在本地安装所需的所有工具,然后从指南中复制粘贴。

  • Getting Started with Spring Boot on Kubernetes:与本指南相同的材料,但在浏览器中运行。
  • 安装 Kubernetes​:使用类.如果您更喜欢在那里运行教程,您可以使用它在笔记本电脑上进行设置。
  • 带有 Spring Boot 的 Kubernetes Probes:使用弹簧启动的活性和就绪性探测指南。


您将构建什么

Kubernetes是一个开源系统,用于自动部署、扩展和管理容器化应用程序。它将组成应用程序的容器分组到逻辑单元中,以便于管理和发现。在本指南中,我们将构建并部署一个简单的 Spring 引导应用程序。

您还可以找到一个入门指南和专题指南在 Docker 上,其中涵盖了构建容器映像的一些背景。

你需要什么

您将需要一个类似Linux或Linux的命令行。本指南中的命令行示例适用于 Linux、带有 shell 的 MacOS 终端或唰唰��在视窗上。

您还需要一个 Kubernetes 集群和命令行工具库贝克特尔.您可以使用类(在 Docker 上)或米尼库贝.或者,您可以使用云提供商,例如谷歌云平台,亚马逊云科技或微软 Azure.在继续操作之前,请验证是否可以从命令行管理程序运行命令。以下示例使用:​​kubectl​​​​kind​

$ kubectl cluster-info
Kubernetes master is running at https://127.0.0.1:46253
KubeDNS is running at https://127.0.0.1:46253/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy

To further debug and diagnose cluster problems, use 'kubectl cluster-info dump'.

还应运行以下命令:

$ kubectl get all
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 7m13s

创建 Spring 引导应用程序

首先,我们创建一个 Spring Boot 应用程序。如果你有一个你喜欢在github中使用的,你可以在终端中克隆它(并且已经安装)。或者,您可以使用 start.spring.io 从头开始创建应用程序:​​git​​​​java​

curl https://start.spring.io/starter.tgz -d dependencies=webflux,actuator | tar -xzvf -

然后,您可以构建应用程序:

./mvnw install

第一次需要几分钟,但是,一旦依赖项全部缓存,它就会很快。

然后,您可以看到构建的结果。如果生成成功,您应该会看到类似于以下内容的 JAR 文件:

ls -l target/*.jar
-rw-r--r-- 1 root root 19463334 Nov 15 11:54 target/demo-0.0.1-SNAPSHOT.jar

JAR 是可执行的:

$ java -jar target/*.jar

该应用程序具有一些内置的 HTTP 终结点,因为我们在下载项目时添加了依赖项。您应该在启动时的日志中看到类似于以下内容的输出:​​actuator​

...
2019-11-15 12:12:35.333 INFO 13912 --- [ main] o.s.b.a.e.web.EndpointLinksResolver : Exposing 2 endpoint(s) beneath base path '/actuator'
2019-11-15 12:12:36.448 INFO 13912 --- [ main] o.s.b.web.embedded.netty.NettyWebServer : Netty started on port(s): 8080
...

然后,您可以将端点卷曲在另一个终端中:

$ curl localhost:8080/actuator | jq .
{
"_links": {
"self": {
"href": "http://localhost:8080/actuator",
"templated": false
},
"health-path": {
"href": "http://localhost:8080/actuator/health/{*path}",
"templated": true
},
"health": {
"href": "http://localhost:8080/actuator/health",
"templated": false
},
"info": {
"href": "http://localhost:8080/actuator/info",
"templated": false
}
}
}

若要完成此步骤,请按 Ctrl+C 停止应用程序。

容器化应用程序

有多种选项可用于容器化 Spring 引导应用程序。只要你已经在构建 Spring Boot jar 文件,你只需要直接调用插件。以下命令使用马文:

$ ./mvnw spring-boot:build-image

以下命令使用格拉德尔:

$ ./gradlew bootBuildImage

可以在本地运行容器:

$ docker run -p 8080:8080 demo:0.0.1-SNAPSHOT

然后,您可以检查它是否在另一个终端中工作:

$ curl localhost:8080/actuator/health

通过停止容器完成。

除非您使用 Dockerhub () 进行身份验证,否则无法推送映像,但那里已经有一个应该可以工作的映像。如果您已经过身份验证,则可以:​​docker login​

$ docker tag demo:0.0.1-SNAPSHOT springguides/demo
$ docker push springguides/demo

在现实生活中,镜像需要推送到 Dockerhub(或其他一些可访问的存储库),因为 Kubernetes 从其 Kubelets(节点)内部拉取镜像,这些节点通常不连接到本地 docker 守护进程。出于此方案的目的,您可以省略推送并使用已存在的映像。

对于测试,有一些解决方法可以使用不安全的本地注册表(例如),但这超出了本指南的范围。​​docker push​

将应用程序部署到 Kubernetes

现在你有一个运行并公开端口 8080 的容器,所以你只需要一些 YAML,就可以让 Kubernetes 运行它。为了避免查看或编辑 YAML,现在,您可以要求为您生成它。这里唯一可能有所不同的是名称。如果您将容器部署到自己的存储库,请使用其标记而不是此标记:​​kubectl​​​​--image​

$ kubectl create deployment demo --image=springguides/demo --dry-run -o=yaml > deployment.yaml
$ echo --- >> deployment.yaml
$ kubectl create service clusterip demo --tcp=8080:8080 --dry-run -o=yaml >> deployment.yaml

您可以根据需要获取上面生成的 YAML 并进行编辑,也可以按原样应用它:

$ kubectl apply -f deployment.yaml
deployment.apps/demo created
service/demo created

检查应用程序是否正在运行:

$ kubectl get all
NAME READY STATUS RESTARTS AGE
pod/demo-658b7f4997-qfw9l 1/1 Running 0 146m

NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/kubernetes ClusterIP 10.43.0.1 <none> 443/TCP 2d18h
service/demo ClusterIP 10.43.138.213 <none> 8080/TCP 21h

NAME READY UP-TO-DATE AVAILABLE AGE
deployment.apps/demo 1/1 1 1 21h

NAME DESIRED CURRENT READY AGE
replicaset.apps/demo-658b7f4997 1 1 1 21h
d

重复此操作,直到演示容器将其状态显示为 。​​kubectl get all​​​​Running​

现在,您需要能够连接到已在 Kubernetes 中作为服务公开的应用程序。一种方法是在开发时非常有效,方法是创建一个SSH隧道:

$ kubectl port-forward svc/demo 8080:8080

然后,您可以验证应用是否在另一个终端中运行:

$ curl localhost:8080/actuator/health
{"status":"UP"}

标签:引导,8080,Kubernetes,kubectl,demo,应用程序,Spring
From: https://blog.51cto.com/u_15326439/5971733

相关文章