# Spring Boot Kubernetes
本指南将引导您完成在 上部署Spring Boot应用程序的 [Kubernetes 过程](https://kubernetes.io) 。 您可以选择多种方式来使用Spring Boot和Kubernetes进行操作。 本指南的目的是使您尽快上手,而不是讨论所有替代方法或进入生产方式的所有详细信息。
有一些交互式教程可以补充和扩展 上本指南的内容 Katacoda / springguides 。 如果您遵循这些教程,则所有代码都将在浏览器中的云中运行。 或者,您可以创建自己的集群,在本地安装所需的所有工具,然后从指南中进行复制粘贴。Kubernetes上的Spring Boot入门 :与本指南相同的材料,但是在您的浏览器中运行。安装Kubernetes 安装Kubernetes :有关使用 在本地 的指南 Kind 。 如果您希望在笔记本电脑上运行教程,可以使用它在笔记本电脑上进行设置。Spring Boot的Kubernetes探针 Spring Boot的 : 活跃性和就绪性探针指南。
## 你会建立什么
[Kubernetes](https://kubernetes.io) 是一个开源系统,用于自动化容器化应用程序的部署,扩展和管理。 它将组成应用程序的容器分组为逻辑单元,以便于管理和发现。 在本指南中,我们构建并部署了一个简单的Spring引导应用程序。
您还可以 找到《 入门指南》 和《 主题指南 在Docker上 》,其中涵盖了构建容器映像的一些背景知识。
## 您将需要什么
您将需要Linux或类似Linux的命令行。 本指南中的命令行示例适用于Linux,带外壳的MacOS终端或 [WSL](https://docs.microsoft.com/en-us/windows/wsl) Windows上的 。
您还需要一个Kubernetes集群和命令行工具 [Kubectl](https://kubernetes.io/docs/tasks/tools/install-kubectl/) 。 您可以使用 本地创建集群 [Kind](https://github.com/kubernetes-sigs/kind) (在Docker上)或 在 [Minikube](https://github.com/kubernetes/minikube) 。 或者,您可以使用云提供商,例如 [Google Cloud Platform](https://console.cloud.google.com/kubernetes/) , [Amazon Web Services](https://aws.amazon.com/eks/) 或 [Microsoft Azure](https://azure.microsoft.com/en-gb/services/kubernetes-service/) 。 在继续进行之前,请确认您可以运行 `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 Boot应用程序
首先,我们创建一个Spring Boot应用程序。 如果您希望在github中使用它,则可以在终端中将其克隆( `git` 和 `java`已安装)。 另外,您可以使用start.spring.io从头开始创建应用程序:
~~~
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 Boot应用程序。 只要您已经在构建Spring Boot jar文件,您只需要直接调用插件即可。 以下命令使用 [Maven](https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/maven-plugin/html/#build-image) :
~~~
$ ./mvnw spring-boot:build-image
~~~
以下命令使用 [Gradle](https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/gradle-plugin/reference/html/#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从其Kubelet(节点)内部拉取映像,而Kubelet(节点)通常不连接到本地docker守护程序。 就此方案而言,您可以省略推送并使用已经存在的映像。
对于测试,有一些变通方法可以使 docker push 使用不安全的本地注册表(例如),但这超出了本指南的范围。
## 将应用程序部署到Kubernetes
现在您有了一个运行并公开端口8080的容器,因此,要使Kubernetes运行,您所需要的只是一些YAML。 为了避免查看或编辑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"}
~~~
- springboot概述
- springboot构建restful服务
- spring构建一个RESTful Web服务
- spring定时任务
- 消费RESTful Web服务
- gradle构建项目
- maven构建项目
- springboot使用jdbc
- springboot应用上传文件
- 使用LDNA验证用户
- 使用 spring data redis
- 使用 spring RabbitTemplate消息队列
- 用no4j访问nosql数据库
- springboot验证web表单
- Spring Boot Actuator构j建服务
- 使用jms传递消息
- springboot创建批处理服务
- spring security保护web 安全
- 在Pivotal GemFire中访问数据
- 使用Spring Integration
- 使用springboot jpa进行数据库操作
- 数据库事务操作
- 操作mongodb
- springmvc+tymleaf创建web应用
- 将Spring Boot JAR应用程序转换为WAR
- 创建异步服务
- spring提交表单
- 使用WebSocket构建交互式Web应用程序
- 使用REST访问Neo4j数据
- jquery消费restful
- springboot跨域请求
- 消费SOAP Web服务
- springboot使用缓存
- 使用Vaadin创建CRUD UI
- 使用REST访问JPA数据
- 使用REST访问Pivotal GemFire中的数据
- 构建soap服务
- 使用rest访问mongodb数据
- 构建springboot应用docker镜像
- 从STS部署到Cloud Foundry
- springboot测试web应用
- springboot访问mysql
- springboot编写自定义模块并使用
- 使用Google Cloud Pub / Sub进行消息传递
- 构建反应式RESTful Web服务
- 使用Redis主动访问数据
- Spring Boot 部署到Kubernetes
- 使用反应式协议R2DBC访问数据
- Spring Security架构
- spring构建Docker镜像详解
- Spring Boot和OAuth2
- springboot应用部署到k8s
- spring构建rest服务详解