- 使用 Spring Initializr 创建 Spring Boot 应用程序
- 在Spring Boot中配置Cassandra
- 在 Spring Boot 上配置 Tomcat 连接池
- 将Camel消息路由到嵌入WildFly的Artemis上
在本教程中,我们将学习如何使用 Minikube 和 JKube Maven 插件在 Kubernetes 上安装 Spring Boot 应用程序。
Kubernetes 是一个开源系统,用于跨多个主机管理容器化应用程序。它为应用程序的部署、维护和扩展提供了基本机制。开始使用 Kubernetes 的最简单方法是安装 Minikube。
Minikube 是一个轻量级的 Kubernetes 实现,它在您的本地机器上创建一个 VM,并部署一个包含单个节点的简单集群,并附带一个 CLI,该 CLI 提供用于使用集群的基本引导操作,包括启动、停止、状态、并删除
安装 Minikube 的详细过程在:https://minikube.sigs.k8s.io/docs/start/
要安装二进制发行版,您只需下载它并在其上运行“安装”命令:
$ curl -LO https://storage.googleapis.com/minikube/releases/latest/minikube-linux-amd64 $ sudo install minikube-linux-amd64 /usr/local/bin/minikube
完成后,启动“minikube start”命令,该命令将为您的环境选择驱动程序并下载运行 Kubernetes 组件所需的虚拟机:
minikube start
😄 minikube v1.15.1 on Fedora 29
▪ KUBECONFIG=/home/francesco/taskforce/install/auth/kubeconfig
✨ Using the kvm2 driver based on existing profile
👍 Starting control plane node minikube in cluster minikube
🎉 minikube 1.24.0 is available! Download it: https://github.com/kubernetes/minikube/releases/tag/v1.24.0
💡 To disable this notice, run: 'minikube config set WantUpdateNotification false'
🔄 Restarting existing kvm2 VM for "minikube" ...
🐳 Preparing Kubernetes v1.19.4 on Docker 19.03.13 ...
🔎 Verifying Kubernetes components...
🔎 Verifying registry addon...
🌟 Enabled addons: default-storageclass, storage-provisioner, registry, dashboard
❗ /usr/local/bin/kubectl is version 1.15.3, which may have incompatibilites with Kubernetes 1.19.4.
▪ Want kubectl v1.19.4? Try 'minikube kubectl -- get pods -A'
🏄 Done! kubectl is now configured to use "minikube" cluster and "default" namespace by default
接下来,验证 default 和 kube-system 服务是否可用:
minikube service list
|----------------------|-----------------------------|--------------|-----|
| NAMESPACE | NAME | TARGET PORT | URL |
|----------------------|-----------------------------|--------------|-----|
| default | kubernetes | No node port |
| kube-system | kube-dns | No node port |
| kube-system | registry | No node port |
| kubernetes-dashboard | dashboard-metrics-scraper | No node port |
| kubernetes-dashboard | kubernetes-dashboard | No node port |
|----------------------|-----------------------------|--------------|-----|
太好了,您的 Kubernetes 集群现已启动并运行。
然后,为了使用 Minikube 的 Docker 实例构建 Docker 镜像,执行:
$ eval $(minikube docker-env)
命令 minikube docker-env 返回一组 Bash 环境变量导出,以配置您的本地环境以重用 Minikube 实例内的 Docker 守护程序。
如果您未能配置您的 Minikube 环境,您将在部署资源时看到错误:“Connection reset by peer”
我们将在 Minikube 上部署一个最小的 Spring Boot 应用程序,其中只有一个 Hello World 控制器:
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class HelloController {
@RequestMapping("/")
public String index() {
return "Greetings from Spring Boot!!";
}
}
为了在 Kubernetes 上部署这个 Spring Boot 应用程序,我们将使用 JKube。
Eclipse JKube 是一组插件和库,用于使用 Docker、JIB 或 S2I 构建策略构建容器镜像。 Eclipse JKube 也在编译时生成和部署 Kubernetes/OpenShift 清单。
要使用 JKube,只需将其作为 Maven 插件添加到您的项目中:
<?xml version="1.0" encoding="UTF-8"?><profile>
<id>kubernetes</id>
<build>
<plugins>
<plugin>
<groupId>org.eclipse.jkube</groupId>
<artifactId>kubernetes-maven-plugin</artifactId>
<version>${jkube.version}</version>
<configuration>
<resources>
<labels>
<all>
<testProject>spring-boot-sample</testProject>
</all>
</labels>
</resources>
<generator>
<includes>
<include>spring-boot</include>
</includes>
<config>
<spring-boot>
<color>always</color>
</spring-boot>
</config>
</generator>
<enricher>
<excludes>
<exclude>jkube-expose</exclude>
</excludes>
<config>
<jkube-service>
<type>NodePort</type>
</jkube-service>
</config>
</enricher>
</configuration>
<executions>
<execution>
<goals>
<goal>resource</goal>
<goal>build</goal>
<goal>helm</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
在 Kubernetes 上部署应用程序,只需要 3 个简单的步骤:
mvn clean k8s:resource -Pkubernetes
然后通过达到构建目标来启动 docker build。
mvn package k8s:build -Pkubernetes
最后,在 Kubernetes 集群上部署您的应用程序:
mvn k8s:deploy -Pkubernetes
部署后,您可以看到 Kubernetes 集群内运行的 pod:
$ kubectl get pods
NAME READY STATUS RESTARTS AGE
spring-boot--5b7d6dfb6f-2nsnm 1/1 Running 0 23s
您可以尝试使用 minikube 服务命令访问您的应用程序,如下所示:
$ minikube service spring-boot
|-----------|-------------|-------------|----------------------------|
| NAMESPACE | NAME | TARGET PORT | URL |
|-----------|-------------|-------------|----------------------------|
| default | spring-boot | http | http://192.168.39.76:32429 |
|-----------|-------------|-------------|----------------------------|
Opening service default/spring-boot in default browser...
请注意,有一个影响某些 JDK 的已知问题:https://bugs.openjdk.java.net/browse/JDK-8236039
发生这种情况时,客户端会抛出异常:
“javax.net.ssl.SSLHandshakeException:扩展名 (5) 不应出现在证书请求中”
发生这种情况是因为 JDK 11 及更高版本支持可能导致上述错误的 TLS 1.3。
您可以通过将属性 -Djdk.tls.client.protocols=TLSv1.2 设置为 JVM 参数以使其使用 1.2 来解决此问题。作为替代方案,更新到最新版本 od JDK(在 JDK 15 中已完全解决)。
在 Kubernetes 上享受 Spring Boot!
您可以在以下位置找到此 Maven 项目的源代码:https://github.com/eclipse/jkube/tree/master/quickstarts/maven/spring-boot
有人可以解释一下 spring-boot-parent 和 spring-boot-starter-parent 之间的区别吗,正如我在下面附加的 GIT HUB 代码链接之一中看到的,他们为 spr
我有与 jersey 框架集成的 Spring Boot 应用程序。 现在,当我尝试运行该应用程序时,它只是停留在 Spring 启动徽标上,之后没有任何 react 。 我也尝试添加 -X ,但徽标
我指的是 Spring Boot 关于 的文档自动配置 和 执行器 模块: 自动配置: Spring Boot AutoConfiguration attempts to automatically
我正在尝试将 apache log4j 集成到我的 Spring boot 应用程序中。这是我的 build.gradle 文件: build.gradle buildscript { rep
使用 Spring Boot Maven 插件的以下命令在生产中启动 Spring Boot 应用程序是否是一个好主意或实践? mvn spring-boot:run 最佳答案 不,这是个坏主意。 您
据我所知,spring boot 和 spring session 为我们提供了一站式自动配置,但是当我的应用程序使用 session redis 和应用程序缓存 redis 时,不是同一个 redi
我希望使用Spring Boot创建一个新的Web应用程序。不幸的是,我的服务器在技术堆栈方面相当有限。它安装了Java 5。 谁能告诉我spring boot是否可以在Java 1.5上运行以及什么
我有3个实体 CarWash(设置Wash) Wash(car_wash_id FK到CarWash) WashComment(wash_id FK到Wash) 有什么办法可以写这个查询 @Qu
我一直在关注this文章。 我正在尝试在Spring-boot应用程序中优雅地处理gRPC错误,的主要目标是能够在gRPC客户端中获取错误状态。 在上面的文章之后,我坚持为异常添加拦截器。如何在Spr
我有一个要使用的自定义log4j布局插件。在IntelliJ中运行或与./gradlew bootRun一起运行时,插件可以正常工作。不使用./gradlew bootJar构建启动jar。 启用-D
我想在给定范围 (5001-5100) 的随机端口上启动 Spring Cloud 应用程序(Spring Boot 1.5.14,Spring Cloud Edgware.SR4)。我知道我们可以使
任何人都可以向我展示或指出不使用 spring boot gradle 插件的 spring boot gradle 项目。 我正在寻找类似不使用 gradle 插件的 spring boot sta
我当时尝试包含上述依赖项之一,但找不到任何区别: spring boot starter web:我可以看到 Flux 和 Mono 类并制作一个响应式(Reactive)休息 Controller
我们一直在为我们的应用程序使用 Springboot 1.X。 现在准备开始一些新的应用程序,想知道我们是应该使用 SpringBoot2.0 还是坚持使用 SpringBoot 1.X? 对一种方式
我希望记录应用程序正在加载 application-profile.propeties 或 application.yml。怎么做。在哪种方法中,我可以听取它并检测它是成功加载还是失败。 最佳答案 您
当我在 pom.xml 中添加简单的 spring-boot-starter-data-jpa 依赖项时,在 pom.xml 文件中出现错误。如果我删除该依赖项,则不会再有错误。我不确定为什么会发生这
我希望记录应用程序正在加载 application-profile.propeties 或 application.yml。怎么做。在哪种方法中,我可以听取它并检测它是成功加载还是失败。 最佳答案 您
我在网上看了很多关于 spring-boot-devtools 的文章和问题,但仍然无法弄清楚为什么它对我不起作用。每次运行我的应用程序时,我都会得到以下信息: 17:54:28.057 [main]
我正在尝试将现有的 Spring 应用程序移植到 Spring Boot。我不使用 spring-boot-starter-data-solr 启动器,但是我的类路径上有 apache solrj (
(这主要是一个历史问题。Pivotal 建议所有论坛讨论都在 StackOverflow 上进行,这就是我在这里问它的原因。) Spring Boot 项目用来证明将应用程序的类和依赖项从可执行 ja
我是一名优秀的程序员,十分优秀!