使用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。