Compute Engine Persistent Disk CSI 驱动程序是您访问使用 GKE 集群的 Hyperdisk 存储的主要方式。
准备工作
在开始之前,请确保您已执行以下任务:
- 启用 Google Kubernetes Engine API。 启用 Google Kubernetes Engine API
- 如果您要使用 Google Cloud CLI 执行此任务,请安装并初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请运行
gcloud components update
以获取最新版本。
- 将您的默认区域和可用区设置为某个支持的值。
使用要求
如需在 GKE 中使用 Hyperdisk 卷,您的集群必须满足以下要求:
- 使用运行 GKE 1.26 版或更高版本的 Linux 集群。如果您使用发布渠道,请确保该渠道具有此驱动程序所需的最低 GKE 版本或更高版本
- 确保已启用 Compute Engine Persistent Disk CSI 驱动程序。默认情况下,新的 Autopilot 和 Standard 集群会启用 Compute Engine Persistent Disk 驱动程序,并且在使用 Autopilot 时无法停用或修改。如果您需要在集群中手动添加或移除 Compute Engine Persistent Disk CSI 驱动程序,请参阅在现有集群上启用 Compute Engine Persistent Disk CSI 驱动程序。
为 GKE 创建 Hyperdisk 卷
本部分介绍如何在 GKE 中创建由 Compute Engine CSI 驱动程序支持的 Hyperdisk 卷。
创建一个 StorageClass
Compute Engine Persistent Disk CSI 驱动程序提供了以下 Persistent Disk 存储 Type
字段,用于支持 Hyperdisk:
hyperdisk-balanced
hyperdisk-throughput
hyperdisk-extreme
如需创建具有所需的吞吐量或 IOPS 级别的新 StorageClass,请在预配工具字段中使用 pd.csi.storage.gke.io
,并指定其中一种 Hyperdisk 存储类型。
对于由预配的初始磁盘大小确定的性能,每种 Hyperdisk 类型都有默认值。创建 StorageClass 时,您可以根据 Hyperdisk 类型选择性地指定以下参数。如果您省略这些参数,GKE 会改用基于容量的磁盘类型默认值。
参数 | Hyperdisk 类型 | 使用情况 |
---|---|---|
provisioned-throughput-on-create |
Hyperdisk Balanced、Hyperdisk Throughput | 使用“Mi”限定符表示吞吐量值(以 MiBps 为单位);例如,如果您需要的吞吐量为 250 MiBps,请在创建 StorageClass 时指定 "250Mi" 。 |
provisioned-iops-on-create |
Hyperdisk Balanced、Hyperdisk IOPS | IOPS 值应不带任何限定符表示;例如,如果您需要 7,000 IOPS,请在创建 StorageClass 时指定 "7000" 。 |
如需获得允许的吞吐量或 IOPS 值指南,请参阅规划 Hyperdisk 卷的性能级别。
以下示例展示了如何为每种 Hyperdisk 类型创建 StorageClass:
平衡 Hyperdisk
将以下清单保存在名为
hdb-example-class.yaml
的文件中:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: balanced-storage provisioner: pd.csi.storage.gke.io volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true parameters: type: hyperdisk-balanced provisioned-throughput-on-create: "250Mi" provisioned-iops-on-create: "7000"
创建 StorageClass:
kubectl create -f hdb-example-class.yaml
Hyperdisk Throughput
将以下清单保存在名为
hdt-example-class.yaml
的文件中:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: throughput-storage provisioner: pd.csi.storage.gke.io volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true parameters: type: hyperdisk-throughput provisioned-throughput-on-create: "50Mi"
创建 StorageClass:
kubectl create -f hdt-example-class.yaml
Hyperdisk Extreme
将以下清单保存在名为
hdx-example-class.yaml
的文件中:apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: extreme-storage provisioner: pd.csi.storage.gke.io volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true parameters: type: hyperdisk-extreme provisioned-iops-on-create: "50000"
创建 StorageClass:
kubectl create -f hdx-example-class.yaml
如需查找集群中可用的 StorageClass 的名称,请运行以下命令:
kubectl get sc
创建一个 PersistentVolumeClaim
您可以创建一个引用 Compute Engine Persistent Disk CSI 驱动程序的 StorageClass 的 PersistentVolumeClaim。
平衡 Hyperdisk
在此示例中,您将 Hyperdisk Balanced 卷的目标存储容量指定为 20 GiB。
将以下 PersistentVolumeClaim 清单保存到名为
pvc-example.yaml
的文件中:kind: PersistentVolumeClaim apiVersion: v1 metadata: name: podpvc spec: accessModes: - ReadWriteOnce storageClassName: balanced-storage resources: requests: storage: 20Gi
应用引用您在前面示例中创建的 StorageClass 的 PersistentVolumeClaim:
kubectl apply -f pvc-example.yaml
Hyperdisk Throughput
在此示例中,您需要将 Hyperdisk Throughput 卷的目标存储容量指定为 2 TiB。
将以下 PersistentVolumeClaim 清单保存在名为
pvc-example.yaml
的文件中:kind: PersistentVolumeClaim apiVersion: v1 metadata: name: podpvc spec: accessModes: - ReadWriteOnce storageClassName: throughput-storage resources: requests: storage: 2Ti
应用引用您在前面示例中创建的 StorageClass 的 PersistentVolumeClaim:
kubectl apply -f pvc-example.yaml
Hyperdisk Extreme
在此示例中,您将 Hyperdisk Extreme 卷的最小存储容量指定为 64 GiB。
将以下 PersistentVolumeClaim 清单保存在名为
pvc-example.yaml
的文件中:kind: PersistentVolumeClaim apiVersion: v1 metadata: name: podpvc spec: accessModes: - ReadWriteOnce storageClassName: extreme-storage resources: requests: storage: 64Gi
应用引用您在前面示例中创建的 StorageClass 的 PersistentVolumeClaim:
kubectl apply -f pvc-example.yaml
创建 Deployment 以使用 Hyperdisk 卷
将 Pod 与 PersistentVolume 搭配使用时,我们建议您使用工作负载控制器(例如 Deployment 或 StatefulSet)。
以下示例将创建一个清单,该清单将配置 Pod 以使用上一部分中创建的 PersistentVolumeClaim 部署 Nginx Web 服务器。将以下示例清单保存为
hyperdisk-example-deployment.yaml
:apiVersion: apps/v1 kind: Deployment metadata: name: web-server-deployment labels: app: nginx spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: nginx volumeMounts: - mountPath: /var/lib/www/html name: mypvc volumes: - name: mypvc persistentVolumeClaim: claimName: podpvc readOnly: false
如需根据
hyperdisk-example-deployment.yaml
清单文件创建 Deployment,请运行以下命令:kubectl apply -f hyperdisk-example-deployment.yaml
确认已成功创建 Deployment:
kubectl get deployment
Hyperdisk 实例可能需要几分钟才能完成预配。 部署完成预配后,会报告
READY
状态。您可以运行以下命令来监控 PersistentVolumeClaim 状态,以查看进度:
kubectl get pvc
通过快照预配 Hyperdisk 卷
如需通过现有 Persistent Disk 快照创建新的 Hyperdisk 卷,请使用 Google Cloud 控制台、Google Cloud CLI 或 Compute Engine API。如需了解如何创建 Persistent Disk 快照,请参阅创建和使用卷快照。
控制台
转到 Google Cloud 控制台中的磁盘页面。
点击创建磁盘。
在磁盘类型下,选择以下磁盘类型之一:
- 平衡 Hyperdisk
- Hyperdisk Extreme
- Hyperdisk Throughput
在磁盘来源类型下,点击快照。
选择要恢复的快照的名称。
选择新磁盘的大小(以 GiB 为单位)。此数字必须等于或大于快照最初的来源磁盘大小。
为磁盘设置预配吞吐量或预配 IOPS(如果与默认值不同)。
点击创建以创建 Hyperdisk 卷。
gcloud
运行 gcloud compute disks create
命令以通过快照创建 Hyperdisk 卷。
平衡 Hyperdisk
gcloud compute disks create DISK_NAME \
--size=SIZE \
--source-snapshot=SNAPSHOT_NAME \
--provisioned-throughput=TRHROUGHPUT_LIMIT \
--provisioned-iops=IOPS_LIMIT \
--type=hyperdisk-balanced
替换以下内容:
DISK_NAME
:新磁盘的名称。SIZE
:新磁盘的大小,以吉比字节 (GiB) 或太比字节 (TiB) 为单位。如需了解最新的容量限制,请参阅 Compute Engine 文档。SNAPSHOT_NAME
:要恢复的快照的名称。THROUGHPUT_LIMIT
:可选。对于 Hyperdisk Balanced 磁盘,这是一个整数,表示磁盘可以处理的吞吐量(以 MiBps 为单位)。如需了解最新的限制,请参阅 Compute Engine 文档。IOPS_LIMIT
:可选。对于 Hyperdisk Balanced 磁盘,这是磁盘可以处理的 IOPS 数。如需了解最新的性能限制,请参阅 Compute Engine 文档。
Hyperdisk Throughput
gcloud compute disks create DISK_NAME \
--size=SIZE \
--source-snapshot=SNAPSHOT_NAME \
--provisioned-throughput=TRHROUGHPUT_LIMIT \
--type=hyperdisk-throughput
请替换以下内容:
DISK_NAME
:新磁盘的名称。SIZE
:新磁盘的大小,以吉比字节 (GiB 或 GB) 或太比字节 (TiB 或 TB) 为单位。如需了解最新的容量限制,请参阅 Compute Engine 文档。SNAPSHOT_NAME
:要恢复的快照的名称。THROUGHPUT_LIMIT
:可选:对于 Hyperdisk Throughput 磁盘,这是一个整数,表示磁盘可以处理的吞吐量(以 MiBps 为单位)。如需了解最新的性能限制,请参阅 Compute Engine 文档。
Hyperdisk Extreme
gcloud compute disks create DISK_NAME \
--size=SIZE \
--source-snapshot=SNAPSHOT_NAME \
--provisioned-iops=IOPS_LIMIT \
--type=hyperdisk-iops
请替换以下内容:
DISK_NAME
:新磁盘的名称。SIZE
:新磁盘的大小,以吉比字节 (GiB 或 GB) 或太比字节 (TiB 或 TB) 为单位。如需了解最新的容量限制,请参阅 Compute Engine 文档。SNAPSHOT_NAME
:要恢复的快照的名称。IOPS_LIMIT
(可选):对于 Hyperdisk Extreme 磁盘,这是磁盘每秒可处理的 I/O 操作数。如需了解最新的性能限制,请参阅 Compute Engine 文档。
为 Hyperdisk 卷创建快照
如需通过 Hyperdisk 卷创建快照,请按照与为 Persistent Disk 卷创建快照相同的步骤操作:
更新现有 Hyperdisk 卷的预配吞吐量或 IOPS
本部分介绍如何修改 Hyperdisk 卷的预配性能。
吞吐量
只有 Hyperdisk Balanced 和 Hyperdisk Throughput 卷才支持更新预配吞吐量。
如需更新 Hyperdisk 卷的预配吞吐量级别,请按照更改 Hyperdisk 卷的预配性能中的 Google Cloud 控制台、gcloud CLI 或 Compute Engine API 说明进行操作。
您可以在创建卷后更改 Hyperdisk 卷的预配吞吐量级别(最多每 4 小时一次)。新的吞吐量级别最多可能需要 15 分钟才能生效。在性能更改期间,任何性能 SLA 和 SLO 都不会生效。 无论磁盘是否挂接到正在运行的实例,您都可以随时更改现有卷的吞吐量级别。
您指定的新吞吐量级别必须遵循 Hyperdisk 卷支持的值。
IOPS
只有 Hyperdisk Balanced 和 Hyperdisk Extreme 卷才支持更新预配 IOPS。
如需更新 Hyperdisk 卷的预配 IOPS 级别,请按照更改 Hyperdisk 卷的预配性能中的 Google Cloud 控制台、gcloud CLI 或 Compute Engine API 说明进行操作。
您可以在创建卷后更改 Hyperdisk IOPS 卷的预配 IOPS 级别(最多每 4 小时一次)。新的 IOPS 级别最多可能需要 15 分钟才能生效。在性能更改期间,任何性能 SLA 和 SLO 都不会生效。 无论磁盘是否挂接到正在运行的实例,您都可以随时更改现有卷的 IOPS 级别。
您指定的新 IOPS 级别必须遵循 Hyperdisk 卷支持的值。
如需更新 Hyperdisk 卷的预配 IOPS 级别,您必须确定支持 PersistentVolumeClaim 和 PersistentVolume 资源的 Persistent Disk 的名称:
在 Google Cloud 控制台中,转到对象浏览器。
查找 PersistentVolumeClaim 对象的条目。
点击卷链接。
打开关联 PersistentVolume 的 YAML 标签页。在此标签页中找到 CSI
volumeHandle
值。请注意此句柄的最后一个元素(其值应类似于“
pvc-XXXXX
”)。这是 PersistentVolumeClaim 的名称。您还应该记下项目和可用区。
监控 Hyperdisk 卷上的吞吐量或 IOPS
如需监控 Hyperdisk 卷的预配性能,请参阅 Compute Engine 文档中的分析预配的 IOPS 和吞吐量。
问题排查
本部分提供了解决 GKE 上的 Hyperdisk 卷问题的问题排查指南。
无法更改性能或容量:比率超出范围
如果您尝试更改预配的性能级别或容量,但您选择的性能级别或容量超出卷的可接受范围,则会发生以下错误:
Requested provisioned throughput cannot be higher than <value>.
Requested provisioned throughput cannot be lower than <value>.
Requested provisioned throughput is too high for the requested disk size.
Requested provisioned throughput is too low for the requested disk size.
Requested disk size is too high for current provisioned throughput.
为 Hyperdisk Throughput 卷预配的吞吐量必须满足以下要求:
- 每 TiB 容量至少为 10 MiBps,每 TiB 容量不超过 90 MiBps。
- 每个卷最多 600 MiBps。
要解决此问题,请将请求的吞吐量或容量更正在允许的范围内,然后重新发出命令。
无法更改性能:速率受限
如果您尝试更改预配的性能级别,但性能级别在过去 4 小时内已更改,则会发生以下错误:
Cannot update provisioned throughput due to being rate limited.
Cannot update provisioned iops due to being rate limited.
Hyperdisk Throughput 卷和 IOPS 卷可以每 4 小时更新一次预配的性能。如需解决此问题,请等待冷却期让卷到期,然后重新发出命令。