使用SDM快速部署Spring Boot应用到Kubernetes

你可能听说过Spring Boot和Kubernetes。但是您是否尝试过从头开始将Spring Boot应用程序部署到Kubernetes集群?

即使在使用Kubernetes超过3年后,想到我需要编写的YAML数量 - 或者复制和修改 - 来运行新服务,我仍然害怕。幸运的是,Atomist可以消除这种痛苦。

在这篇文章中,我将展示如何在几分钟内将新的或现有的Spring Boot应用程序部署到Kubernetes集群,而无需编写任何YAML,Dockerfile或shell脚本。您将获得没有任何CI文件的强大CD。

本文假设您可以访问Kubernetes集群和正确配置的kubectl,并且您可以在本地模式下运行Atomist Software Delivery Machine(简称SDM)(需要Node.js> = 8.1.0和npm)。如果您的系统满足这些要求,则可以跳过下一部分。

安装Minikube
探索Kubernetes的最快方式是通过Minikube,它允许您在笔记本电脑上设置和运行群集。如果您没有准备好使用Kubernetes群集,请按照以下说明设置。

对于每个操作系统,安装Minikube都是不同的,因此我
建议遵循安装指南。以下是允许我在Mac上安装Minikube的步骤:

1. 为操作系统安装VirtualBox或其他受支持的虚拟机监控程序
2. 安装Kubernetes命令行客户端kubectl
3. 通过运行安装Minikube with Homebrew brew cask install minikube

安装完成后,启动Minikube以创建新群集:

$ minikube start

安装ingress插件:

$ minikube addons enable ingress

现在运行以下命令检查本地Kubernetes集群的状态:

$ kubectl get pods --all-namespaces

几分钟后,所有系统内部窗格都应显示Running状态,并且已准备好1/1。

安装Atomist CLI
按如下方式安装Atomist CLI:

$ npm install -g @atomist/cli

如果还没有Node.js和npm,请参阅Node.js 安装指南。有关Atomist CLI的更多详细信息,请参阅开发人员快速入门。

创建软件交付计算机
当地SDM是一个进程:做繁重的事情,把
你的Spring应用程序转到到一个Docker镜像,并将其部署到Kubernetes集群。使用以下命令创建新的SDM:

$ atomist create sdm

从可能的SDM选项列表选择spring to k8,并输入GitHub的组织和存储库名称。(此时我们实际上并没有向GitHub提交任何内容。)

创建SDM后,切换到创建SDM的目录。
默认情况下,它将$HOME/atomist/<owner>/<repository>. 通过运行以下命令启动SDM:

$ atomist start --local

在SDM编译和启动时,打开另一个终端并启动Atomist feed监听器,这将允许您使用刚刚启动的SDM执行构建,停靠和部署项目的过程:

$ atomist feed --goals

部署Spring Boot示例项目
现在新的SDM正在运行,我们可以使用它从Spring Boot Rest 种子项目创建一个新的Spring Boot 项目:

$ atomist create spring

此命令将创建一个Spring Boot项目并将其提交到本地Git存储库中$HOME/atomist/<owner>/<repository>。SDM将对此存储库上的提交作出反应,将Maven构建和测试,docker构建和部署等目标安排到Minikube集群中。

然后deploy to testing目标已经完成,Spring Boot应用程序应起来了,并在Kubernetes集群开始接受访问。您可以通过运行来验证这一点:

$ kubectl get pods -n testing

当pod处于Running状态并显示就绪计数时,就可以通过导航到Atomist feed视图中输出的URL来进入应用端点。在当前这种情况下,它是:

http://spring-rest.atomist.testing.192.168.99.100.nip.io

如果该URL无法解析,则可能是您的ISP或DNS阻止了此类通配符地址,在这种情况下,你必须向本地/etc/hosts文件添加一个条目,以将主机名映射到本地Minikube IP地址。

spring-rest.atomist.testing.192.168.99.100.nip.io 192.168.99.100

从现在开始,如果本地SDM正在运行,每次提交到Spring Boot应用程序都会触发向Kubernetes集群的交付。

现在我们已经成功地将一个Spring Boot应用程序部署到了Kubernetes。


Deploy your Spring Boot application to Kubernetes