在本文中,我将解释什么是Knative以及如何将它与Spring Boot一起使用。尽管Knative是一个 serverless 无服务器平台,但我们可以在那里运行 任何类型的应用程序 (不仅仅是函数)。因此,我们将在那里运行一个标准的Spring Boot应用程序,它公开restapi并连接到数据库。
Knative介绍了一种在Kubernetes上管理应用程序的新方法。它扩展了Kubernetes,添加了一些新的关键特性。其中最重要的是“ 零缩容 ”。如果Knative检测到某个服务未被使用,它会将正在运行的实例数量缩减为零。因此,它提供了基于并发性或每秒请求数的内置自动缩放功能。我们还可以利用修订跟踪,它负责从应用程序的一个版本切换到另一个版本。有了Knative,你只需要专注于你的核心逻辑。
我上面描述的所有特性都是由名为“Knative Serving”的组件提供的。还有另外两个组件:“ Eventing
”和“ Build
”。构建组件已弃用,已被Tekton替换。事件组件需要注意。
源代码
如果你想自己试试,你可以随时看看我的源代码。为此,您需要克隆我的GitHub存储库: https://github.com/piomin/sample-spring-boot-on-kubernetes.git
我在以前的一些关于Spring Boot和Kubernetes的文章中使用了与示例相同的应用程序。我只想强调的是,在Knative上运行它不需要修改源代码中的任何内容。唯一需要的更改将在YAML清单中。
由于Knative提供了内置的自动缩放功能,您可能需要将其与Kubernetes上的水平pod自动缩放器(HPA)进行比较。
在Kubernetes上安装Knative
当然,在开始Spring Boot开发之前,我们需要在Kubernetes上安装Knative。我们可以使用kubectl CLI或操作符来完成。我决定在OpenShift上试试。这显然是最快的方法。我可以使用OpenShift无服务器操作符单击一下。无论您选择哪种类型的安装,进一步的步骤将适用于所有地方。
使用Knative CLI
此步骤是可选的。您可以使用CLI在Knative上部署和管理应用程序。将CLI下载到站点 https://knative.dev/docs/install/install-kn/ . 然后可以使用Docker映像部署应用程序。
$ kn service create sample-spring-boot-on-kubernetes \ --image piomin/sample-spring-boot-on-kubernetes:latest
我们还可以使用以下命令验证正在运行的服务的列表。
$ kn service list
对于更高级的部署,更适合使用YAML清单。我们将从skafold和Jib的源代码构建开始构建。首先,让我们简单地看一下Spring Boot应用程序。
Knative的Spring Boot应用
如前所述,我们将创建一个典型的基于Spring-Boot-REST的应用程序,该应用程序连接到Mongo数据库。数据库部署在Kubernetes上。我们的模型类使用MongoDB中的 person
集合。我们来看看。
@Document(collection = "person") @Getter @Setter @AllArgsConstructor @NoArgsConstructor public class Person { @Id private String id;