本页面介绍如何将外部存储硬件(例如 Compute Engine 永久性磁盘)用作 Google Kubernetes Engine (GKE) 工作负载中的临时卷。您应该已熟悉 Kubernetes 卷和 StorageClass。
何时在 Kubernetes 中使用临时存储空间
临时存储适用于工作负载仅在应用生命周期内需要数据的任何情况,例如数据处理流水线、机器学习作业、批处理、本地缓存或分析。默认情况下,GKE 节点启动磁盘的一部分可用作 Pod 中的临时存储空间。这种方法通常需要仔细规划空间。
借助 Kubernetes 通用临时卷,您可以使用 PersistentVolumeClaim 明确请求 Pod 的临时存储空间。GKE 会动态预配 Compute Engine 永久性磁盘,并将这些磁盘挂接到您的节点。此类临时存储在以下情况下非常有用:
- 您的工作负载具有高性能要求,因此您需要控制存储硬件。
- 您需要特定于容器的短期临时存储。
- 您需要避免使用
emptyDir
来预配临时存储空间。如果您希望多个容器共享临时存储中的数据,则emptyDir
卷仍然很有用。 - 您需要比 GKE 内置默认值更多的临时存储容量。
- 您需要避免为标准模式 GKE 集群提前规划节点启动磁盘大小和类型。
GKE 中的临时存储空间类型
通常,您可以使用启动磁盘存储容量或专用永久性磁盘作为 Pod 和容器中的临时存储。下表介绍了它们之间的差异:
存储类型 | 使用方法 | 说明 |
---|---|---|
启动磁盘 - 永久性磁盘 | 在 Pod 规范中使用 如需了解相关说明,请参阅创建卷。 |
所请求的临时存储空间取自节点启动磁盘的预留部分。这是 Autopilot 和标准集群中的默认设置。 如果 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,您可以根据价格和性能要求指定要预配的存储类型。这是可选步骤,但建议您执行此步骤。如果要使用 GKE 默认 StorageClass(具有 pd-balanced
永久性磁盘类型),请跳过此步骤。
将以下清单保存为
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