Compute Engine Persistent Disk CSI 驱动程序是您访问使用 Google Kubernetes Engine (GKE) 集群的 Hyperdisk 存储的主要方式。
准备工作
在开始之前,请确保您已执行以下任务:
- 启用 Google Kubernetes Engine API。 启用 Google Kubernetes Engine API
- 如果您要使用 Google Cloud CLI 执行此任务,请安装并初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请运行
gcloud components update命令以获取最新版本。较早版本的 gcloud CLI 可能不支持运行本文档中的命令。
- 将您的默认区域和可用区设置为某个支持的值。
要求
如需在 GKE 中使用 Hyperdisk 卷,您的集群必须满足以下要求:
- 使用运行 GKE 1.26 版或更高版本的 Linux 集群。如果您使用发布渠道,请确保该渠道具有此驱动程序所需的最低 GKE 版本或更高版本 预配 Hyperdisk Balanced High Availability 卷需要使用 GKE 1.33 版或更高版本。
- 确保已启用 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-balancedhyperdisk-throughputhyperdisk-extremehyperdisk-mlhyperdisk-balanced-high-availability
如需创建具有所需的吞吐量或 IOPS 级别的新 StorageClass,请在预配工具字段中使用 pd.csi.storage.gke.io,并指定其中一种 Hyperdisk 存储类型。
对于由预配的初始磁盘大小确定的性能,每种 Hyperdisk 类型都有默认值。创建 StorageClass 时,您可以根据 Hyperdisk 类型选择性地指定以下参数。如果您省略这些参数,GKE 会改用基于容量的磁盘类型默认值。如需获得允许的吞吐量或 IOPS 值指南,请参阅规划 Hyperdisk 卷的性能级别。
| 参数 | Hyperdisk 类型 | 用法 |
|---|---|---|
provisioned-throughput-on-create |
Hyperdisk Balanced*、Hyperdisk Balanced High Availability、Hyperdisk Throughput | 使用“Mi”限定符表示吞吐量值(以 MiB/s 为单位);例如,如果您需要的吞吐量为 250 MiB/s,请在创建 StorageClass 时指定 "250Mi"。 |
provisioned-iops-on-create |
Hyperdisk Balanced, Hyperdisk Balanced High Availability, Hyperdisk Extreme | IOPS 值应不带任何限定符表示;例如,如果您需要 7,000 IOPS,请在创建 StorageClass 时指定 "7000"。 |
以下示例展示了如何为每种 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
Hyperdisk Balanced HA
将以下清单保存在名为
hdb-ha-example-class.yaml的文件中。对于可用区级集群,请设置要在其中创建 PersistentVolume 的可用区。
对于区域级集群,您可以选择不设置
allowedTopologies字段,以便在 Pod 调度时在两个随机选择的可用区中创建 PersistentVolume。
如需详细了解支持的可用区,请参阅 Hyperdisk 区域可用性。
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: balanced-ha-storage provisioner: pd.csi.storage.gke.io volumeBindingMode: WaitForFirstConsumer allowVolumeExpansion: true parameters: type: hyperdisk-balanced-high-availability provisioned-throughput-on-create: "250Mi" provisioned-iops-on-create: "7000" allowedTopologies: - matchLabelExpressions: - key: topology.gke.io/zone values: - ZONE1 - ZONE2创建 StorageClass:
kubectl create -f hdb-ha-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
Hyperdisk Balanced HA
在此示例中,您将 Hyperdisk Balanced High Availability 卷的最小存储容量指定为 20 GiB,并将访问模式指定为 ReadWriteOnce。Hyperdisk Balanced High Availability 还支持 ReadWriteMany 和 ReadWriteOncePod 访问模式。如需了解每种访问模式的差异和应用场景,请参阅永久性卷访问模式。
将以下 PersistentVolumeClaim 清单保存到名为
pvc-example.yaml的文件中:kind: PersistentVolumeClaim apiVersion: v1 metadata: name: podpvc spec: accessModes: - ReadWriteOnce storageClassName: balanced-ha-storage resources: requests: storage: 20Gi应用引用您在前面示例中创建的 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: # Reference the PVC created earlier. claimName: podpvc readOnly: false如需根据
hyperdisk-example-deployment.yaml清单文件创建 Deployment,请运行以下命令:kubectl apply -f hyperdisk-example-deployment.yaml确认已成功创建 Deployment:
kubectl get deploymentHyperdisk 实例可能需要几分钟才能完成预配。 部署完成预配后,会报告
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
- Hyperdisk 高可用性
在磁盘来源类型下,点击快照。
选择要恢复的快照的名称。
选择新磁盘的大小(以 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
替换以下内容:
Hyperdisk Throughput
gcloud compute disks create DISK_NAME \
--size=SIZE \
--source-snapshot=SNAPSHOT_NAME \
--provisioned-throughput=TRHROUGHPUT_LIMIT \
--type=hyperdisk-throughput
请替换以下内容:
Hyperdisk Extreme
gcloud compute disks create DISK_NAME \
--size=SIZE \
--source-snapshot=SNAPSHOT_NAME \
--provisioned-iops=IOPS_LIMIT \
--type=hyperdisk-extreme
请替换以下内容:
Hyperdisk Balanced HA
gcloud compute disks create DISK_NAME \
--size=SIZE \
--region=REGION \
--replica-zones=('ZONE1', 'ZONE2') \
--source-snapshot=SNAPSHOT_NAME \
--provisioned-throughput=TRHROUGHPUT_LIMIT \
--provisioned-iops=IOPS_LIMIT \
--type=hyperdisk-balanced-high-availability
替换以下内容:
DISK_NAME:新磁盘的名称。SIZE:新磁盘的大小,以吉比字节 (GiB) 或太比字节 (TiB) 为单位。如需了解最新的容量限制,请参阅 Compute Engine 文档。REGION:新磁盘的区域。如需了解最新的区域可用性,请参阅 Compute Engine 文档。ZONE1和ZONE2:副本将位于的区域内的可用区。SNAPSHOT_NAME:要恢复的快照的名称。THROUGHPUT_LIMIT:可选。对于 Hyperdisk Balanced High Availability 磁盘,这是一个整数,表示磁盘可以达到的吞吐量(以 MiB/秒为单位)。如需详细了解容量限制,请参阅 大小和性能限制IOPS_LIMIT:可选。对于 Hyperdisk Balanced 高可用性磁盘,这是磁盘可以达到的最大 IOPS 数。如需详细了解容量限制,请参阅 大小和性能限制。
为 Hyperdisk 卷创建快照
如需通过 Hyperdisk 卷创建快照,请按照与为 Persistent Disk 卷创建快照相同的步骤操作:
更新现有 Hyperdisk 卷的预配吞吐量或 IOPS
本部分介绍如何修改 Hyperdisk 卷的预配性能。
吞吐量
只有 Hyperdisk Balanced、Hyperdisk Balanced High Availability 和 Hyperdisk Throughput 卷才支持更新预配吞吐量。
如需更新 Hyperdisk 卷的预配吞吐量级别,请按照更改 Hyperdisk 卷的预配性能中的 Google Cloud 控制台、gcloud CLI 或 Compute Engine API 说明进行操作。
您可以在创建卷后更改 Hyperdisk 卷的预配吞吐量级别(最多每 4 小时一次)。新的吞吐量级别最多可能需要 15 分钟才能生效。在性能更改期间,任何性能 SLA 和 SLO 都不会生效。 无论磁盘是否挂接到正在运行的实例,您都可以随时更改现有卷的吞吐量级别。
您指定的新吞吐量级别必须分别遵循 Hyperdisk Balanced、Hyperdisk Throughput 和 Hyperdisk Balanced High Availability 卷支持的值。
如需更新 Hyperdisk 卷的预配吞吐量级别,您必须确定支持 PersistentVolumeClaim 和 PersistentVolume 资源的 Persistent Disk 的名称:
在 Google Cloud 控制台中,前往对象浏览器。
查找 PersistentVolumeClaim 对象的条目。
点击卷链接。
打开关联 PersistentVolume 的 YAML 标签页。在此标签页中找到 CSI
volumeHandle值。请注意此句柄的最后一个元素(其值应类似于“
pvc-XXXXX”)。这是 PersistentVolumeClaim 的名称。您还应该记下项目和可用区。
IOPS
只有 Hyperdisk Balanced 卷、Hyperdisk Balanced High Availability 卷和 Hyperdisk Extreme 卷才支持更新预配 IOPS。
如需更新 Hyperdisk 卷的预配 IOPS 级别,请按照更改 Hyperdisk 卷的预配性能中的 Google Cloud 控制台、gcloud CLI 或 Compute Engine API 说明进行操作。
您可以在创建卷后更改 Hyperdisk IOPS 卷的预配 IOPS 级别(最多每 4 小时一次)。新的 IOPS 级别最多可能需要 15 分钟才能生效。在性能更改期间,任何性能 SLA 和 SLO 都不会生效。 无论磁盘是否挂接到正在运行的实例,您都可以随时更改现有卷的 IOPS 级别。
您指定的新 IOPS 级别必须分别遵循 Hyperdisk Balanced 或 Hyperdisk Extreme 卷支持的值。
如需更新 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 MiB/秒,每 TiB 容量不超过 90 MiB/秒。
- 每个卷最多为 600 MiB/秒。
要解决此问题,请将请求的吞吐量或容量更正在允许的范围内,然后重新发出命令。
无法更改性能:速率受限
如果您尝试更改预配的性能级别,但性能级别在过去 4 小时内已更改,则会发生以下错误:
Cannot update provisioned throughput due to being rate limited.
Cannot update provisioned iops due to being rate limited.
Hyperdisk Throughput 卷和 IOPS 卷可以每 4 小时更新一次预配的性能。如需解决此问题,请等待冷却期让卷到期,然后重新发出命令。