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

Kubernetes 群集的存储选项

本文比较了 Amazon Elastic Kubernetes 服务 (Amazon EKS) 和 Azure Kubernetes 服务 (AKS) 的存储功能,并介绍了在 AKS 上存储工作负载数据的选项。

注意

本文是系列文章之一,可帮助熟悉 Amazon EKS 的专业人员了解 Azure Kubernetes 服务 (AKS)

Amazon EKS 存储选项

在 Amazon EKS 中,在 Kubernetes 版本 1.11 之后,群集有一个名为 gp2 的默认 StorageClass 用于持久卷声明。 管理员可以添加驱动程序以定义更多存储类,例如:

  • Amazon EBS CSI 驱动程序作为 Amazon EKS 加载项
  • Amazon EBS CSI 自管理加载项
  • Amazon EFS CSI 驱动程序
  • Amazon FSx for Lustre CSI 驱动程序
  • Amazon FSx for NetApp ONTAP CSI 驱动程序

通过添加驱动程序和存储类,可以使用存储服务,例如:

  • Amazon Elastic Block Store (Amazon EBS),一种块级存储解决方案,与 Amazon Elastic Compute Cloud (EC2) 实例一起使用以存储持久数据。 此服务类似于 Azure 磁盘存储,它有多个 SKU,例如标准 SSD、高级 SSD 或超级磁盘存储,具体取决于所需的性能。

  • Amazon Elastic File System (Amazon EFS),提供对可跨实例共享的外部文件系统的网络文件系统访问。 等效的 Azure 解决方案是具有服务器消息块 (SMB) 3.0 和 NFS 访问权限的 Azure 文件存储和 Azure 文件存储高级版。

  • Lustre 是一个开源文件系统,通常用于高性能计算 (HPC)。 在 Azure 中,你可以将超级磁盘存储或 Azure HPC 缓存用于速度很重要的工作负荷,例如机器学习和 HPC。

  • NetApp ONTAP,Amazon Web Services (AWS) 中完全托管的 ONTAP 共享存储。 Azure NetApp 文件是 Azure 中基于 NetApp 技术构建的类似文件存储服务。

AKS 存储选项

默认情况下,每个 AKS 群集都包括以下预先创建的存储类

  • 默认存储类 managed-csi,使用磁盘存储标准 SSD。 标准 SSD 是一种经济高效的存储选项,针对需要以较低的每秒输入输出操作 (IOPS) 获得一致性能的工作负载进行了优化。
  • managed-csi-premium 类使用磁盘存储高级 SSD 托管磁盘。
  • azurefile-csi 类使用 Azure 文件存储通过 SMB 或 NFS 提供对同一存储卷的并发共享访问。
  • azurefile-csi-premium 使用 Azure 文件存储高级版与 IOPS 密集型工作负载进行文件共享。 Azure 文件存储高级版提供基于 SSD 存储的低延迟和高吞吐量。

你可以通过添加其他存储类并与其他可用存储解决方案集成来扩展这些选项,例如:

  • 超级磁盘存储
  • Azure NetApp 文件
  • HPC 缓存
  • NFS 服务器
  • 第三方存储解决方案

Azure 磁盘存储

默认情况下,AKS 群集附带使用磁盘存储的预创建 managed-csimanaged-csi-premium 存储类。 与 Amazon EBS 类似,这些类会创建附加到节点的托管磁盘或块设备,以便进行 Pod 访问。

磁盘类允许静态动态卷预配。 回收策略可确保使用永久性卷删除磁盘。 可以通过编辑永久性卷声明来扩展磁盘。

这些存储类使用带有本地冗余存储 (LRS) 的 Azure 托管磁盘。 LRS 意味着数据在 Azure 主要区域的单个物理位置内具有三个同步副本。 LRS 是成本最低的复制选项,但不提供针对数据中心故障的保护。 要降低此风险,请使用 VeleroAzure 备份等可使用内置快照技术的解决方案定期备份或创建磁盘存储数据的快照。

这两种存储类都由托管磁盘提供支持,并且都使用固态磁盘 (SSD) 驱动器。 了解标准磁盘和高级磁盘之间的区别很重要:

  • 标准磁盘的定价基于容量和存储事务。
  • 高级磁盘仅按容量收费,因此对于需要大量事务的工作负载来说,高级磁盘更合算。
  • 高级 SSD 提供更高的最大吞吐量和 IOPS,如这里的比较所示
  • 对于大多数生产和开发工作负载,建议使用高级存储。

如果使用 Azure 托管磁盘作为主要存储类,请慎重考虑为 Kubernetes 群集选择的虚拟机 (VM) SKU。 Azure VM 限制了可以附加到它们的磁盘数量,该限制因 VM 大小而异。 此外,由于 Azure 磁盘以 ReadWriteOnce 的形式装载,因此仅可用于单个 Pod。

Azure 高级 SSD v2 磁盘

Azure 高级 SSD v2 磁盘提供 IO 密集型企业工作负载、一致的亚毫秒级磁盘延迟以及高 IOPS 和吞吐量。 可随时独立配置 Premium SSD v2 磁盘的性能(容量、吞吐量和 IOPS),从而轻松地让更多方案在满足性能需求的同时实现高性价比。 有关如何将新的或现有的 AKS 群集配置为使用 Azure 高级 SSD v2 磁盘的详细信息,请参阅在 Azure Kubernetes 服务上使用 Azure 高级 SSD v2 磁盘

超级磁盘存储

超级磁盘存储是一个 Azure 托管磁盘层,可为 Azure VM 提供高吞吐量、高 IOPS 和一致的低延迟磁盘存储。 超级磁盘存储适用于数据和事务繁重的工作负载。 与其他磁盘存储 SKU 和 Amazon EBS 一样,超级磁盘存储一次装载一个 Pod,并且不提供并发访问。

使用 --enable-ultra-ssd 标志在 AKS 群集上启用超级磁盘存储

如果选择超级磁盘存储,请注意其限制,并确保选择兼容的 VM 大小。 超级磁盘存储可用于本地冗余存储 (LRS) 复制。

自带密钥 (BYOK)

Azure 会加密托管磁盘中的所有静态数据。 默认情况下,数据使用 Microsoft 管理的密钥进行加密。 为了更进一步控制加密密钥,可以提供客户管理的密钥,将其用于对 AKS 群集的 OS 和数据磁盘进行静态加密。 有关详细信息,请参阅对 Azure Kubernetes 服务 (AKS) 中的 Azure 托管磁盘使用自带密钥 (BYOK)

Azure 文件

磁盘存储无法提供对卷的并发访问,但你可以使用 Azure 文件存储通过 SMB 协议进行连接,然后装载由Azure 存储支持的共享卷。 此过程提供类似于 Amazon EFS 的网络附加存储。 与磁盘存储一样,有两个选项:

  • Azure 文件标准存储由常规硬盘驱动器 (HDD) 提供支持。
  • Azure 文件存储高级版存储使用高性能 SSD 驱动器支持文件共享。 高级版的最低文件共享大小为 100 GB。

Azure 文件存储具有以下存储帐户复制选项,用于在发生故障时保护数据:

要优化 Azure 文件存储的成本,请购买 Azure 文件存储容量预留

Azure 容器存储

Azure 容器存储是一项基于云的卷管理、部署和业务流程服务,专为容器原生构建。 它与 Kubernetes 集成,允许动态并自动地预配永久性卷,为运行在 Kubernetes 群集上的有状态应用程序存储数据。

Azure 容器存储利用现有的 Azure 存储产品/服务进行实际数据存储,并提供专为容器构建的卷业务流程和管理解决方案。 支持的后备存储选项包括:

  • Azure 磁盘:对存储 SKU 和配置进行精细控制。 它们适用于第 1 层和常规用途数据库。
  • 临时磁盘:利用 AKS 节点(NVMe 或临时 SSD)上的本地存储资源。 最适合无数据持久性要求或具有内置数据复制支持的应用程序。 AKS 发现 AKS 节点上的可用临时存储,并获取它们进行卷部署。
  • Azure 弹性 SAN:预配按需、完全受管理的资源。 适用于常规用途数据库、流式处理和消息传递服务、CD/CI 环境以及其他第 1 层/第 2 层工作负载。 多个群集可以同时访问单个 SAN,但永久性卷一次只能由一个使用者附加。

到目前为止,为容器预配云存储需要使用各个容器存储接口 (CSI) 驱动程序,这样才能使用面向以基础结构即服务 (IaaS) 为中心的工作负荷的存储服务,并使其适用于容器。 这会产生运营开销,并增加应用程序可用性、可伸缩性、性能、可用性和成本问题的风险。

Azure 容器存储派生自 OpenEBS,这是一种为 Kubernetes 提供容器存储功能的开源解决方案。 通过在 Kubernetes 环境中借助基于微服务的存储控制器提供托管卷业务流程解决方案,Azure 容器存储可以实现真正的容器原生存储。

Azure 容器存储适用于以下方案:

  • 加速 VM 到容器计划:Azure 容器存储挖掘出以前仅适用于 VM 的各种 Azure 块存储产品/服务,使其可供容器使用。 这包括为 Cassandra 等工作负载提供延迟极低的临时磁盘,以及提供原生 iSCSI 和共享预配目标的 Azure 弹性 SAN。

  • 使用 Kubernetes 简化卷管理:使用 Kubernetes 简化卷管理:通过借助 Kubernetes 控制平面提供卷业务流程,Azure 容器存储可以轻松地在 Kubernetes 中部署和管理卷,而无需在不同的控制平面之间反复切换。

  • 降低总拥有成本 (TCO):通过增加每个 Pod 或节点支持的永久性卷的规模来提高成本效益。 通过动态共享存储资源减少预配所需的存储资源。 请注意,不支持对存储池本身的纵向扩展支持。

Azure 容器存储提供以下主要优势:

  • 快速横向扩展有状态 Pod:Azure 容器存储通过网络块存储协议(NVMe-oF 或 iSCSI)装载永久性卷,从而快速附加和分离永久性卷。 你可以从小规模开始,根据需要部署资源,同时确保应用程序在初始化期间或生产环境中不会耗尽或中断。 应用程序复原能力已通过跨群集重新生成 Pod 得到改进,需要快速移动永久性卷。 使用远程网络协议,Azure 容器存储与 Pod 生命周期紧密结合,支持 AKS 上高度可复原的大规模有状态应用程序。

  • 提高有状态工作负载的性能:Azure 容器存储能够提供卓越的读取性能,并通过 RDMA 使用 NVMe-oF 提供近磁盘写入性能。 这样,客户便能以经济高效的方式满足各种容器工作负载的性能要求,包括第 1 层 I/O 密集型、常规用途、吞吐量敏感型和开发/测试。 加速永久性卷的附加/分离时间,并将 Pod 故障转移时间降至最低。

  • Kubernetes 原生卷业务流程:使用 kubectl 命令创建存储池和永久性卷,捕获快照并管理卷的整个生命周期,而无需在不同控制平面操作的工具集之间切换。

Azure NetApp 文件

与 AWS NetApp ONTAP 一样,Azure NetApp 文件也是一种企业级高性能计量式文件存储服务。 Azure NetApp 文件是使用 NetApp 解决方案在 Azure 中完全托管的。 与 Azure 文件存储一样,Azure NetApp 文件允许多个 Pod 装载某一个卷。 可以使用 Astra Trident(一种适用于 Kubernetes 的开源动态存储协调器)以将 AKS 群集配置为使用 Azure NetApp 文件

请注意 Azure NetApp 文件的资源限制。 Azure NetApp 文件容量池的最小大小为 4 TiB。 Azure NetApp 文件按预配大小计费,而不是已用容量计费。

Azure HPC 缓存

Azure HPC 缓存可加快对 HPC 任务数据的访问速度,并具有云解决方案的所有可扩展性。 如果选择此存储解决方案,请确保将 AKS 群集部署在支持 Azure HPC 缓存的区域中。

NFS 服务器

共享 NFS 访问的最佳选择是使用 Azure 文件存储或 Azure NetApp 文件。 你还可以在导出卷的 Azure VM 上创建 NFS 服务器

请注意,此选项仅支持静态预配。 必须在服务器上手动设置 NFS 共享,并且不能从 AKS 自动执行此操作。

该解决方案基于基础架构即服务 (IaaS) 而不是平台即服务 (PaaS)。 你负责管理 NFS 服务器,包括操作系统更新、高可用性、备份、灾难恢复和可扩展性。

临时 OS 磁盘

默认情况下,Azure 会自动将虚拟机的操作系统磁盘复制到 Azure 存储,以避免在 VM 重定位到另一台主机时丢失数据。 但是,由于容器并未设计为保留本地状态,因此该行为提供的价值有限且存在一些缺点。 这些缺点包括但不限于节点预配速度变慢和读/写延迟变高。

相比而言,临时 OS 磁盘只存储在主机上,就像临时磁盘一样。 使用此配置,可以获得更低的读/写延迟,以及更快的节点扩展和群集升级。

备注

当不显式请求用于 OS 的 Azure 托管磁盘时,在可能的情况下,AKS 会针对给定的节点池配置默认为临时 OS。

有关详细信息,请参阅:

第三方解决方案

与 Amazon EKS 一样,AKS 是一种 Kubernetes 实现,你可以集成第三方 Kubernetes 存储解决方案。 以下是 Kubernetes 的第三方存储解决方案的一些示例:

  • Rook 通过自动化存储管理员任务将分布式存储系统转变为自我管理的存储服务。 Rook 通过 Kubernetes 运营商为每个存储提供商提供服务。
  • GlusterFS 是一个免费且开源的可扩展网络文件系统,它使用通用的现成硬件为数据量大和带宽密集型任务创建大型分布式存储解决方案。
  • Ceph 提供了一个可靠且可扩展的统一存储服务,其对象、块和文件接口来自由商用硬件组件构建的单个群集。
  • MinIO 多云对象存储可让企业生成在任何云上与 AWS S3 兼容的数据基础设施,为你的数据和应用程序提供一致、可移植的接口。
  • Portworx 是用于 Kubernetes 项目和基于容器的计划的端到端存储和数据管理解决方案。 Portworx 提供容器粒度存储、灾难恢复、数据安全和多云迁移。
  • Quobyte 提供高性能文件和对象存储,你可以将其部署在任何服务器或云上以扩展性能、管理大量数据并简化管理。
  • Ondat 能够跨任何平台提供一致的存储层。 可以在 Kubernetes 环境中运行数据库或任何持久性工作负载,而无需管理存储层。

Kubernetes 存储注意事项

为 Amazon EKS 或 AKS 选择存储解决方案时,请考虑以下因素。

存储类访问模式

在 Kubernetes 版本 1.21 和更高版本中,AKS 和 Amazon EKS 存储类仅默认使用容器存储接口 (CSI) 驱动程序

不同的服务支持具有不同访问模式的存储类。

服务 ReadWriteOnce ReadOnlyMany ReadWriteMany
Azure 磁盘 X
Azure 文件 X X X
Azure NetApp 文件 X X X
NFS 服务器 X X X
Azure HPC 缓存 X X X

动态与静态预配

动态预配卷可减少静态创建持久卷的管理开销。 设置正确的回收策略,以避免在删除 Pod 时出现未使用的磁盘。

备份

选择一个工具来备份持久数据。 该工具应与你的存储类型匹配,例如快照、Azure 备份VeleroKasten

成本优化

要优化 Azure 存储成本,请使用 Azure 预留。 确保检查哪些服务支持 Azure 预留。 另请参阅 Kubernetes 群集的成本管理

作者

本文由 Microsoft 维护, 它最初是由以下贡献者撰写的。

主要作者:

其他参与者:

要查看非公开的 LinkedIn 个人资料,请登录到 LinkedIn。

后续步骤