GKE 的本地 SSD 简介


本地固态硬盘 (SSD) 是固定大小的 SSD 硬盘,可以装载到单个 Compute Engine 虚拟机中。您可以在 GKE 上使用本地 SSD 来获取非永久性(临时)高性能存储空间,该存储空间挂接到集群中的每个节点。本地 SSD 还可以提供比标准磁盘更高的吞吐量和更短的延迟时间

在 1.25.3-gke.1800 及更高版本中,您可以将 GKE 节点池配置为使用具有 NVMe 接口的本地 SSD 进行本地临时存储或原始块存储。

如果您将 GKE 与 Standard 集群搭配使用,则可以在创建节点池时将本地 SSD 卷挂接到节点。这会提高使用 emptyDir 卷本地 PersistentVolume 的工作负载的临时存储性能。您可以在集群的机器类型限制和项目的配额范围内创建具有本地 SSD 的节点池。

本地 SSD 仅会挂接到一个节点,节点本身是临时的。您可以随时将工作负载调度到其他节点上。

如需详细了解本地 SSD 的优势和限制,例如性能和每种机器类型允许的 SSD 磁盘数量,请参阅 Compute Engine 文档中的本地 SSD

为何选择 GKE 的本地 SSD

如果您的工作负载具有以下任一要求,则本地 SSD 是一个不错的选择:

  • 您想要运行下载和处理数据的应用,例如 AI 或机器学习、分析、批处理、本地缓存和内存中数据库。
  • 您的应用具有特殊的存储空间需求,并且您希望在高性能临时存储空间上访问原始块。
  • 您想要运行专用数据应用,并且希望将本地 SSD 卷作为 Pod 的节点级缓存运行。使用此方法可以提高内存数据库应用(如 Aerospike 或 Redis)的性能。

临时存储

我们建议您使用 --ephemeral-storage-local-ssd 选项来预配本地 SSD 作为节点临时存储空间(如果您使用的是第三代机器系列,则这是默认选项)。此方法会将 emptyDir 卷、容器可写入层和映像放到本地 SSD 上,它们共同构成了节点临时存储空间。其优势包括提高 I/O 带宽(与默认 Persistent Disk 相比)和缩短 Pod 启动时间。

将本地 SSD 用于节点临时存储意味着启动磁盘本地 SSD 卷不适用于其他用途。请勿使用特权 Daemonset、HostPath 或其他机制直接修改启动磁盘;否则,节点可能会失败。如果您需要对本地 SSD 卷进行精细控制,请改用原始块方法。

块存储设备存储

块存储设备存储支持随机访问固定大小的块中的数据。某些专用应用需要直接访问块存储设备存储,原因诸如文件系统层会产生不必要的开销等。

使用块存储设备存储的常见场景包括:

  • 数据直接在底层存储空间进行整理的数据库。
  • 本身实现某种存储服务(软件定义的存储系统)的软件。

在 GKE 1.25.3-gke.1800 及更高版本中,您可以使用 --local-nvme-ssd-block 选项创建挂接了原始块本地 NVMe SSD 的集群和节点池。然后,您可以通过格式化为所选的文件系统(例如 ZFS 或 HDFS)并配置 RAID 来自定义块存储。如果您需要额外的控制来运行专门需要访问由本地 SSD 提供支持的块存储的工作负载,则此选项适用。

如果您希望利用统一数据缓存来在 Pod 之间共享数据,并且数据与节点生命周期关联,则也可以将块访问方法与本地 SSD 结合使用。为此,请安装一个采用 RAID 配置的 DaemonSet,对文件系统进行格式化,并使用本地 PersistentVolume 在 Pod 之间共享数据。

机器要求

为 GKE 集群和节点池预配本地 SSD 的方式取决于您的底层机器类型。GKE 在 Compute Engine 第一代、第二代和第三代机器系列上支持本地 SSD 卷。本地 SSD 卷需要 n1-standard-1 或更大的机器类型。默认机器类型 e2-medium 不受支持。如需识别机器系列,请使用机器类型名称中的数字。例如,N1 机器是第一代机器,N2 机器是第二代机器。如需查看可用机器系列和类型的列表,请参阅 Compute Engine 文档中的机器系列资源和比较指南

第一代和第二代机器系列要求

如需将第一代或第二代机器系列与本地 SSD 搭配使用,集群或节点池必须运行 1.25.3-gke.1800 版或更高版本。

如需在第一代或第二代机器系列上预配本地 SSD,请指定要用于虚拟机的本地 SSD 卷的数量。如需查看机器系列列表和相应允许的本地 SSD 数量,请参阅 Compute Engine 文档中的选择有效的本地 SSD 数量

第三代机器系列要求

如果您要将第三代机器系列与本地 SSD 搭配使用,则集群或节点池必须运行以下 GKE 版本或更高版本之一:

  • 1.25.13-gke.200 至 1.26
  • 1.26.8-gke.200 至 1.27
  • 1.27.5-gke.200 至 1.28
  • 1.28.1-gke.200 至 1.29

对于第三代机器系列,每种机器类型都未预先配置本地 SSD 或都预先配置了固定数量的本地 SSD 卷。您无需指定要包含的本地 SSD 卷的数量。集群可用的本地 SSD 容量会隐式定义为虚拟机类型的一部分。

如需查看机器系列列表和相应允许的本地 SSD 数量,请参阅 Compute Engine 文档中的选择有效的本地 SSD 数量

本地 SSD 卷的使用模式

如需在集群中使用本地 SSD 卷,请按照以下常规步骤操作:

  1. 预配挂接了本地 SSD 的节点池:如需创建挂接了本地 SSD 的 GKE 节点池,请在调用 create cluster 命令时传入临时存储参数或原始块存储参数。设置本地 SSD 参数会创建一个 GKE 节点池,该节点池挂接了本地 SSD,并配置为本地临时存储或原始块存储,具体取决于您选择的参数。如需详细了解预配本地 SSD 的选项,请参阅本地 SSD 参数
  2. 访问本地 SSD 卷中的数据:如需使用本地 SSD 卷中的数据,您可以使用 emptyDir 或本地永久性卷等 Kubernetes 构造。如需详细了解这些选项,请参阅本地 SSD 访问

GKE 上的本地 SSD 参数

下表汇总了 GKE 为在集群上预配本地 SSD 存储提供的推荐参数。您可以使用 gcloud CLI 传入这些参数。

本地 SSD 类型 gcloud CLI 命令 GKE 可用性 本地 SSD 配置文件
临时存储本地 SSD gcloud container clusters create
--ephemeral-storage-local-ssd
v1.25.3-gke.1800 或更高版本

存储技术:NVMe

跨 Pod 共享的数据:否

数据生命周期:Pod

RAID 配置的大小和需求:最高 9 TiB。GKE 会在后台自动配置 RAID。

格式:文件系统 (Kubernetes emptyDir)

Kubernetes 调度器集成:默认情况下完全集成。Kubernetes 调度器将确保在放置之前节点上的空间,并根据需要扩缩节点。

如需了解如何使用此 API 参数,请参阅预配和使用本地 SSD 支持的临时存储

本地 NVMe SSD 块 gcloud container clusters create
--local-nvme-ssd-block
v1.25.3-gke.1800 或更高版本

存储技术:NVMe

在 pod 之间共享数据:是,通过本地 PV。

数据生命周期:节点

RAID 配置的大小和需求:最高 9 TiB。您需要手动配置 RAID 以获得较大的大小。

格式:原始块

Kubernetes 调度器集成:默认情况下不集成。您需要确保节点上的容量并处理相邻用户争用。如果您选择加入本地 PV,则集成了调度功能。

如需了解如何使用此 API 参数,请参阅预配和使用本地 SSD 支持的原始块存储

对现有的本地 SSD 参数的支持

下表汇总了这些现有的本地 SSD 参数及其推荐的替代参数:

现有的本地 SSD 参数 gcloud CLI 命令 本地 SSD 配置文件 推荐的本地 SSD 参数正式版
本地 SSD 计数参数 gcloud container clusters create
--local-ssd-count

存储技术:SCSI

在 pod 之间共享数据:是,通过本地 PV

数据生命周期:节点

RAID 配置的大小和需求:375 GiB。您需要手动配置 RAID 以获得较大的大小。

格式:文件系统 (ext-4)

Kubernetes 调度器集成:默认情况下不集成。您需要确保节点上的容量并处理相邻用户争用。如果您选择加入本地 PV,则集成了调度功能。

gcloud container clusters create
--ephemeral-storage-local-ssd
临时存储参数(Beta 版) gcloud beta container clusters create
--ephemeral-storage

存储技术:NVMe

跨 Pod 共享的数据:否

数据生命周期:Pod

RAID 配置的大小和需求:最高 9 TiB。GKE 会在后台自动配置 RAID。

格式:文件系统 (Kubernetes emptyDir)

Kubernetes 调度器集成:默认情况下完全集成。Kubernetes 调度器可确保放置之前节点上的空间并根据需要扩缩节点。

gcloud container clusters create
--ephemeral-storage-local-ssd
本地 SSD 卷参数(Alpha 版) gcloud alpha container clusters create
--local-ssd-volumes

存储技术:NVMe 或 SCSI

跨 Pod 共享的数据:否

数据生命周期:节点

RAID 配置的大小和需求

375 GiB。您需要手动配置 RAID 以获得较大的大小。

格式:文件系统 (ext-4) 或原始块

Kubernetes 调度器集成:默认情况下不集成。您需要确保节点上的容量并处理相邻用户争用。

gcloud container clusters create
--local-nvme-ssd-block

本地 SSD 访问权限

您可以使用以下方法之一来访问本地 SSD 卷。

emptyDir Volume

在 GKE 1.25.3-gke.1800 及更高版本中,您可以通过 --ephemeral-storage-local-ssd 选项将临时存储用作由本地 SSD 提供支持的 emptyDir 卷。在大多数情况下,我们建议使用此方法,包括需要高性能临时暂存空间的应用。

GKE 可让您配置节点池,以在具有 NVMe 接口的本地 SSD 上装载节点临时存储。

如需了解详情,请参阅此示例

本地永久性卷

本地永久性卷表示挂接到单个节点的本地磁盘。本地永久性卷允许您在 Pod 之间共享本地 SSD 资源。由于本地磁盘是本地 SSD 磁盘,因此数据仍然是临时的。

如果您的集群运行以下任一项,我们建议您使用此方法:

  • 使用 StatefulSetsvolumeClaimTemplates 的工作负载。
  • 共享节点池的工作负载。每个本地 SSD 卷都可以通过 PersistentVolumeClaim 预留,并且特定 HostPath 不会直接在 Pod 规范中编码。
  • 需要对同一本地 SSD 具有数据引力的 Pod。Pod 始终与其本地 PersistentVolume 调度到同一节点上。

如需了解详情,请参阅此示例和开源 Kubernetes 文档。

限制

  • 您的应用必须妥善处理无法访问本地 SSD 卷上的数据的情况。当 Pod 或节点被删除、修复、升级或发生不可恢复的错误时,写入本地 SSD 磁盘的数据不会保留。

    临时存储本地 SSD 参数将本地 SSD 卷配置为具有基于 Pod 的数据生命周期,NVMe 本地 SSD 块参数则将本地 SSD 卷配置为具有基于节点的数据生命周期。

    如果您需要永久性存储,我们建议您使用持久性存储选项(例如 Persistent DiskFilestoreCloud Storage)。您还可以使用区域级副本,以最大限度地降低在集群生命周期或应用生命周期操作期间丢失数据的风险。

  • 创建节点池后,您将无法修改本地 SSD 配置设置。您无法为现有节点池启用、停用或更新本地 SSD 配置。您必须删除该节点池再重新创建一个新的节点池才能进行任何更改。

  • 使用 emptyDir 的 Pod 以透明方式使用本地 SSD;但是,该节点池中的所有节点上的所有 Pod 也是如此。GKE 不支持同一个节点池中的一些 Pod 使用本地 SSD 提供支持的本地 SSD emptyDir 卷,另一些 Pod 使用节点启动磁盘提供支持的 emptyDir 卷。如果您的工作负载使用由节点启动磁盘提供支持的 emptyDir 卷,请将工作负载调度到其他节点池。

  • 本地 SSD 不支持 Autopilot 集群和节点自动预配。

  • 对于在存储优化 (Z3) 虚拟机上运行的工作负载,我们建议使用本地 SSD 作为临时存储空间。在维护事件期间,Z3 节点会终止。因此在维护事件期间,这些节点的本地 SSD 中的数据可能不可用,并且在维护后无法保证实现数据恢复

后续步骤