本文介绍如何在部署 Azure Kubernetes 服务 (AKS) 后,对使用云原生计算基金会 (CNCF) 中项目的应用程序执行概念化、构建、生成和部署操作。 体系结构描述了 GitHub 上的 CNCF 项目应用。 存储库中的设置说明提供了部署体系结构的步骤。
体系结构
下载此体系结构的 Visio 文件。
工作负载是一个简单的 Web 应用程序,员工可以使用它提交和查看开支报表。 当有员工提交开支报表时,该员工的经理会收到一封电子邮件。
工作流
应用程序流
1. 员工通过 NGINX 入口访问 Web 应用以提交开支。
2. Web 应用调用 API 应用来检索员工的经理。
3. Web 应用将创建开支报表时生成的消息推送到 Knative 代理。
4. 开支报表保存在 MySQL 中。
5. Knative 触发电子邮件调度程序函数,并将费用消息作为有效负载。
6. 电子邮件调度程序创建 SendGrid 消息。
7. SendGrid 将电子邮件发送给检索到的经理以供审阅。
DevOps 流
a. 开发人员在 Visual Studio Code 中编写或更新代码。
b. 开发人员在 Visual Studio Code 中将代码从本地工作区推送到 GitHub。
c. GitHub Webhook 触发克隆 GitHub 代码的 Tekton 管道。
d. 管道生成并将容器映像推送到 Harbor 注册表。
e. Tekton 部署 Web 应用、API 应用和电子邮件调度程序应用程序。
f. Prometheus 捕获应用程序指标。
g. 工程师监视 Grafana 仪表板上的指标。
h. DevOps 工程师监视 Grafana 仪表板。
基础结构
i. AKS 群集基于 AKS 基线中提供的基础结构。
ii. Rook Ceph 用于群集存储。
iii. Linkerd 服务网格。
iv. 用于 Kubernetes 群集上的整体应用程序跟踪的 Jaeger。
群集操作
你可能会发现,使用 GitOps 管理来管理群集和群集启动会非常有利。 Flux 是一个常见的 GitOps 操作符。 它通常与 GitHub Actions 配对,以对更新的清单和 Helm 图表启用验证。
组件
Azure
- Azure Kubernetes 服务 (AKS)。 提供托管的群集基础结构。
开源软件
- Kubernetes。 CNCF。 对容器化应用程序自动进行部署、缩放和管理。
- Flux: CNCF。 GitOps 提供程序用于基础结构交付。
- Rook CNCF。 为群集提供存储管理。
- Harbor CNCF。 映像的容器注册表。
- Linkerd CNCF。 与 OpenFaaS、NGINX、Prometheus 和 Jaeger 集成的服务网格。
- Prometheus CNCF。 捕获应用程序指标。
- Jaeger CNCF。 在 Kubernetes 群集上提供整体应用程序跟踪。
- Knative。 CNCF。 用于生成无服务器和事件驱动的应用程序。 部署电子邮件调度程序函数。
- MySQL: 用于存储开支报表的数据库。
- NGINX: 员工用于访问 Web 应用以提交开支报表的 Kubernetes 入口控制器。
- Tekton: 用于持续集成/持续部署 (CI/CD) 的持续交付基金会项目。 部署 Web 应用、API 应用和电子邮件调度程序应用程序。
- Grafana: 应用程序指标的仪表板。
- SendGrid: 外部电子邮件服务,用于将电子邮件发送给经理进行开支报表审阅。
- GitHub: 代码存储库。 Tekton 管道使用 GitHub 代码。
- .NET Core。 用于 Web 前端和 Web API。
- Flux: 提供 GitOps 管理。
备选方法
此项目使用 CNCF 分级和孵化项目。 所用的服务可能有多个备选方法。 有关备选方法,请参阅 CNCF 网站。 下面是介绍其中一些备选方法的部分资源:
- 服务网格选项对比
- 函数即服务(无服务器)备选方法
- Vitess:基于 Kubernetes 的分片 MySQL
- 使用 Zipkin 和 OpenTracing 监视微服务
- 具有以开发人员为中心体验的 GitOps
可以考虑将各种 Azure 服务作为备选方法。 例如,Web 应用程序路由、Azure 容器注册表、Azure 容器存储、Azure Monitor、适用于 Prometheus 的 Azure Monitor 托管服务、Azure 托管 Grafana。
Microsoft 还支持开源软件项目作为 AKS 中的托管加载项/派生项目,包括 NGINX、Istio、Prometheus、Grafana 和 OpenEBS。
方案详细信息
可以在任何 Kubernetes 群集上部署此体系结构,而不仅仅限于 AKS。 它为 AKS 平台的灵活性提供了一个示例。 可使用 AKS 在 Azure 中轻松地部署托管的 Kubernetes 群集。
阅读本文后,你将对如何部署一个主要由 CNCF 项目组成的典型应用程序有一个很好的了解。
可能的用例
其他这些用例采用类似的设计模式:
- 创建适用于基于容器的工作负载的 CI/CD 管道
- 使用适用于 AKS 的 GitOps
注意事项
这些注意事项实施 Azure 架构良好的框架的支柱原则,即一套可用于改善工作负荷质量的指导原则。 有关详细信息,请参阅 Microsoft Azure 架构良好的框架。
- 对于 Kubernetes 群集,至少需要一个具有虚拟机 (VM) SKU DS2_v2 或更大的 3 节点用户节点池。
- 不能跨区域附加使用 Azure 托管磁盘的卷。 它们必须位于同一区域中。
- Rook 安装可能需要 20 - 25 分钟的时间。 请先确保已完全预配 Ceph 群集,然后再继续下一步。
- Jaeger 设置大约需要 5 分钟的时间。
- Linkerd 大约需要 12 分钟才能出现在仪表板中。
成本优化
成本优化是关于寻找减少不必要的费用和提高运营效率的方法。 有关详细信息,请参阅成本优化支柱概述。
可以使用 Azure 定价计算器来估算成本。 下面是在 Azure 中运行此项目的一些定价注意事项。 适用于可忽略不计的带宽费用。
虚拟机规模集
适用于 AKS 群集的 Azure 虚拟机规模集中使用的 VM 会产生费用。 有关详细信息,请参阅虚拟机规模集定价。
存储
存储成本适用于 Rook 安装所需的每个数据磁盘。 对于这个 3 节点的 AKS 群集,Rook 配置为每个节点使用了两个数据磁盘:1 GB 磁盘和 200 GB 磁盘。 有关详细信息,请参阅存储成本定价。
负载均衡器
与此 AKS 群集关联的负载均衡器会产生费用。 有关详细信息,请参阅负载均衡器定价。
虚拟网络
AKS 群集使用的虚拟网络会产生费用。 有关详细信息,请参阅虚拟网络定价。
部署此方案
从 Azure/cloud-native-app GitHub 存储库部署此方案。 按照提供的顺序执行设置说明,在环境中部署 CNCF 项目应用。
此存储库是一个社区项目。 它接受并批准来自社区的增强和修改的拉取请求 (PR)。