关于
使用NestJs开发并部署在Kubernetes上的微服务应用程序
先决条件和工具
- Nestjs
- Flutter
- Azure账户
- Kubernetes
- Terraform
- Helm
- Prometheus
- Grafana
- ArgoCD
- OpenTelemetry
概述(开发)
Koultime是一款移动应用程序,可以帮助您找到最喜欢的食物并在线订购。
前端
- 使用Flutter开发的移动应用程序
后端
- 使用Nest.js开发的微服务应用程序
选择微服务架构的原因是:
- 添加新服务的灵活性
- 当订单需求量大时,能够独立扩展订单服务的能力
服务
-
订单微服务
- 创建订单
- 获取订单列表
-
产品微服务
- 获取产品列表
- 创建新产品
-
微服务通过API网关进行通信
架构
概述(运维)
部署
-
客户端只能与API网关通信:我们应该公开公共IP。
-
对于微服务,我们应该只允许来自API网关的流量。
-
不同的应用程序隔离在自己的命名空间中(这使我们能够拥有多环境)
-
数据库连接是通过连接字符串(由MongoDB Atlas提供)建立的,并存储在Secret中。
-
我使用ConfigMap来存储API网关用于向微服务发送请求的服务名称。
工作负载健康跟踪
/health路由负责返回Pod的健康状况,该功能使用terminus包实现。
在部署定义中添加了livenessprobe,以便根据/health的响应来跟踪健康状况。
Helm
我为每个微服务创建了带有values文件的Helm图表。
在此处查看图表 此处
我使用了Prometheus和Grafana的图表进行监控。
自动化
集群的配置由第一个Terraform堆栈完成。ArgoCD的Helm发布配置由第二个Terraform堆栈完成。
部署通过ArgoCD自动化。
API网关的网络可视化
API网关的树状结构
订单微服务的树状结构
监控
指标
-
不同的指标使用Prometheus进行设置。
- CPU使用率、内存使用率、请求数量等。
-
一个业务指标称为orders,负责计算请求的订单数量。
我们可以使用Grafana可视化不同的指标。
日志
使用Nest.js的logger收集日志。
测试项目
Make sure that you have all the tools installed
- 克隆项目
- 在script文件夹下,您会找到脚本。
- 执行init_tf.bash
- 连接到集群
- 执行init_helm.bash
.gif)






