本页面介绍了如何在 Google Kubernetes Engine (GKE) 集群上预配本地 SSD 存储空间,以及如何配置工作负载以使用连接到集群中节点的本地 SSD 临时存储空间中的数据。
如需详细了解 GKE 上的本地 SSD 支持,请参阅本地 SSD 存储空间简介。
须知事项
在开始之前,请确保您已执行以下任务:
- 启用 Google Kubernetes Engine API。 启用 Google Kubernetes Engine API
- 如果您要使用 Google Cloud CLI 执行此任务,请安装并初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请运行
gcloud components update
以获取最新版本。
创建具有本地 SSD 支持的临时存储空间的集群或节点池
使用 Google Cloud CLI 创建具有本地 SSD 支持的临时存储空间的集群或节点池。
使用 --ephemeral-storage-local-ssd
选项可挂接由本地 SSD 卷提供支持的全托管式本地临时存储。此存储空间与 Pod 的生命周期绑定。当 Pod 请求临时存储空间时,GKE 会安排它们在拥有已配置为临时存储空间的本地 SSD 卷的节点上运行。 如果您想要更专业或更精细地控制本地 SSD,我们建议您改用本地 SSD 支持的原始块存储。
如果您启用了集群自动扩缩,当集群需要更多临时存储空间时,GKE 会自动扩缩节点。您的 Pod 可以通过 emptyDir
卷访问本地 SSD 卷上的数据。
您为创建集群或节点池而运行的 gcloud CLI 命令取决于所选机器类型的机器系列代。例如,N1 和 N2 机器类型分别属于第一代和第二代机器系列,而 C3 机器类型属于第三代机器系列。
创建具有本地 SSD 的集群
第 1 代或第 2 代
如果您使用的是第 1 代或第 2 代机器系列中的机器类型,请通过指定 --ephemeral-storage-local-ssd count=NUMBER_OF_DISKS
选项来创建集群。此选项会在每个节点上预配指定数量的本地 SSD 卷,以用于 kubelet 临时存储。
这些设置仅适用于默认节点池。如果后续节点池需要本地 SSD,请在节点池创建期间指定这一点。
如需创建在 GKE 1.25.3-gke.1800 或更高版本上运行的集群,其中默认池会使用本地 SSD 卷,请运行以下命令:
gcloud container clusters create CLUSTER_NAME \
--ephemeral-storage-local-ssd count=NUMBER_OF_DISKS \
--machine-type=MACHINE_TYPE \
--release-channel CHANNEL_NAME
替换以下内容:
CLUSTER_NAME
:集群的名称。NUMBER_OF_DISKS
:每个节点上预配的本地 SSD 卷的数量。在节点设置期间,这些卷会合并为单个逻辑卷。卷的最大数量因机器类型和区域而异。请注意,部分本地 SSD 容量已预留给系统使用。MACHINE_TYPE
:要使用的机器类型。此字段是必填字段,因为本地 SSD 不能与默认的e2-medium
类型搭配使用。CHANNEL_NAME
:包含高于 1.25.3-gke.1800 的 GKE 版本的发布渠道。如果您不想使用某一发布渠道,还可以使用--cluster-version
标志而不是--release-channel
,从而指定高于 1.25.3-gke.1800 的有效版本。如需确定有效版本,请使用gcloud container get-server-config
命令。
第 3 代或第 4 代
如果您使用第 3 代或第 4 代机器系列中的机器类型,则无需在创建集群时指定任何本地 SSD 选项。挂接到每个节点的磁盘的数量取决于机器类型。
如需创建集群,请运行以下命令:
gcloud container clusters create CLUSTER_NAME \
--machine-type=MACHINE_TYPE \
--cluster-version CLUSTER_VERSION
替换以下内容:
CLUSTER_NAME
:集群的名称。MACHINE_TYPE
:要使用的第 3 代或第 4 代机器系列中的机器类型。CLUSTER_VERSION
:支持在第 3 代或第 4 代机器系列中的机器类型上使用本地 SSD 的 GKE 集群版本。
创建具有本地 SSD 的节点池
第 1 代或第 2 代
如需创建在 GKE 1.25.3-gke.1800 或更高版本运行且使用本地 SSD 卷的节点池,请运行以下命令:
gcloud container node-pools create POOL_NAME \
--cluster=CLUSTER_NAME \
--ephemeral-storage-local-ssd count=NUMBER_OF_DISKS \
--machine-type=MACHINE_TYPE
替换以下内容:
POOL_NAME
:新节点池的名称。CLUSTER_NAME
:集群的名称。NUMBER_OF_DISKS
:每个节点上预配的本地 SSD 卷的数量。在节点设置期间,这些卷会合并为单个逻辑卷。卷的最大数量因机器类型和区域而异。请注意,部分本地 SSD 容量已预留给系统使用。MACHINE_TYPE
:要使用的机器类型。此字段是必填字段,因为本地 SSD 不能与默认的e2-medium
类型搭配使用。
第 3 代或第 4 代
如果您使用第 3 代或第 4 代机器系列中的机器类型,则在创建节点池时无需指定任何本地 SSD 选项。挂接到每个节点的卷的数量取决于机器类型。
要创建节点池,请运行以下命令:
gcloud container node-pools create POOL_NAME \
--cluster=CLUSTER_NAME \
--machine-type=MACHINE_TYPE \
--node-version NODE_VERSION
替换以下内容:
POOL_NAME
:新节点池的名称。CLUSTER_NAME
:集群的名称。MACHINE_TYPE
:要使用的第 3 代或第 4 代机器系列中的机器类型。NODE_VERSION
:支持在第 3 代或第 4 代机器系列中的机器类型上使用本地 SSD 的 GKE 节点池版本。
在节点池中创建的节点包含一个 cloud.google.com/gke-ephemeral-storage-local-ssd=true
标签。您可以通过运行以下命令来验证标签:
kubectl describe node NODE_NAME
将本地 SSD 支持的临时存储空间与 Autopilot 集群搭配使用
当您通过以下任一方式配置 Pod 时,可以将本地 SSD 用于临时存储空间:
- 您可以明确选择机器系列来运行 Pod,并指定
cloud.google.com/gke-ephemeral-storage-local-ssd: "true"
nodeSelector 或包含本地 SSD 的容量预留。如需详细了解 Autopilot 中的机器系列选择,请参阅通过选择机器系列优化 Autopilot Pod 性能。 - 您请求支持本地 SSD 的 GPU 类型,并指定
cloud.google.com/gke-ephemeral-storage-local-ssd: "true"
nodeSelector 或具有本地 SSD 的容量预留。NVIDIA H100 (80GB) GPU 和 NVIDIA A100 (80GB) GPU 始终使用本地 SSD 进行临时存储,您无法为这些 GPU 指定节点选择器。如需详细了解如何在 Autopilot 上请求 GPU,请参阅在容器中请求 GPU。
如需查看与本地 SSD 兼容的机器系列列表,请参阅在 Autopilot 中支持本地 SSD 的机器系列。
直接在工作负载清单中请求本地 SSD
如需将本地 SSD 用于临时存储,请将 cloud.google.com/gke-ephemeral-storage-local-ssd: "true"
nodeSelector 添加到您的工作负载清单。例如,以下 Pod 清单会将本地 SSD 选为 GPU Pod 的临时存储空间:
apiVersion: v1
kind: Pod
metadata:
name: l4-localssd-pod
spec:
containers:
- name: my-gpu-container
image: nvidia/cuda:11.0.3-runtime-ubuntu20.04
command: ["/bin/bash", "-c", "--"]
args: ["while true; do sleep 600; done;"]
resources:
requests:
cpu: 16
memory: 64Gi
ephemeral-storage: 800Gi
limits:
cpu: 16
memory: 64Gi
ephemeral-storage: 800Gi
nvidia.com/gpu: 8
nodeSelector:
cloud.google.com/gke-accelerator: nvidia-l4
cloud.google.com/gke-ephemeral-storage-local-ssd: "true"
请求使用容量预留的本地 SSD
如果您使用 Compute Engine 容量预留来预留具有本地 SSD 的机器,Autopilot 会将预留中的可用本地 SSD 挂接到您的节点,而无需在工作负载清单中明确选择本地 SSD。如需详细了解如何将预留与 Autopilot 搭配使用,请参阅在 Autopilot 集群中使用容量预留。
例如,以下 Pod 清单会选择具有本地 SSD 的特定预留:
apiVersion: v1
kind: Pod
metadata:
name: local-ssd-pod
spec:
nodeSelector:
cloud.google.com/machine-family: MACHINE_SERIES
cloud.google.com/reservation-name: localssd-count-reservation
cloud.google.com/reservation-affinity: "specific"
containers:
- name: my-container
image: "k8s.gcr.io/pause"
resources:
requests:
cpu: 6
memory: "25Gi"
ephemeral: "100Gi"
limits:
cpu: 12
memory: "50Gi"
ephemeral: "200Gi"
将 MACHINE_SERIES
替换为还支持本地 SSD 的支持的机器系列。如果指定的机器系列不支持本地 SSD,部署将失败并显示错误。
在 Autopilot 中支持本地 SSD 的机器系列
Autopilot 集群支持将本地 SSD 用于以下机器系列的临时存储空间:
(仅适用于容量预留) |
(仅适用于容量预留) |
(仅适用于容量预留) |
(仅适用于容量预留) |
(仅适用于容量预留) |
(始终捆绑) |
(仅适用于容量预留) |
(始终捆绑) |
(始终捆绑) |
使用旧版 API 参数
--local-ssd-count
选项是支持 SCSI 本地 SSD 的旧版 API 参数。Compute Engine 第三代机器系列不支持 SCSI,仅支持 NVMe。您应仅将此选项与 Windows Server 集群搭配使用。如果您目前在 Linux 集群上使用旧版 API 参数,我们建议您改用 --ephemeral-storage-local-ssd
选项。
Windows Server 集群上的本地 SSD
将本地 SSD 与运行 Windows 节点池的集群配合使用时,需要先登录到节点并设置卷的格式,然后才能使用。以下示例使用 NTFS 文件系统设置本地 SSD 卷的格式。您还可以在卷下面创建目录。在此示例中,目录位于磁盘 D 下。
PS C:\> Get-Disk | Where partitionstyle -eq 'raw' | Initialize-Disk -PartitionStyle MBR -PassThru | New-Partition -AssignDriveLetter -UseMaximumSize | Format-Volume -FileSystem ntfs -Confirm:$false
PS C:\> mkdir D:\test-ssd
访问本地固态硬盘卷
以下示例展示了如何访问本地 SSD 支持的临时存储空间。
作为 emptyDir 卷的临时存储空间
GKE 节点池可以配置为使用本地 SSD 作为临时存储空间,包括 emptyDir
卷。
以下 Pod 清单使用 emptyDir
和节点选择器 cloud.google.com/gke-ephemeral-storage-local-ssd
。您可以对 Deployment 清单或 StatefulSet 清单应用类似技术。
选择临时存储资源请求时,请考虑为系统使用预留的本地 SSD 容量。
apiVersion: v1
kind: Pod
metadata:
name: POD_NAME
spec:
containers:
- name: CONTAINER_NAME
image: "registry.k8s.io/pause"
resources:
requests:
ephemeral-storage: "200Gi"
volumeMounts:
- mountPath: /cache
name: scratch-volume
nodeSelector:
cloud.google.com/gke-ephemeral-storage-local-ssd: "true"
volumes:
- name: scratch-volume
emptyDir: {}
问题排查
如需了解问题排查说明,请参阅对 GKE 中的存储空间进行问题排查。