你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Azure Kubernetes 服务 (AKS) 的存储注意事项

若要运行特定的应用程序工作负荷,组织或企业需要设计合适的Azure Kubernetes 服务(AKS)平台级功能。 这些工作负载可能具有不同的存储要求。 为应用程序选择正确的存储解决方案时,需要考虑多个注意事项,包括性能、可用性、可恢复性、安全性和成本。 本文的目的是指导你为工作负荷选择正确的选项或选项组合。

Kubernetes 可以同时运行无状态工作负荷和有状态工作负荷。 有状态工作负荷通常需要存储解决方案来存储状态。 AKS 支持用于本机存储的多个集成选项,包括托管数据库、磁盘(或块)以及文件和 Blob(或对象)存储。 上述每个选项均提供不同的 SKU、大小和性能特征。 选择正确的选项需要仔细考虑。

本文介绍在“选择正确的存储服务和设计注意事项”中需要考虑的因素和选项。 它在设计建议中 提供特定建议

选择正确的存储服务

为初始部署选择正确的 SKU 和大小需要一些评估,并且可能还需要概念证明或测试环境。 以下是帮助你开始使用 AKS 存储的高级准则:

  • 结构化数据。 对于应用程序可以存储在平台(例如 Azure SQL)上提供的托管数据库中的结构化数据,我们建议使用托管数据库。

  • 非结构化数据。 对于非结构化数据(如照片、视频和文本文档),请使用 Blob 存储。 应用程序可以使用通过网络文件系统(NFS)装载为文件的 Blob 或使用 BlobFuse 作为虚拟文件系统进行访问来执行此操作。 或者,应用程序可以直接读取和写入 Blob 存储。

  • 共享应用程序数据。 对于需要高性能的共享应用程序数据,请使用Azure NetApp 文档层或Azure 文件存储的高级。 对于仅需要有限性能的共享配置数据,请使用Azure 文件存储的标准层。

  • 应用程序与存储请求的带宽。 确保节点有足够的网络带宽来处理应用程序请求和存储请求。 存储流量通过网络堆栈,传输协议是服务器消息块(SMB)还是 NFS。

  • 低延迟,高 IOPS。 如果应用程序需要持续低延迟的消息传递应用程序和每秒高 I/O 操作(IOPS)和高吞吐量来在 Kubernetes 上运行自己的数据库,请使用磁盘进行存储。 为了获得最佳性能,请考虑使用 Azure 高级版 SSD、Azure 高级版 SSD v2 或 Azure 超级磁盘存储

设计注意事项

以下注意事项适用于为 AKS 设计存储。 考虑 AKS 环境中需要存储的位置,并确定每个要求的最佳解决方案。

操作系统 (OS) 磁盘

对于操作系统(OS)磁盘,请考虑以下因素:

  • OS 的临时磁盘。 Azure 中的每个虚拟机(VM)都需要磁盘作为其 OS。 由于 Kubernetes 节点是临时节点,因此 AKS 默认在受支持的 VM 大小上使用临时 OS 磁盘。 有关临时 OS 磁盘的更多信息,请参阅临时 OS

  • OS 的托管磁盘。 如果工作负荷需要它们,可以改为对 AKS 群集中的节点使用常规托管磁盘。 这样做支持需要 OS 驱动器上的持久性数据的工作负荷。 有关持久性存储选项的详细信息,请参阅 Azure Kubernetes 服务 (AKS) 中应用程序的存储选项。

  • 调整托管磁盘的大小。 如果选择托管磁盘作为 OS 磁盘,请确保其大小适当,以支持 OS、Kubernetes 系统和工作负荷的要求。 有关选项和差异的详细信息,请参阅 Azure 托管磁盘类型

应用程序数据

某些工作负荷需要一致的数据存储来存储应用程序数据。 如果应用程序需要数据库,请考虑浏览 Azure 中的托管数据库,其中包括以下选项:

AKS 中的存储解决方案

如果托管数据库不符合应用程序的需求,请考虑使用可供 AKS 使用的另一个存储选项来存储一致的数据。 选项包括基于磁盘的解决方案、临时磁盘、基于文件的解决方案、Blob 存储以及本文未涵盖的其他选项。

基于磁盘的解决方案

磁盘或块存储非常适合直接在基于块的原始设备上存储数据。 基于磁盘的存储非常适合用于存储 Kubernetes 群集托管的数据库的数据。 在 Azure 中,托管磁盘是获取基于块的存储的解决方案。

  • 静态或动态创建的磁盘存储。 请考虑是使用在 AKS 外部创建的静态磁盘,还是希望 AKS 以 Pod 或 Pod 的形式动态创建磁盘存储。 也可以动态删除动态创建的存储。 有关详细信息,请参阅:

  • 冗余和性能。 请考虑工作负荷所需的存储冗余和性能。 有关详细信息,请参阅:

  • 共享磁盘。 考虑是否需要共享磁盘。 有关选项的详细信息,请参阅 共享 Azure 托管磁盘

  • 磁盘和吞吐量的节点大小。 考虑 Kubernetes 节点的大小。 它必须足够大,才能同时支持磁盘数和聚合吞吐量要求。 有关大小和特征的信息,请参阅 Azure 中虚拟机的大小。

  • 磁盘大小和所需的性能。 请考虑是否根据工作负荷的性能要求适当调整托管磁盘的大小。 随着标准 HDD、标准 SSD 和 高级版 SSD v1 的磁盘大小增加,性能也会增加。 有关托管磁盘的详细信息,请参阅 Azure 托管磁盘类型

临时磁盘解决方案

请考虑应用程序是否需要非持久性临时存储,或者想要在存储优化 VM 中使用高性能驱动器的位置。 若要连接到临时卷,可以使用 Kubernetes 中的 emptyDir 选项或 CSI 临时本地卷驱动程序。 建议 为临时数据(如暂存空间)使用 emptyDir 。 对于存储优化 VM 系列的存储,建议将 CSI 与临时本地卷配合使用。 有关 CSI 驱动程序的详细信息,请参阅 Azure Kubernetes 服务 (AKS) 上的容器存储接口 (CSI) 驱动程序。

基于文件的解决方案

考虑 Pod 是否需要共享文件系统。 共享文件系统非常适合在 Kubernetes 群集中由多个 Pod 读取和共享的应用程序和配置数据。 文件存储通过 NFS 或 SMB/Common Internet 文件系统(CIFS)公开共享文件系统。 Azure 有两种基于文件的存储解决方案:Azure 文件存储和Azure NetApp 文档。

Azure 文件

对于Azure 文件存储,请考虑以下选项:

  • 静态或动态创建的文件共享。 考虑是使用在 AKS 外部创建的静态文件共享,还是希望 AKS 代表你动态创建文件共享。 有关详细信息,请参阅:

  • 标准或高级性能。 评估标准性能是否足够,或者是否需要Azure 文件存储的高级性能。

  • SMB/CIFS 或 NFS。 若要访问Azure 文件存储,请评估工作负荷是否应将 API 用于默认协议、SMB/CIFS,还是工作负荷需要 NFS 支持。

  • 用于访问的网络模型。 请考虑用于访问Azure 文件存储的网络模型:通过直接公共 IP 地址、服务终结点或专用链接进行访问。

Azure NetApp 文件

对于Azure NetApp 文档,请考虑以下选项:

Blob 存储

请考虑应用程序需要存储的非结构化数据量。 可以通过 HTTP API 或 SDK 访问 Azure Blob 存储。 将 Blob 存储作为文件系统装载到容器或 Pod 非常适合具有大量非结构化数据的应用程序工作负荷,例如日志文件、图像、文档、流式处理媒体和灾难恢复数据。

  • 数据冗余。 考虑哪些数据冗余适合应用程序。 有关详细信息,请参阅 Azure 存储冗余。 在存储帐户级别选择数据冗余。

  • 性能层。 考虑应用程序所需的 Blob 存储的性能层。 有关详细信息,请参阅 Blob 数据的热访问层、冷访问层和存档访问层

  • 用于访问的身份验证方法。 请考虑应用程序应用于访问 Blob 存储的身份验证方法:存储密钥、SAS 或 Microsoft Entra ID。 有关详细信息,请参阅授权访问 Azure 存储中的数据

  • 用于抽象 Blob 存储的 API。 请考虑使用哪个 API。 通常,通过其中一个 SDK 使用应用程序中访问 Blob 存储的应用程序使用 API,后者从 Kubernetes 群集抽象化与 Blob 存储的交互。 有关各种编程语言的库的详细信息,请参阅 Azure Blob 存储简介。

  • 静态或动态创建的 Blob 存储。 请考虑是使用在 AKS 外部创建的静态 Blob 存储容器,还是希望 AKS 代表你动态创建 Blob 存储容器。 有关详细信息,请参阅:

  • 用于访问存储的驱动程序。 请考虑应用程序应如何访问 Blob 存储。 若要以文件系统的形式访问它,可以在 Kubernetes 中使用 blob CSI 驱动程序 。 此驱动程序允许通过 NFSv3 协议 或通过 fuse 驱动程序访问 Blob 存储。

其他存储解决方案

如果应用程序需要本文未介绍的内容,请考虑其他类型的存储。 Azure 中有多个专用存储解决方案可以与 Kubernetes 集成。 本文未介绍这些解决方案,但以下列表标识了可能的解决方案:

  • Azure HPC 缓存。 HPC 缓存加快对高性能计算(HPC)任务的数据的访问速度。 通过在 Azure 中缓存文件,Azure HPC 缓存将云计算的可伸缩性带到现有工作流中。 有关详细信息,请参阅将 Azure HPC 缓存与Azure Kubernetes 服务集成。

  • Azure Data Lake Storage Gen2。 Data Lake 存储 Gen2 是一种特殊类型的 Blob 存储,针对 Hadoop 和 Spark 等大数据工作负荷进行了优化。 有关详细信息,请参阅 Azure Data Lake Storage Gen2 简介

设计建议

本部分提供了基于已证明对 Azure 客户有效的建议。

  • 使用Azure 专用链接。 为了获得安全性,我们建议对所有支持它的存储解决方案使用 Azure 专用链接。 Azure 专用链接允许通过虚拟网络中的专用终结点访问 Azure 服务,例如Azure 存储和SQL 数据库以及 Azure 托管服务。 有关详细信息,请参阅什么是 Azure 专用链接?

  • 对 OS 使用临时磁盘。 对于 OS 磁盘,建议使用临时磁盘。 若要从此功能中受益,请选择具有足够大小的临时磁盘的 VM 大小。 有关详细信息,请参阅 Azure 虚拟机的临时 OS 磁盘

  • 使用托管数据库。 对于应用程序数据,我们建议使用托管数据库。 有关数据库选项的列表,请参阅 Azure 上的数据库类型。

以下部分介绍有关 Azure 磁盘、Azure 文件存储和 Blob 存储的更多建议。

Azure 磁盘

对于 Azure 磁盘,建议使用以下设计选项:

  • 使用高级版或超级磁盘。 在大多数情况下,我们建议高级版或超级磁盘,以确保有足够的性能。 有关详细信息,请参阅 Azure 磁盘存储

  • 调整磁盘和吞吐量的节点大小。 我们建议确保 Kubernetes 节点的大小足够大,以支持磁盘数和聚合吞吐量。 有关大小和特征的信息,请参阅 Azure 中虚拟机的大小。

  • 创建永久性卷快照。 建议采用快照永久性卷,以预配预填充快照数据的新卷,或使用 Azure 磁盘 CSI 驱动程序的快照功能将现有卷还原到以前的状态。 有关详细信息,请参阅卷快照

  • 避免跨磁盘进行磁盘条带化。 建议避免在 Kubernetes 中跨多个磁盘进行条带化。

  • 使用 PV/PVC。 建议在 Kubernetes 中使用 PV 和 PVC 来根据需要动态创建磁盘。 有关持久性存储的详细信息,请参阅 Azure Kubernetes 服务 (AKS) 中应用程序的存储选项。

Azure 文件

对于Azure 文件存储,建议使用以下设计选项:

  • 选择高级版。 如果性能至关重要,建议使用高级版层。

  • 创建专用存储帐户。 我们建议为文件共享提供专用存储帐户。

  • 选择静态或动态创建的文件共享。 建议仔细考虑是希望 AKS 创建文件共享,还是想要在 Kubernetes 外部静态创建它们。 也可以动态删除动态创建的存储。 有关让 AKS 动态创建文件共享的详细信息,请参阅动态创建和使用具有Azure 文件存储的永久性卷。

Azure NetApp 文件

对于Azure NetApp 文档,建议使用以下设计选项:

  • 根据应用程序要求选择性能层。 Azure NetApp 文档提供 3 个性能层,提供不同的性能类。 有关详细信息,请参阅 Azure NetApp 文件的性能注意事项

  • 在 AKS 群集所在的同一 Azure 区域中创建容量池。 有关详细信息,请参阅为Azure NetApp 文档创建容量池。

  • 对容量池使用自动 QoS 类型。

  • 规划网络。 网络设计存在两个选项:

    1. 如果将同一 VNet 用于 AKS 和Azure NetApp 文档,请为 Azure NetApp 文档 创建专用子网,并将子网委托给 Microsoft.NetApp/Volumes。
    2. 如果使用不同的 VNet,请在它们之间建立 VNet 对等互连。

Blob 存储

对于 Blob 存储,建议使用以下设计选项:

后续步骤

了解如何使用 Kubecost 将成本分配范围限定为 AKS 中的部署、服务、标签、Pod 或命名空间。