【译】如何将Spring Boot应用部署到Kubernetes上

332 阅读9分钟

来源:shutterstock.com

概述

让我们面对现实吧,为了做出令人惊叹的软件产品,开发人员总是倾向于新的工具和技术,以节省时间并在开发周期结束时提供最好的产出。在软件开发的世界里,你一定听说过Kubernetes。今天,越来越多的开发者正在使用它,原因是很明显的。Kubernetes已经成为开发者的首选,因为它是强大的部署平台之一。

在这里,我们将通过分解步骤来讨论和经历将spring boot应用程序部署到Kubernetes的整个过程。在文章的最后,你将了解到。

  • Kubernetes和Spring boot的概述
  • 初始化Spring Boot应用设置
  • 创建docker镜像
  • 在本地安装Kubernetes(你也可以叫它Minikube
  • 最后,在Kubernetes上部署spring boot应用

在进入本文有趣的部分之前,最好先掌握一下Kubernetes和Spring Boot的定义。

什么是Spring Boot?

简单地说,Spring Boot是一个基于Java的开源框架。它提供了一种用Java编写和构建应用程序的快速方法。建立在Spring框架上的应用程序可以在所有平台上执行,并被行业专家强烈推荐。虽然进入Spring框架不是小菜一碟,你必须经历一些配置上的挑战。但是一旦你通过了所有的挑战,它就可以让你用最少的投入创造出令人惊叹的应用程序。此外,你还可以利用下面的优势。

  • 对XML和JavaBeans的灵活配置
  • 自动配置,无需人工干预
  • 创建基于注释的spring应用程序
  • 减少对第三方库的依赖
  • 使得网络应用程序测试变得简单,因为它带有嵌入式HTTP服务器,如Jetty和Tomcat。

总的来说,Spring Boot让你以较少的开发工作来构建和开发应用程序,同时确保更高的生产力。

什么是Kubernetes

简单地说,Kubernetes是一个可移植的、开源的容器-编排平台,使应用程序的部署、扩展和管理自动化。最初由谷歌推出,但现在由云原生计算基金会管理,并得到谷歌、AWS、IBM、英特尔、红帽和思科等关键行业参与者的支持。使用Kubernetes,你可以在一个微服务架构中部署和操作应用程序。

今天,越来越多的组织转向云结构的架构师,他们一直在寻找一个强大而有力的平台,在这里,Kubernetes拯救了他们,并提供了几个优势,如

  • 移动速度更快
  • 具有成本效益的解决方案
  • Kubernetes与云无关

好了,这些都是吸引开发者注意的原因。如果你想了解更多关于Kubernetes的信息,你应该抽出一些时间来查看他们的官方文档。

现在进入本文的主要部分,要在Kubernetes上部署spring boot应用程序,让我们看看你需要什么。

前提条件

要想开始,请访问这个 repo,并确保你准备好以下工具。

  • Docker:用于docker镜像和部署
  • Minikube:本地Kubernetes环境
  • kubectl:如果你有mac操作系统,安装Kubernetes-cli

而且你应该对Java编程语言及其工具足够熟悉。

将Spring Boot应用程序部署到Kubernetes的步骤

让我们来详细分解每一个步骤。在这里,我们将部署一个Spring Boot应用程序,并最终获得一个可扩展和高效的Kubernetes应用程序

第1步:初始化Spring Boot应用程序设置

第一步是设置一个Spring Boot应用程序。从 Spring Initializr 网络应用程序开始,执行以下步骤。

资源。 Spring

点击 "生成项目 "按钮,几分钟后,它将下载新项目及其依赖项。这里你看到的是 "添加依赖 "选项,这意味着选择Spring Web,这样你就可以直接开始编写Hello World REST API。

让我们编写Hello World REST API

现在你已经安装了Spring Boot,用你的IDE打开项目文件夹,创建一个名为Application.kt的文件夹并添加以下代码。

包 com.baeldung.demospringboot.controller

import org.springframework.web.bind.annotation.GetMapping

import org.springframework.web.bind.annotation.RestController

@RestController

类应用 {

@GetMapping("/")

fun home():字符串 {

返回 "Hello World"。

}

}

1.2 构建和运行应用程序

现在你必须有一个嵌入Gradle的压缩文件,为了构建和运行应用程序,并确保你在正确的路径上,写下以下代码。

~/code/demos/demo-spring-boot master > ./gradlew build

启动Gradle Daemon(后续的构建会更快

> 任务 :test

2020-11-29 20:44:55.227 INFO 43582 - - [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor : 关闭ExecutorService 'applicationTaskExecutor' 。

构建成功,耗时8秒

7个可操作的任务。3个已经执行,4个正在进行中

在这之后,你会在build/libs下得到一个jar文件。你可以用java-jar build/libs/运行它。你的设置将显示Spring的旗帜和以下信息。

DemoSpringBootApplicationKt : Start DemoSpringBootApplicationKt in 1.492 seconds (JVM running for 1.852)

现在进入localhost:8080,看到 "Hello World"。

步骤2:创建Docker镜像

Kubernetes只适用于Docker镜像。这意味着你需要先将镜像停靠,以便将其推送到Docker注册中心。你可以在应用程序中创建Docker镜像,并要求Kubernetes启动你所创建的镜像的一个或多个实例。首先,从Spring Boot服务中创建一个镜像。运行以下命令来获取Docker镜像。

- "dependencies":

- "BOOT-INF/lib/dependency1.jar"

- "BOOT-INF/lib/dependency2.jar"

- "spring-boot-loader"。

- "org/"

- "snapshot-dependencies":

- "BOOT-INF/lib/dependency3-SNAPSHOT.jar"

- "BOOT-INF/lib/dependency4-SNAPSHOT.jar"

- "应用程序"。

- "BOOT-INF/classes/"

- "META-INF/"

你还可以借助Spotify开发的Maven插件构建一个Docker镜像,并将其推送到Docker注册表,因为它简单易行。如果你想用Maven插件对镜像进行docker化,你必须通过以下命令。

(项目

<程序><plugins

org.springframework.boot。

spring-boot-maven-plugin。

<版本>{gradle-project-version}。

<层数>

true</enabled

安装完毕后,在隐身浏览器中打开localhost: 8080,检查是否有以下信息。

来自Kubernetes的Hello World!

现在,最后一步是通过运行以下命令将Docker镜像推送到repo。

$ docker push myrepo/bi-admin

现在我们有了Docker镜像,直接进入了建立Kubernetes环境,可以为我们实现这些镜像。

第三步:在本地安装Kubernetes(你也可以叫它Minikube

根据 Kubernetes官方网站的介绍。

Minikube是一个强大的工具,可以让你轻松地在本地运行Kubernetes。如果你想了解更多关于Minikube的信息,你可以访问它在GitHub上的项目页面。在这里你还会了解到如何在Windows、Linux或macOS上安装和设置Kubernetes。这里你还需要Kubectl,它是一个命令行工具,可以帮助你在Kubernetes上迅速部署应用程序。输入以下命令,开始使用Kubernetes。

Minikube start

之后,你也可以使用Kubernetes仪表盘,你会看到以下图片

来源。Kubernetes

第4步:将应用程序部署到Kubernetes上

这是要执行的最后一步。所有的Kubernetes配置通常都是以YAML格式编写的,这样所有的Kubernetes配置都可以被人类读取。大多数开发人员使用YAML而不是JSON。现在我们有了docker镜像,已经在本地环境中设置了Kubernetes。现在是在Kubernetes集群上部署应用程序的时候了。为此,创建部署配置文件,其中包括应用程序应如何执行的配置。

一旦你有一个文件夹,运行下面的命令。

apiVersion: apps/v1

样。部署

元数据。

name: kubernetesdemo

标签。

应用程序: kubernetesdemo

规格。

replicas:1

选择器。

matchLabels:

应用程序: kubernetesdemo

规格。

容器。

- name: kubernetesdemo

image: yolanv/kubernetesdemo

端口。

- 容器端口: 8080

在部署一个应用程序时,你会面临很多事情。让我们来分解每一行代码,以便你能正确理解它。前两行代码都是关于你正在使用哪个API版本,以及正在使用什么样的Kubernetes对象。然后,3-6行是告诉元数据标签,这样程序员就很容易知道他们在哪个应用程序上工作。

其余的代码行解释了容器是如何制作的,以及你可以运行哪些镜像。这里的镜像是指我们在第2步创建的docker镜像。最后的部分是告诉容器应该遵循的端口,在这个例子中是8080。

这里你的工作还没有完成。你已经部署了应用程序,但它不会被集群外的人访问。因此,你需要创建一个 "桥",使外部访问成为可能。那么,如何做到这一点。不用担心,我们有Kubernetes服务

在这里,你需要创建服务,以便终端用户可以访问应用程序。按照下面的命令来创建服务

sudo kubectl expose deployment/mykubernetes-springboot - type="NodePort" - port 8080

上述命令背后的公式是,我们希望应用程序能够通过NodePort被外界访问。一旦你执行了上述命令,屏幕上就会出现 "服务'mykubernetes-springboot'已暴露 "的信息,这意味着该应用程序现在可以被任何人使用。

现在是时候访问你的应用程序了。记住,应用程序位于一个Pod中,我们已经创建了一个服务,允许我们从集群外使用该应用程序。现在访问你的浏览器,用Hello键入你的IP,你会看到应用程序已经顺利部署,可以从集群外访问。

祝贺你在这里,你已经在Kubernetes中部署了一个简单的spring root应用程序。

总结

我们希望本指南能帮助你将Spring Boot应用部署到Kubernetes。在这里,我们讨论了Spring Boot应用和Kubernetes的概况,如何创建docker镜像以及如何部署Kubernetes服务。那么,你还在等什么呢?现在就去部署你的应用程序吧。

这篇深度文章由Elluminati Inc.的营销官Brijesh Vadukia撰写和分享,他喜欢帮助品牌在全球数字世界推广他们的业务。


将Spring Boot应用部署到Kubernetes最初发表在Dev Genius的Medium上,人们通过强调和回应这个故事继续对话。