在Kubernetes上构建和部署Java Spring Boot微服务

在Kubernetes上构建和部署Java Spring Boot微服务

Spring Boot是流行的Java微服务框架之一。Spring Cloud具有丰富的整合良好的Java库,可以解决作为Java应用程序堆叠一部分的执行时问题,而Kubernetes提供了丰富的功能集来执行多语言微服务。这些技术相互补充,为Spring Boot应用程序提供了一个很好的平台。

在此程式码中,我们演示了如何在Kubernetes之上部署简单的Spring Boot应用程序。这个应用程序,Office Space,模仿电影Office Space中 Michael Bolton的虚构应用创意。该应用程序利用财务计划,通过将通常四舍五入的一小部分转移到单独的银行账户来计算交易利息。

该应用程序使用Java 8 / Spring Boot微服务来计算兴趣,然后将便士的一小部分带到数据库。另一个Spring Boot微服务是通知服务。当账户余额超过50,000美元时,它会发送电子邮件。它由计算兴趣的Spring Boot网络服务器触发。前端使用Node.js应用程序,该应用程序显示Spring Boot应用程序累积的当前账户余额。后端使用MySQL数据库来储存账户余额。

用Python编写的Transaction Generator服务模拟事务并将它们推送到Compute Interest微服务。计算兴趣微服务计算兴趣,然后将便士的分数移动到要储存的MySQL数据库。数据库可以在同一部署中的容器内执行,也可以在IBM Cloud等公共云上执行。计算兴趣微服务然后呼叫通知服务以通知使用者是否已将金额存入使用者的账户。Notification服务使用IBM Cloud Function向用户传送电子邮件。此外,还可以呼叫用于向Slack传送讯息的IBM Cloud Function。使用者通过访问Node.js Web界面来检索账户余额。包含的元件

IBM Cloud Kubernetes服务:IBM Bluemix Container Service管理IBM Cloud上的Docker容器和Kubernetes丛集中的高可用性应用程序。撰写MySQL:可能是世界上最流行的开源关系数据库。IBM Cloud Functions:在高度可扩充套件的无服务器环境中按需执行程式码。特色技术

Container Orchestration:自动化容器化应用程序的部署,扩充套件和管理。数据库:用于储存和管理资料集合的储存库。无服务器:一种事件操作平台,允许您执行程式码以响应事件。

条件

使用Minikube进行本地测试,使用IBM Cloud Private或使用IBM Cloud Kubernetes Service在云中部署Kubernetes丛集。此处的程式码使用Travis 定期从IBM Cloud对Kubernetes Cluster进行测试。来自 Slack团队的Slack Incoming Webhook。(如果要在步骤4中收到测试通知。)用于建立IBM Cloud Functions的IBM Cloud Function CLI。(如果你想做第4步。)

脚步

克隆回购建立数据库服务建立Spring Boot微服务将IBM Cloud Functions与Notification服务一起使用(可选)部署微服务访问您的应用程序

1.克隆回购

克隆此储存库。在终端中,执行:

$ git clone https://github.com/IBM/spring-boot-microservices-on-kubernetes

2.建立数据库服务

后端由MySQL数据库和Spring Boot应用程序组成。每个微服务都有部署和服务。部署管理为每个微服务启动的pod。该服务为每个微服务建立一个稳定的DNS条目,以便它们可以按名称引用它们的依赖项。

有两种方法可以建立MySQL数据库后端: 在容器中使用MySQL 或 使用IBM Cloud Compose for MySQL在容器中使用MySQL (选项1)$ kubectl create -f account-database.yaml

服务“账户数据库”已建立

部署“账户数据库”建立

预设凭据已在secrets.yaml中的base64中编码。

base64中的编码不会加密或隐藏您的秘密。不要把它放在你的Github中。

$ kubectl apply -f secrets.yaml

secret demo-credentials created

继续执行第3步。

使用IBM Cloud Compose for MySQL (选项2)为MySQL提供IBM Cloud Compose。转到服务凭据并检视凭据。您的MySQL主机名,埠,使用者和密码位于您的凭证uri下,它应如下所示

您需要在Kubernetes丛集中将这些凭据作为机密应用。它应该base64编码。使用指令码./scripts/create-secrets.sh。系统将提示您输入凭据。这将对您输入的凭据进行编码,并将其作为Secrets应用于您的群集中。

$ ./scripts/create-secrets.sh

输入MySQL使用者名称:

管理

输入MySQL密码:

密码

输入MySQL主机:

主机名

输入MySQL埠:

23966建立了

秘密的“演示凭证”

您还可以使用该secrets.yaml档案并将其中的资料值编辑为您自己的base64编码凭据。然后呢kubectl apply -f secrets.yaml。

3.建立Spring Boot微服务

您需要在您的环境中安装Maven。如果要修改Spring Boot应用程序,则需要在构建Java专案和docker映象之前执行此操作。

Spring Boot微服务是Compute-Interest-API和Send-Notification。

Compute-Interest-API是一个配置为使用MySQL数据库的Spring Boot应用程序。配置位于compute-interest-api/src/main/resources/application.properties在spring.datasource.*

该application.properties配置为使用MYSQL_DB_ *环境变数。这些是在compute-interest-api.yaml档案中定义的。它已经配置为从先前建立的Kubernetes Secrets中获取值。

可以将Send-Notification配置为通过gmail和/或Slack传送通知。当MySQL数据库上的账户余额超过50,000美元时,将传送通知。

使用Maven构建专案在Maven成功构建Java专案之后,您需要使用Dockerfile各自资料夹中提供的构建Docker映象。

注意:为了模拟目的,compute-interest-api将便士的分数乘以x100,000。

转到containers / compute-interest-api

$ mvn包

转到容器/传送通知

$ mvn包

为Spring Boot服务构建Docker映象注意:这是在IBM Cloud Container Registry中推送的。

如果您计划使用IBM Cloud Container Registry,则需要先设定账户。按照这里的教程。

我们将使用IBM Cloud容器登录档来推送影象(因此命名影象),但影象也可以在Docker hub中推送。

$ docker build -t registry.ng.bluemix.net/ / compute-interest-api 。

$ docker build -t registry.ng.bluemix.net/ / send-notification 。

$ docker push registry.ng.bluemix.net/ / compute-interest-api

$ docker push registry.ng.bluemix.net/ / send-notification

修改compute-interest-api.yaml和send-notification.yaml以使用您的影象成功推送影象后,您需要修改yaml档案以使用影象。

# compute-interest-api.yaml

spec:

containers:

- image:registry.ng.bluemix.net// compute - interest- api #替换为您的影象名称

# send-notification.yaml

spec:

containers:

- image:registry.ng.bluemix.net// send - notification #替换为您的影象名称

可能有两种型别的通知,Using default email service with Notification service或者Use IBM Cloud Functions with Notification Service

使用预设电子邮件服务(gmail)和Notification服务您将需要修改环境变数中send-notification.yaml:

环境:

- 名称:GMAIL_SENDER_USER

值:“ [email protected] ” #更改为Gmail的将传送电子邮件

- 名称:GMAIL_SENDER_PASSWORD

值:“密码” #更改为上述的Gmail密码

- 名称:EMAIL_RECEIVER

值:“ [email protected] ” #更改为接收器的电子邮件

如果您不想使用IBM Cloud Functions,现在可以继续执行步骤5。

4.将IBM Cloud Functions与Notification服务一起使用

如果您想尝试IBM Cloud Functions,这是一个可选步骤

建立操作此储存库的根目录包含用于建立IBM Cloud Functions的必需程式码。您可以使用ibmcloud wskor wsk命令建立Actions 。建立传送Slack通知的操作

$ wsk action create sendSlackNotification sendSlack.js --param url https://hooks.slack.com/services/XXXX/YYYY/ZZZZ --web true

#用你的Slack团队的传入webhook网址替换网址。

建立传送Gmail通知的操作

$ wsk action create sendEmailNotification sendEmail.js --web true

测试行动您可以使用测试IBM Cloud Function Actions wsk action invoke [action name] [add --param to pass parameters]

呼叫Slack通知

$ wsk action呼叫sendSlackNotification --param text “ Hello from OpenWhisk ”

呼叫电子邮件通知

$ wsk action invoke sendEmailNotification --param sender [sender email] - param password [sender password] - param receiver [receiver email] - param subject [Email subject] - param text [Email Body]

您应该收到一个松弛的讯息并分别收到一封电子邮件。

为Actions建立REST API您可以使用为您建立的操作对映REST API端点wsk api create。它的语法是wsk api create [base-path] [api-path] [verb (GET PUT POST etc)] [action name]

为Slack Notification建立端点

$ wsk api create / v1 / slack POST sendSlackNotification

ok:为 action / _ / sendEmailNotification 建立了API / v1 / slack POST

https://service.us.apiconnect.ibmcloud.com/gws/apigateway/api/.../v1/slack

为Gmail通知建立端点

$ wsk api create / v1 / email POST sendEmailNotification

ok:为 action / _ / sendEmailNotification 建立了API / v1 / email POST

https://service.us.apiconnect.ibmcloud.com/gws/apigateway/api/.../v1/email

您可以使用以下命令检视API列表:

$ wsk api列表

好的:API

动作动词API名称URL

/Anthony.Amanse_dev/sendEmailNotificatio post / v1 https://service.us.apiconnect.ibmcloud.com/gws/apigateway/api/.../v1/email

/Anthony.Amanse_dev/testDefault post / v1 https://service.us.apiconnect.ibmcloud.com/gws/apigateway/api/.../v1/slack

记下您的API网址。您将在以后使用它们。

测试REST API URLSlack Notification的测试端点。将URL替换为您自己的API URL。

$卷曲-X POST -H \内容型别:应用程序/ JSON的\ -d \ { “文”: “从OpenWhisk你好”} \ https://service.us.apiconnect.ibmcloud.com/gws/apigateway/api /.../v1/slack

测试Gmail通知的终结点。将URL替换为您自己的API URL。用您自己的引数替换引数传送者,密码,接收者,主题的值。

$卷曲-X POST -H \内容型别:应用程序/ JSON的\ -d “ { ”文“: ”你好,从OpenWhisk“, ”主题“: ”电子邮件通知“, ”发件人“: ”[email protected]“ ,“password”:“passwordOfSender”,“receiver”:“receiversEmail”} \ https://service.us.apiconnect.ibmcloud.com/gws/apigateway/api/.../v1/email

将REST API URL新增到yaml档案确认您的API正常工作后,请将URL放入您的send-notification.yaml档案中

环境:

- 名称:GMAIL_SENDER_USER

值:“ [email protected] ” #发件人的电子邮件

- 名称:GMAIL_SENDER_PASSWORD

值:“密码” #发件人的密码

- 名称:EMAIL_RECEIVER

值:“ [email protected] ” #接收的电子邮件

- 名称:OPENWHISK_API_URL_SLACK

值:\ https : //service.us.apiconnect.ibmcloud.com/gws/apigateway/api/.../v1/slack“ #松弛通知你的API端点

-名称: SLACK_MESSAGE

值: ”您的余额超过50,000.00 $ “ #你的自定义讯息

-名称: OPENWHISK_API_URL_EMAIL

值: ” https://service.us.apiconnect.ibmcloud.com/gws/apigateway/ api /.../v1 / email \ #您的电子邮件通知的API端点

5.部署微服务

部署Spring Boot微服务$ kubectl apply -f compute-interest-api.yaml

服务“ compute-interest-api ”建立

部署“ compute-interest-api ”建立

$ kubectl apply -f send-notification.yaml

服务“传送通知”已建立

部署“传送通知”已建立

部署前端服务UI是一个Node.js应用程序,提供显示总账户余额的静态档案(HTML,CSS,JavaScript)。

$ kubectl apply -f account-summary.yaml

服务“账户摘要”已建立

部署“账户摘要”已建立

部署事务生成器服务事务生成器是一个Python应用程序,可生成累积兴趣的随机事务。建立事务生成器Python应用程序:

$ kubectl apply -f transaction-generator.yaml

服务“事务生成器”建立

部署“事务生成器”建立

6.访问您的应用程序

您可以通过群集IP和NodePort公开访问您的应用程序。NodePort应该是30080。

要找到你的IP:$ ibmcloud cs workers

ID公共IP专用IP机器型别状态

kube-dal10-paac005a5fa6c44786b5dfb3ed8728548f-w1 169.47.241.213 10.177.155.13 free normal Ready

要查询账户摘要服务的NodePort:$ kubectl获取svc

NAME CLUSTER-IP EXTERNAL-IP PORT(S)AGE

...

account-summary 10.10.10.74 80:30080 / TCP 2d

...

在您的浏览器上,转到 http://:30080

故障排除

重新开始,删除所有内容: kubectl delete svc,deploy -l app=office-space

猜你喜欢