<返回更多

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

2019-08-28    
加入收藏

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数据库来存储帐户余额。

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

 

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

包含的组件

特色技术

条件

脚步

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

1.克隆回购

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

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

2.创建数据库服务

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

$ kubectl create -f account-database.yaml
服务“帐户数据库”已创建
部署“帐户数据库”创建

默认凭据已在secrets.yaml中的base64中编码。

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

$ kubectl Apply -f secrets.yaml
secret "demo-credentials" created

继续执行第3步。

为MySQL提供IBM Cloud Compose。转到服务凭据并查看凭据。您的MySQL主机名,端口,用户和密码位于您的凭证uri下,它应如下所示

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

 

您需要在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成功构建Java项目之后,您需要使用Dockerfile各自文件夹中提供的构建Docker镜像。

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

转到containers / compute-interest-api
$ mvn包
转到容器/发送通知
$ mvn包

注意:这是在IBM Cloud Container Registry中推送的。

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

我们将使用IBM Cloud容器注册表来推送图像(因此命名图像),但图像也可以在Docker hub中推送。

$ docker build -t registry.ng.bluemix.net/ < YOUR_NAMESPACE > / compute-interest-api 。
$ docker build -t registry.ng.bluemix.net/ < YOUR_NAMESPACE > / send-notification 。
$ docker push registry.ng.bluemix.net/ < YOUR_NAMESPACE > / compute-interest-api
$ docker push registry.ng.bluemix.net/ < YOUR_NAMESPACE > / send-notification

成功推送图像后,您需要修改yaml文件以使用图像。

# compute-interest-api.yaml 
 spec:
 containers:
 - image:registry.ng.bluemix.net/< namespace>/ compute - interest- api #替换为您的图像名称
# send-notification.yaml 
 spec:
 containers:
 - image:registry.ng.bluemix.net/< namespace>/ send - notification #替换为您的图像名称

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

您将需要修改环境变量中send-notification.yaml:

 环境:
 - 名称:GMAIL_SENDER_USER 
 值:“ username@gmail.com ” #更改为Gmail的将发送电子邮件 
 - 名称:GMAIL_SENDER_PASSword 
 值:“密码” #更改为上述的Gmail密码 
 - 名称:EMAIL_RECEIVER 
 值:“ sendTo@gmail.com ” #更改为接收器的电子邮件

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

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

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

创建发送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]

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

您可以使用为您创建的操作映射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网址。您将在以后使用它们。

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

$卷曲-X POST -H '内容类型:应用程序/ JSON的' -d ' { “文”: “从OpenWhisk你好”} ' https://service.us.apiconnect.ibmcloud.com/gws/apigateway/api /.../v1/slack
在Kubernetes上构建和部署Java Spring Boot微服务

 

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

$卷曲-X POST -H '内容类型:应用程序/ JSON的' -d “ { ”文“: ”你好,从OpenWhisk“, ”主题“: ”电子邮件通知“, ”发件人“: ”testemail@gmail.com“ ,“password”:“passwordOfSender”,“receiver”:“receiversEmail”} ' https://service.us.apiconnect.ibmcloud.com/gws/apigateway/api/.../v1/email
在Kubernetes上构建和部署Java Spring Boot微服务

 

确认您的API正常工作后,请将URL放入您的send-notification.yaml文件中

环境:
- 名称:GMAIL_SENDER_USER 
 值:“ username@gmail.com ” #发件人的电子邮件 
- 名称:GMAIL_SENDER_PASSWORD 
 值:“密码” #发件人的密码 
- 名称:EMAIL_RECEIVER 
 值:“ sendTo@gmail.com ” #接收的电子邮件 
- 名称: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.部署微服务

$ kubectl apply -f compute-interest-api.yaml
服务“ compute-interest-api ”创建
部署“ compute-interest-api ”创建
$ kubectl apply -f send-notification.yaml
服务“发送通知”已创建
部署“发送通知”已创建

UI是一个Node.js应用程序,提供显示总帐户余额的静态文件(htmlcssJavaScript)。

$ kubectl apply -f account-summary.yaml
服务“帐户摘要”已创建
部署“帐户摘要”已创建

创建事务生成器Python应用程序:

$ kubectl apply -f transaction-generator.yaml
服务“事务生成器”创建
部署“事务生成器”创建

6.访问您的应用程序

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

$ ibmcloud cs workers < cluster-name >
ID公共IP专用IP机器类型状态 
kube-dal10-paac005a5fa6c44786b5dfb3ed8728548f-w1 169.47.241.213 10.177.155.13 free normal Ready 
$ kubectl获取svc
NAME CLUSTER-IP EXTERNAL-IP PORT(S)AGE
...
account-summary 10.10.10.74 < nodes > 80:30080 / TCP 2d
...
在Kubernetes上构建和部署Java Spring Boot微服务

 

故障排除

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>