你当前正在访问 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 文档,请考虑以下选项:
静态或动态创建的Azure NetApp 文档共享。 考虑是希望工作负荷使用在 AKS 外部创建的静态Azure NetApp 文档共享,还是希望 AKS 通过 Astra Control 动态创建文件共享。 有关详细信息,请参阅:
评估性能。 评估工作负荷所需的性能层。 有关详细信息,请参阅 Azure NetApp 文件的性能注意事项。
规划网络。 浏览有关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 类型。
规划网络。 网络设计存在两个选项:
- 如果将同一 VNet 用于 AKS 和Azure NetApp 文档,请为 Azure NetApp 文档 创建专用子网,并将子网委托给 Microsoft.NetApp/Volumes。
- 如果使用不同的 VNet,请在它们之间建立 VNet 对等互连。
Blob 存储
对于 Blob 存储,建议使用以下设计选项:
使用 SDK 与存储进行交互。 建议使用应用程序级 SDK 与 Blob 存储进行交互。
将 CSI 与 NFS 配合使用,以便与存储进行交互。 如果无法使用应用程序级 SDK 与 Blob 存储进行交互,建议在 Blob CSI 驱动程序中使用 NFS v3 选项。 有关详细信息,请参阅使用 Azure Blob 存储容器存储接口 (CSI) 驱动程序。
使用 Microsoft Entra ID 进行访问。 建议使用 Microsoft Entra ID 来授权访问 Blob 存储。 避免使用共享存储帐户密钥。 有关详细信息,请参阅使用 Microsoft Entra ID 授予对 blob 的访问权限。
调整层级别。 建议使用生命周期管理策略将不经常访问的数据移到较冷的访问层。 有关详细信息,请参阅 Blob 数据的热访问层、冷访问层和存档访问层。
后续步骤
了解如何使用 Kubecost 将成本分配范围限定为 AKS 中的部署、服务、标签、Pod 或命名空间。