本页面介绍如何在 Google Kubernetes Engine (GKE) 工作负载中将外部存储硬件(例如 Compute Engine 永久性磁盘)用作临时卷。您应当已熟悉 Kubernetes 卷和 StorageClasses。
何时在 Kubernetes 中使用临时存储空间
临时存储适用于工作负载仅在应用生命周期内需要数据的任何情况,例如数据处理流水线、机器学习作业、批处理、本地缓存或分析。默认情况下,部分 GKE 节点启动磁盘可用作 Pod 中的临时存储空间。这种方法通常需要仔细地规划空间。
借助 Kubernetes 通用临时卷,您可以使用 PersistentVolumeClaim 为 Pod 明确请求临时存储空间。GKE 会动态预配 Compute Engine 永久性磁盘,并将磁盘挂接到您的节点。此类临时存储在以下情况下非常有用:
- 您的工作负载对性能有较高要求,因此您需要控制存储硬件。
- 您需要短期的容器专用临时存储空间。
- 您希望避免使用
emptyDir
来预配临时存储空间。如果您希望多个容器共享临时存储空间中的数据,emptyDir
卷仍然非常有用。 - 您需要超过 GKE 内置默认值的临时存储容量。
- 您需要避免为标准模式 GKE 集群提前规划节点启动磁盘大小和类型。
GKE 中的临时存储空间类型
通常,您可以在 Pod 和容器中使用启动磁盘存储容量或专用永久性磁盘作为临时存储空间。下表介绍了它们之间的差异:
存储类型 | 使用方法 | 说明 |
---|---|---|
启动磁盘 - 永久性磁盘 | 在 Pod 规范中使用 如需了解相关说明,请参阅创建卷。 |
所请求的临时存储空间来自节点启动磁盘的预留部分。这是 Autopilot 集群和 Standard 集群中的默认设置。 当 Pod 具有较小临时存储空间的请求或您想要在 Pod 中的多个容器之间共享临时数据时使用。 Autopilot
Standard 没有大小限制,但需要仔细规划节点启动磁盘大小和存储硬件类型。 如需详细了解 GKE 如何计算节点启动磁盘中的临时存储空间预留,请参阅本地临时存储空间预留。 |
本地 SSD 磁盘数量 |
如需了解相关说明,请参阅使用本地 SSD 预配临时存储空间。 |
本地 SSD 磁盘使用固定的 375 GB 增量,标准模式 GKE 集群和运行 A100 (80 GB) GPU 的 Autopilot 节点支持该增量。 如果您需要具有高吞吐量的临时存储,请使用此类型。 如需了解详情,请参阅适用于 GKE 的本地 SSD 简介。 |
专用永久性磁盘 |
本文档介绍了如何请求此临时存储类型。 |
Google Cloud 会动态预配所请求的外部硬件,将其附加到您的节点,并将所请求的卷装载到您的 Pod 中。 当 Pod 具有较大临时存储空间的请求或您想控制底层的永久性磁盘类型时使用。这些卷具有以下属性:
如需详细了解此临时卷类型,请参阅通用临时卷。 |
价格
您通过本指南中所述的通用临时卷预配的存储空间根据 Compute Engine 磁盘价格计费。
须知事项
在开始之前,请确保您已执行以下任务:
- 启用 Google Kubernetes Engine API。 启用 Google Kubernetes Engine API
- 如果您要使用 Google Cloud CLI 执行此任务,请安装并初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请运行
gcloud components update
以获取最新版本。
- 确保您拥有运行 1.23 或更高版本的 GKE Autopilot 或 Standard 集群。
- 确保您的 Google Cloud 项目中有足够的配额来提供给存储硬件。如需管理配额,请参阅查看项目的配额。
创建一个 StorageClass
通过创建自定义 Kubernetes StorageClass,您可以根据价格和性能要求指定要预配的存储类型。这是可选步骤,但建议您执行此步骤。如果您想使用具有 pd-balanced
永久性磁盘类型的 GKE 默认 StorageClass,请跳过此步骤。
将以下清单保存为
ephemeral-pd-class.yaml
:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: ephemeral-ssd provisioner: pd.csi.storage.gke.io volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true parameters: type: STORAGE_TYPE
将
STORAGE_TYPE
替换为所需的永久性磁盘类型的名称,例如pd-ssd
。如需查看支持的类型列表,请参阅 Compute Engine 文档中的永久性磁盘类型。创建 StorageClass:
kubectl create -f ephemeral-pd-class.yaml
在 Pod 中请求临时存储容量
如需预配、挂接和使用外部硬件作为临时存储空间,请将相应的卷添加到 Pod 清单,并将卷装载添加到容器规范。
将以下清单保存为
ephemeral-ssd-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: ephemeral-deployment spec: replicas: 1 selector: matchLabels: storage: ephemeral template: metadata: labels: storage: ephemeral spec: containers: - name: ephemeral-container image: nginx resources: requests: cpu: 500m memory: 2Gi ephemeral-storage: 2Gi volumeMounts: - mountPath: "/short-term" name: ephemeral-volume volumes: - name: ephemeral-volume ephemeral: volumeClaimTemplate: metadata: labels: type: ephemeral spec: accessModes: ["ReadWriteOnce"] storageClassName: "ephemeral-ssd" resources: requests: storage: 1Ti
此清单会创建一个新的 Kubernetes PersistentVolumeClaim,该声明请求一个名为
ephemeral-volume
的新 PersistentVolume,并具有以下属性:spec.volumes.ephemeral
:ephemeral
卷类型。.spec.accessModes
:卷访问模式,用于确定 Pod 的读写权限以及节点之间的卷共享。此示例使用ReadWriteOnce
,它会将 PersistentVolume 装载到单个节点,以供节点上的一个或多个 Pod 访问。如需了解详情,请参阅访问模式。.spec.storageClassName
:可选,您创建的 StorageClass 的名称。如果您省略此字段,GKE 将使用默认 StorageClass 并预配pd-balanced
永久性磁盘。.spec.resources.requests.storage
:您想要的存储容量。
创建 Deployment:
kubectl create -f ephemeral-ssd-deployment.yaml
GKE 会预配满足 PersistentVolumeClaim 要求的 Compute Engine 磁盘,并将该磁盘挂接到节点。GKE 将卷装载到 Pod 中,并向容器提供所请求的容量。
验证 GKE 已装载临时卷
在 Pod 中创建 shell 会话:
kubectl exec -it deploy/ephemeral-deployment -- bash
检查已装载的卷:
df -h
输出类似于以下内容:
Filesystem Size Used Available Use% Mounted on ... /dev/sdb 1006.9G 28.0K 1006.8G 0% /short-term /dev/sda1 94.3G 3.6G 90.6G 4% /etc/hosts /dev/sda1 94.3G 3.6G 90.6G 4% /dev/termination-log /dev/sda1 94.3G 3.6G 90.6G 4% /etc/hostname /dev/sda1 94.3G 3.6G 90.6G 4% /etc/resolv.conf ...
退出 shell 会话:
exit