Azure Kubernetes 服务 (AKS) 中的有状态工作负载

本文概述了如何在 Azure Kubernetes 服务 (AKS) 上运行有状态工作负载。

什么是有状态工作负载?

有状态工作负载是一种应用程序,它使用持久性数据存储在多个实例之间保留状态,确保无缝和个性化的用户体验。 这种设计对于在线银行、在线购物和电子邮件等服务至关重要,因为这些服务需要保证数据一致性、会话历史记录和可靠性。 有状态工作负载还可以在高性能和准实时处理场景中提高效率,这些场景受益于故障转移和恢复等高级功能,确保业务连续性。

虽然有状态工作负载提供了许多好处,但它们也存在一些挑战。 例如,有状态工作负载通常会引入复杂的处理模式,这可能会导致开销和性能成本增加。 请务必了解并考虑应用程序的特定需求,以帮助确定有状态与无状态之间的适当平衡。

鉴于有状态工作负载的关键作用,Azure 提供了多种有效的运行方法。 本部分概述了在 Azure Kubernetes 服务 (AKS) 上部署有状态工作负载的最佳做法,帮助开发人员和组织选择最适合自己需求的选项。

Kubernetes 有状态框架基础堆栈

Kubernetes 有状态框架建立在通用基础堆栈之上。 在本案例中,我们使用 KATE 堆栈,这是一种流行且标准化的堆栈,广泛应用于许多基础结构项目中。 KATE 堆栈使用以下开放源代码工具

AKS 指南没有实现 ArgoCD 或 Terraform,因为它们是专为初始运营而设计的。 不过,随着部署规模的扩大和需求的变化,将更容易集成 ArgoCD 和 Terraform,因为这些指南使用了部分 KATE 堆栈。

适用于 Azure 的 Kubernetes 有状态框架

建立基础堆栈后,我们现在需要增强框架,以支持 Azure 上的有状态工作负载,特别是通过集成在 Azure Kubernetes 服务 (AKS) 上运行数据基础结构所需的基本资源。

支持复杂的有状态工作负载(如数据库或消息队列)需要比临时选项更高的存储能力。 具体而言,我们需要能够提供更高的复原能力和可用性的系统,以应对各种事件,例如应用程序故障或将工作负载重新分配到不同的主机。 可以通过使用 PersistentVolume 子系统来实现此目的,该子系统包括三个互连的 Kubernetes 资源:PersistentVolumes、PersistentVolumeClaims 和 StorageClasses。 该子系统提供了一个 API,供用户和管理员从存储的使用方式中提取出提供存储的方式的详细信息。

大多数有状态工作负载都需要机密中的数据,例如连接字符串、用户名、密码和证书。 Azure Key Vault 提供了一个安全的机密存储,可用于保存必要的有状态框架机密。

我们还需要一个 Kubernetes 控制器或 Kubernetes 操作员,例如机密存储 CSI 驱动程序External Secrets Operator,以将机密存储库中的机密同步为 Kubernetes 机密。

显示适用于 Azure 的 Kubernetes 有状态框架的关系图的屏幕截图。

在 Azure 上设计和部署有状态工作负载

以下部分提供了有关在 Azure 上设计和部署有状态工作负载场景信息的链接。

MongoDB

PostgreSQL

Valkey

作者

本文由 Microsoft 维护, 最初由以下贡献者撰写:

  • Don High | 首席客户工程师
  • Colin Mixon | 产品经理
  • Erin Schaffer | 内容开发人员 2