利用 Hyperdisk 存储池优化存储性能和费用


本页面介绍了 Google Kubernetes Engine (GKE) 集群如何使用 GKE Hyperdisk 存储池来汇集和共享存储容量、吞吐量和 IOPS。

概览

存储池会按逻辑将物理存储设备分组,以便您细分资源。您可以在这些存储池中预配 Google Cloud Hyperdisk,从而创建 Hyperdisk 存储池。Hyperdisk 存储池提供预先预配的容量、吞吐量和 IOPS,您的 GKE 集群磁盘可以共享这些资源。

您可以使用 Hyperdisk 存储池来更经济高效地管理存储资源。这样,您就可以利用重复数据删除和精简配置等高效技术。

在本指南中,您将使用 us-east4-c 可用区来创建 Hyperdisk Balanced 存储池和其他资源。

规划时的注意事项

在预配和使用 Hyperdisk 存储池之前,请考虑以下要求和限制。

创建和管理存储池

需要遵循以下要求和限制:

在存储池中预配启动磁盘

需要遵循以下要求和限制:

  • 确保集群的节点位置节点池的节点位置与存储池的可用区完全匹配。如果您已启用节点自动预配,则不受此限制。节点自动预配功能可根据需要在正确的可用区自动创建节点池。
  • 确保运行 Pod 的机器类型支持连接 Hyperdisk Balanced 磁盘类型。Hyperdisk Throughput 不支持用作启动磁盘。请参阅 Hyperdisk 机器类型支持文档
  • 您只能在手动创建或更新的节点池中预配存储池中的启动磁盘。
  • 使用节点自动预配功能自动创建节点时,这些节点的启动磁盘无法放置在存储池中。

在存储池中预配已挂接的磁盘

需要遵循以下要求和限制:

  • 在存储池中预配已挂接的磁盘所需的最低 GKE 版本为 1.29.2-gke.1035000 及更高版本。
  • 确保已启用 Compute Engine Persistent Disk CSI 驱动程序。默认情况下,新的 Autopilot 和 Standard 集群会启用 Compute Engine Persistent Disk 驱动程序,并且在 Autopilot 集群中无法停用或修改。如需启用该驱动程序,请参阅在现有集群上启用 Compute Engine Persistent Disk CSI 驱动程序
  • 确保存储池位于集群的至少一个节点位置和节点池的节点位置。
  • 您只能在存储池中预配 Hyperdisk Throughput 和 Hyperdisk Balanced 挂接的磁盘。挂接磁盘的类型必须与存储池的类型一致。如需了解详情,请参阅 Hyperdisk 存储池的类型
  • 确保运行 Pod 的机器类型支持从存储池中挂接您使用的磁盘类型。如需了解详情,请参阅 Hyperdisk 机器类型支持

配额

创建 Hyperdisk 存储池时,您可以将其配置为标准预配或高级预配,以便设置容量和性能。如果您想增加容量、吞吐量或 IOPS 的配额,请为相关配额过滤条件申请更高的配额。

如需了解详情,请参阅查看项目的配额申请更高的配额

对 Hyperdisk Balanced 存储池使用以下配额过滤器:

  • HDB-STORAGE-POOL-TOTAL-ADVANCED-CAPACITY-per-project-region:使用高级容量预配功能增加容量。
  • HDB-STORAGE-POOL-TOTAL-ADVANCED-IOPS-per-project-region:使用高级性能预配功能提高 IOPS。
  • HDB-STORAGE-POOL-TOTAL-ADVANCED-THROUGHPUT-per-project-region:使用高级性能预配来提高吞吐量。
  • HDB-TOTAL-GB-per-project-region:使用标准容量预配功能增加容量。
  • HDB-TOTAL-IOPS-per-project-region:使用标准性能预配来提高 IOPS。
  • HDB-TOTAL-THROUGHPUT-per-project-region:使用标准性能预配来提高吞吐量。

对 Hyperdisk Throughput 存储池使用以下配额过滤器:

  • HDT-STORAGE-POOL-TOTAL-ADVANCED-CAPACITY-per-project-region:使用高级容量预配功能增加容量。
  • HDT-STORAGE-POOL-TOTAL-ADVANCED-THROUGHPUT-per-project-region:使用高级性能预配来提高吞吐量。
  • HDT-TOTAL-GB-per-project-region:使用标准容量预配功能增加容量。
  • HDT-TOTAL-THROUGHPUT-per-project-region:使用标准性能预配来提高吞吐量。

例如,如果您想通过高级容量预配功能提高每个项目和每个区域的 Hyperdisk Balanced 存储池的总容量,请针对以下过滤条件申请更高的配额:

hdb-storage-pool-total-advanced-capacity-per-project-region

价格

如需了解价格详情,请参阅 Hyperdisk 存储池价格

准备工作

在开始之前,请确保您已执行以下任务:

  • 启用 Google Kubernetes Engine API。
  • 启用 Google Kubernetes Engine API
  • 如果您要使用 Google Cloud CLI 执行此任务,请安装初始化 gcloud CLI。 如果您之前安装了 gcloud CLI,请运行 gcloud components update 以获取最新版本。

创建 Hyperdisk 存储池

在该存储池中预配启动磁盘或挂接磁盘之前,请先创建 Hyperdisk 存储池。如需了解详情,请参阅创建 Hyperdisk 存储池

请务必在支持的可用区中创建存储池。

例如,使用以下命令创建具有高级容量和高级性能的 Hyperdisk Balanced 存储池,并在 us-east4-c 可用区预配 10 TB 容量、10000 IOPS/s 吞吐量和 1024 MBps 吞吐量:

export PROJECT_ID=PROJECT_ID
export ZONE=us-east4-c
gcloud compute storage-pools create pool-$ZONE \
    --provisioned-capacity=10tb --storage-pool-type=hyperdisk-balanced \
    --zone=$ZONE --project=$PROJECT_ID --capacity-provisioning-type=advanced \
    --performance-provisioning-type=advanced --provisioned-iops=10000 \
    --provisioned-throughput=1024

PROJECT_ID 替换为您的 Google Cloud 账号的项目 ID。

检查存储池可用区

  • 对于已启用节点自动预配功能的 Autopilot 集群和 Standard 集群,您可以在集群所在区域的任何可用区中创建存储池。如果您创建存储池的可用区中没有节点池,则 Pod 会一直处于 Pending 状态,直到 GKE 集群自动扩缩器能够在该可用区中预配新节点池为止。

  • 对于未启用节点自动预配功能的 Standard 集群,请在集群的默认节点可用区中创建存储池,因为存储池是可用区级资源。您可以使用 --node-locations 标志设置集群的节点可用区。

    • 对于可用区级集群,如果您未指定 --node-locations,则所有节点都将在集群的主要可用区中创建。
    • 对于区域级集群,如果您未指定 --node-locations,GKE 会将您的工作节点分布到该区域内随机选择的三个可用区。

如需检查集群的默认节点可用区,请运行以下命令:

gcloud container clusters describe CLUSTER_NAME  | yq '.locations'

CLUSTER_NAME 替换为您在预配启动磁盘或已挂载磁盘时要创建的集群的名称。

在 Hyperdisk 存储池中预配 GKE 启动磁盘

在执行以下任一操作时,您可以在 Hyperdisk 存储池中预配 GKE 启动磁盘:

  • 创建新的 GKE 集群时
  • 创建新节点池时
  • 更新现有节点池时

创建集群时

如需创建在存储池中预配了启动磁盘的 GKE 集群,请使用以下命令:

gcloud container clusters create CLUSTER_NAME \
    --disk-type=DISK_TYPE --storage-pools=STORAGE_POOL,[...] \
    --node-locations=ZONE,[...] --machine-type=MACHINE_TYPE \
    --zone=ZONE

替换以下内容:

  • CLUSTER_NAME:为您要创建的集群提供唯一名称。
  • DISK_TYPE:将其设置为 hyperdisk-balanced.。如果留空,磁盘类型将默认为 Hyperdisk Balanced。
  • STORAGE_POOL,[...]:存储池资源路径(例如 projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c)的英文逗号分隔列表,其中将预配集群的启动磁盘。确保存储池资源路径中的可用区与 --node-locations 中的可用区一致。
  • ZONE,[...]:应复制节点足迹的可用区的英文逗号分隔列表。对于区域级集群,您可以改为指定区域。所有可用区必须与集群位于同一区域,由 -location--zone--region 标志指定。
  • MACHINE_TYPE:您要为节点使用的受支持的机器类型。
  • ZONE:要在其中创建集群的可用区。使用 —region 标志创建区域级集群。

创建节点池时

如需创建在存储池中预配启动磁盘的 GKE 节点池,请使用以下命令:

gcloud container node-pools create NODE_POOL_NAME \
    --disk-type=DISK_TYPE --storage-pools=STORAGE_POOL,[...] \
    --node-locations=ZONE,[...] --machine-type=MACHINE_TYPE \
    --zone=ZONE --cluster=CLUSTER_NAME

替换以下内容:

  • NODE_POOL_NAME:为您要创建的节点池提供唯一名称。
  • DISK_TYPE:将其设置为 hyperdisk-balanced.。如果留空,磁盘类型将默认为 Hyperdisk Balanced。
  • STORAGE_POOL,[...]:存储池资源路径(例如 projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c)的英文逗号分隔列表,其中将预配集群的启动磁盘。确保存储池资源路径中的可用区与 --node-locations 中的值匹配。
  • ZONE,[...]:应复制节点足迹的可用区的英文逗号分隔列表。所有可用区必须与集群位于同一区域,由 -location--zone--region 标志指定。
  • MACHINE_TYPE:您要为节点使用的受支持的机器类型。
  • ZONE:要在其中创建节点池的可用区。
  • CLUSTER_NAME:要在其中创建节点池的现有集群。

更新节点池时

您可以使用 update 命令在节点池中添加或替换存储池。此命令无法用于从节点池中移除存储池。

如需更新 GKE 节点池,以便其启动磁盘在存储池中预配,请使用以下命令。

gcloud container node-pools update NODE_POOL_NAME \
  --storage-pools=STORAGE_POOL,[...] \
  --zone=ZONE --cluster=CLUSTER_NAME
  • NODE_POOL_NAME:要更新以使用存储池的现有节点池的名称。
  • STORAGE_POOL,[...]:以英文逗号分隔的现有存储池资源路径列表(例如 projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c)。请确保存储池资源路径中的可用区与您要更新的节点池的可用区一致。
  • ZONE:节点池所在的可用区。
  • CLUSTER_NAME:此节点池所属的 GKE 集群的名称。

GKE 会根据节点池的升级策略更新节点池。

在 Hyperdisk 存储池中预配 GKE 挂接磁盘

本部分内容:

  • 您可以创建新的 GKE 集群,并在存储池中预配挂接磁盘。
  • 创建 StorageClass,以便在 Pod 通过 PersistentVolumeClaim (PVC) 请求 PersistentVolume (PV) 时动态预配 PV。为了让 PV 使用存储池的共享资源,您需要使用 StorageClass 中的 storage-pools 参数指定存储池。然后,在 PVC 中使用 StorageClass 来预配 Pod 将使用的 Hyperdisk Balanced 卷。
  • 创建 PVC 以请求从 GKE 集群中为 Pod 分配 PV(一块 Hyperdisk 存储空间)。这样,您就可以从存储池的共享资源中受益。
  • 创建使用 PVC 的部署,以确保您的应用即使在 Pod 重启和重新调度后也能访问持久性存储空间。

创建 GKE 集群

在开始之前,请查看预配已挂接磁盘时的注意事项

Autopilot

如需使用 gcloud CLI 创建 Autopilot 集群,请参阅创建 Autopilot 集群

示例:

gcloud container clusters create-auto CLUSTER_NAME --region=REGION

替换以下内容:

  • CLUSTER_NAME:为您要创建的集群提供唯一名称。
  • REGION:您要创建集群的区域。

如需选择受支持的机器类型,请在创建部署时指定 cloud.google.com/compute-class: Performance nodeSelector。如需查看可使用性能计算类的 Compute Engine 机器系列列表,请参阅支持的机器系列

标准

如需使用 gcloud CLI 创建标准可用区级集群,请参阅创建可用区级集群

如需使用 gcloud CLI 创建标准区域级集群,请参阅创建区域级集群

示例:

gcloud container clusters create CLUSTER_NAME --zone=ZONE --project=PROJECT_ID --machine-type=MACHINE_TYPE --disk-type="DISK_TYPE"

替换以下内容:

  • CLUSTER_NAME:为您要创建的集群提供唯一名称。
  • ZONE:您在其中创建集群的可用区。使用 —region 标志创建区域级集群。
  • PROJECT_ID:您的 Google Cloud 账号项目 ID。
  • MACHINE_TYPE:您要为节点使用的受支持的机器类型。
  • DISK_TYPE:将其设置为 hyperdisk-balanced.。如果留空,磁盘类型将默认为 Hyperdisk Balanced。

创建一个 StorageClass

在 Kubernetes 中,如需指明要将 PV 创建在存储池中,请使用 StorageClass。如需了解详情,请参阅 StorageClasses

如需创建具有所需吞吐量或 IOPS 级别的新 StorageClass,请执行以下操作:

  • 在预配工具字段中使用 pd.csi.storage.gke.io
  • 指定 Hyperdisk Balanced 存储类型。
  • 指定 storage-pools 参数,并将值设置为要使用的特定存储池的列表。列表中的每个存储池都必须采用以下格式指定: projects/PROJECT_ID/zones/ZONE/storagePools/STORAGE_POOL_NAME.
  • (可选)指定性能参数 provisioned-throughput-on-createprovisioned-iops-on-create.

对于由预配的初始磁盘大小确定的性能,每种 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 卷的性能级别

使用以下清单创建并应用名为 storage-pools-sc 的 StorageClass,以便在存储池 projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c 中动态预配 PV:

kubectl apply -f - <<EOF
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: storage-pools-sc
provisioner: pd.csi.storage.gke.io
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
parameters:
  type: hyperdisk-balanced
  provisioned-throughput-on-create: "140Mi"
  provisioned-iops-on-create: "3000"
  storage-pools: projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c
EOF

通过利用此 StorageClass 中的 volumeBindingMode: WaitForFirstConsumer,系统会延迟绑定和预配 PVC,直到创建使用 PVC 的 Pod。这种方法可确保 PV 不会过早预配,并且 PV 与使用它的 Pod 之间存在可用区匹配。如果其可用区不匹配,则 Pod 将保持 Pending 状态。

创建 PersistentVolumeClaim (PVC)

创建一个引用您创建的 storage-pools-sc StorageClass 的 PVC。

使用以下清单创建一个名为 my-pvc 的 PVC,并将 2048 GiB 作为 Hyperdisk Balanced 卷的目标存储容量:

kubectl apply -f - <<EOF
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  storageClassName: storage-pools-sc
  accessModes:
  - ReadWriteOnce
  resources:
    requests:
      storage: 2048Gi
EOF

创建使用 PVC 的部署

最佳实践

将 Pod 与 PersistentVolume 搭配使用时,请使用工作负载控制器,例如 DeploymentStatefulSet

为确保 Pod 可以在支持 Hyperdisk Balanced 的机器系列的节点池上进行调度,请使用 cloud.google.com/machine-family 节点选择器配置部署。如需了解详情,请参阅Hyperdisk 的机器类型支持。在以下示例部署中,您使用 c3 机器系列。

创建并应用以下清单,以使用上一部分中创建的 PVC 配置 Pod 以部署 Postgres Web 服务器:

Autopilot

在 Autopilot 集群中,指定 cloud.google.com/compute-class: PerformancenodeSelector 以预配 Hyperdisk Balanced 卷。如需了解详情,请参阅为 Pod 申请专用节点

kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres
spec:
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      nodeSelector:
        cloud.google.com/machine-family: c3
        cloud.google.com/compute-class: Performance
      containers:
      - name: postgres
        image: postgres:14-alpine
        args: [ "sleep", "3600" ]
        volumeMounts:
        - name: sdk-volume
          mountPath: /usr/share/data/
      volumes:
      - name: sdk-volume
        persistentVolumeClaim:
          claimName: my-pvc
EOF

标准

在未启用节点自动预配功能的 Standard 集群中,请确保具有指定机器系列的节点池已启动并运行,然后再创建部署。否则,Pod 无法调度。

kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: postgres
spec:
  selector:
    matchLabels:
      app: postgres
  template:
    metadata:
      labels:
        app: postgres
    spec:
      nodeSelector:
        cloud.google.com/machine-family: c3
      containers:
      - name: postgres
        image: postgres:14-alpine
        args: [ "sleep", "3600" ]
        volumeMounts:
        - name: sdk-volume
          mountPath: /usr/share/data/
      volumes:
      - name: sdk-volume
        persistentVolumeClaim:
          claimName: my-pvc
EOF

确认已成功创建 Deployment:

  kubectl get deployment

Hyperdisk 实例可能需要几分钟才能完成预配并显示 READY 状态。

确认已预配已连接的磁盘

  1. 检查名为 my-pvc 的 PVC 是否已成功绑定到 PV:

    kubectl get pvc my-pvc
    

    输出类似于以下内容:

    
    NAME          STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS       AGE
    my-pvc        Bound    pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6   2Ti        RWO            storage-pools-sc   2m24s
    
  2. 检查是否已按 StorageClass 和 PVC 中指定的方式预配卷:

    gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
    

    输出类似于以下内容:

    NAME                                      STATUS  PROVISIONED_IOPS  PROVISIONED_THROUGHPUT  SIZE_GB
    pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6  READY   3000              140                     2048
    

在存储池中拍摄快照和恢复已挂接磁盘

不允许将磁盘移入或移出存储池。如需将磁盘移入或移出存储池,请通过快照重新创建磁盘。如需了解详情,请参阅更改磁盘类型

本部分内容:

创建测试文件

如需创建和验证测试文件,请执行以下操作:

  1. 获取 Postgres 部署的 Pod 名称:

    kubectl get pods -l app=postgres
    

    输出类似于以下内容:

    NAME                         READY   STATUS    RESTARTS   AGE
    postgres-78fc84c9ff-77vx6   1/1     Running   0          44s
    
  2. 在 Pod 中创建测试文件 hello.txt

    kubectl exec postgres-78fc84c9ff-77vx6 \
      -- sh -c 'echo "Hello World!" > /usr/share/data/hello.txt'
    
  3. 验证测试文件是否已创建:

    kubectl exec postgres-78fc84c9ff-77vx6 \
      -- sh -c 'cat /usr/share/data/hello.txt'
    Hello World!
    

创建卷快照并删除测试文件

如需创建和验证快照,请执行以下操作:

  1. 创建一个 VolumeSnapshotClass,用于指定如何截取和管理卷的快照:

    kubectl apply -f - <<EOF
    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotClass
    metadata:
      name: my-snapshotclass
    driver: pd.csi.storage.gke.io
    deletionPolicy: Delete
    EOF
    
  2. 创建 VolumeSnapshot,并从绑定到 my-pvc PersistentVolumeClaim 的卷中截取快照:

    kubectl apply -f - <<EOF
    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: my-snapshot
    spec:
      volumeSnapshotClassName: my-snapshotclass
      source:
        persistentVolumeClaimName: my-pvc
    EOF
    
  3. 验证是否已创建卷快照内容:

    kubectl get volumesnapshotcontents
    

    输出类似于以下内容:

    NAME                                               READYTOUSE   RESTORESIZE     DELETIONPOLICY   DRIVER                  VOLUMESNAPSHOTCLASS   VOLUMESNAPSHOT   VOLUMESNAPSHOTNAMESPACE   AGE
    snapcontent-e778fde2-5f1c-4a42-a43d-7f9d41d093da   false        2199023255552   Delete           pd.csi.storage.gke.io   my-snapshotclass      my-snapshot      default                   33s
    
  4. 确认快照已准备就绪:

    kubectl get volumesnapshot \
      -o custom-columns='NAME:.metadata.name,READY:.status.readyToUse'
    

    输出类似于以下内容:

    NAME          READY
    my-snapshot   true
    
  5. 删除在 Pod postgres-78fc84c9ff-77vx6 中创建的原始测试文件 hello.txt

    kubectl exec postgres-78fc84c9ff-77vx6 \
        -- sh -c 'rm /usr/share/data/hello.txt'
    

恢复卷快照

如需恢复卷快照和数据,请按以下步骤操作:

  1. 创建新的 PVC,以从快照恢复数据,并确保新卷与原始卷位于同一存储池 (storage-pools-sc) 中。应用以下清单:

    kubectl apply -f - <<EOF
    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: pvc-restore
    spec:
      dataSource:
        name: my-snapshot
        kind: VolumeSnapshot
        apiGroup: snapshot.storage.k8s.io
      storageClassName: storage-pools-sc
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 2048Gi
    EOF
    
  2. 更新名为 postgres 的现有部署,使其使用您刚刚创建的新恢复的 PVC。应用以下清单:

    kubectl apply -f - <<EOF
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: postgres
    spec:
      selector:
        matchLabels:
          app: postgres
      template:
        metadata:
          labels:
            app: postgres
        spec:
          nodeSelector:
            cloud.google.com/machine-family: c3
          containers:
          - name: postgres
            image: google/cloud-sdk:slim
            args: [ "sleep", "3600" ]
            volumeMounts:
            - name: sdk-volume
              mountPath: /usr/share/data/
          volumes:
          - name: sdk-volume
            persistentVolumeClaim:
              claimName: pvc-restore
    EOF
    
  3. 获取新创建的 Pod 的名称,该 Pod 是 postgres 部署的一部分:

    kubectl get pods -l app=postgres
    

    输出类似于以下内容:

    NAME                         READY   STATUS        RESTARTS   AGE
    postgres-59f89cfd8c-42qtj   1/1     Running       0          40s
    
  4. 验证从快照恢复卷后,之前已删除的 hello.txt 文件是否现在存在于新 Pod (postgres-59f89cfd8c-42qtj) 中:

    kubectl exec postgres-59f89cfd8c-42qtj \
     -- sh -c 'cat /usr/share/data/hello.txt'
    Hello World!
    

    这可以验证快照和恢复过程是否已成功完成,以及快照中的数据是否已恢复到 Pod 可访问的新 PV。

  5. 确认从快照创建的卷位于您的存储池中:

    kubectl get pvc pvc-restore
    

    输出类似于以下内容:

    NAME          STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS       AGE
    pvc-restore   Bound    pvc-b287c387-bc51-4100-a00e-b5241d411c82   2Ti        RWO            storage-pools-sc   2m24s
    
  6. 检查新卷是否已按 StorageClass 和 PVC 中指定的方式进行预配:

    gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
    

    输出类似于以下内容,您可以在其中看到在同一存储池中预配的新卷 pvc-b287c387-bc51-4100-a00e-b5241d411c82

    
    NAME                                      STATUS  PROVISIONED_IOPS  PROVISIONED_THROUGHPUT  SIZE_GB
    pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6  READY   3000              140                     2048
    pvc-b287c387-bc51-4100-a00e-b5241d411c82  READY   3000              140                     2048
    

    这样可确保恢复的卷能够从存储池的共享资源和功能中受益。

将现有卷迁移到存储池

使用快照和恢复功能将存储在存储池外部的卷迁移到存储池中。

确保满足以下条件:

  • 您的新 PVC pvc-restore 引用的 StorageClass 会指定 storage-pools 参数,指向您要将卷移入其中的存储池。
  • 正在截取快照的源 PV 应与 StorageClass 为不指定 storage-pools 参数的 PVC 相关联。

从快照恢复到新卷后,您可以删除源 PVC 和 PV。

清理

为避免系统向您的 Google Cloud 账号收取费用,请删除您在本指南中创建的存储空间资源。请先删除存储池中的所有磁盘,然后再删除存储池。

删除启动磁盘

当您删除节点(通过缩减节点池)或整个节点池时,系统会自动删除关联的启动磁盘。您也可以删除集群,以自动删除其中所有节点池的启动磁盘。

如需了解详情,请参阅以下主题:

删除已挂接的磁盘

如需删除在 Hyperdisk 存储池中预配的已挂接磁盘,请执行以下操作:

  1. 删除使用 PVC 的 Pod:

    kubectl delete deployments postgres
    
  2. 删除使用 Hyperdisk 存储池 StorageClass 的 PVC。

    kubectl delete pvc my-pvc
    

    确认已删除 PVC pvc-1ff52479-4c81-4481-aa1d-b21c8f8860c6

    gcloud compute storage-pools list-disks pool-us-east4-c --zone=us-east4-c
    

删除 Hyperdisk 存储池

使用以下命令删除 Hyperdisk 存储池:

gcloud compute storage-pools delete pool-us-east4-c --zone=us-east4-c --project=my-project

后续步骤