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

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

概览

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

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

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

规划时的注意事项

在预配和使用 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 存储池的类型
  • 在 StorageClass 中,每个可用区只能有 1 个存储池。
  • 在 StorageClass 中,所有存储池都必须具有存储池类型。
  • 确保运行 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 命令以获取最新版本。较早版本的 gcloud CLI 可能不支持运行本文档中的命令。

创建 Hyperdisk 存储池

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

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

例如,使用以下命令创建具有高级容量和高级性能的 Hyperdisk Balanced 存储池,并在 us-east4-c 可用区预配 10 TB 容量、10,000 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 \
    --location=CONTROL_PLANE_LOCATION

替换以下内容:

  • 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 标志指定。
  • MACHINE_TYPE:您要为节点使用的受支持机器类型。
  • CONTROL_PLANE_LOCATION:集群控制平面的 Compute Engine 位置。为区域级集群提供区域,或为可用区级集群提供可用区。

创建节点池时

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

gcloud container node-pools create NODE_POOL_NAME \
    --disk-type=DISK_TYPE --storage-pools=STORAGE_POOL,[...] \
    --node-locations=ZONE,[...] --machine-type=MACHINE_TYPE \
    --location=CONTROL_PLANE_LOCATION --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 标志指定。
  • MACHINE_TYPE:您要为节点使用的受支持机器类型。
  • CONTROL_PLANE_LOCATION:集群控制平面的 Compute Engine 位置。为区域级集群提供区域,或为可用区级集群提供可用区。
  • CLUSTER_NAME:要创建节点池的现有集群。

更新节点池时

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

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

gcloud container node-pools update NODE_POOL_NAME \
  --storage-pools=STORAGE_POOL,[...] \
  --location=CONTROL_PLANE_LOCATION --cluster=CLUSTER_NAME
  • NODE_POOL_NAME:现有节点池的名称,你要更新该节点池以使用存储池。
  • STORAGE_POOL,[...]:现有存储池资源路径(例如 projects/my-project/zones/us-east4-c/storagePools/pool-us-east4-c)的英文逗号分隔列表。请确保存储池资源路径中的可用区与您要更新的节点池的可用区匹配。
  • CONTROL_PLANE_LOCATION:集群控制平面的 Compute Engine 位置。为区域级集群提供区域,或为可用区级集群提供可用区。
  • CLUSTER_NAME:此节点池所属的 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 的 Deployment,以确保您的应用即使在 Pod 重启和重新调度后也能访问永久性存储空间。

创建 GKE 集群

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

Autopilot

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

示例:

gcloud container clusters create-auto CLUSTER_NAME --location=CONTROL_PLANE_LOCATION

替换以下内容:

  • CLUSTER_NAME:为您要创建的集群提供唯一名称。
  • CONTROL_PLANE_LOCATION:集群控制平面的 Compute Engine 区域

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

标准

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

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

示例:

gcloud container clusters create CLUSTER_NAME --location=CONTROL_PLANE_LOCATION --project=PROJECT_ID --machine-type=MACHINE_TYPE --disk-type="DISK_TYPE"

替换以下内容:

  • CLUSTER_NAME:为您要创建的集群提供唯一名称。
  • CONTROL_PLANE_LOCATION:集群控制平面的 Compute Engine 位置。为区域级集群提供区域,或为可用区级集群提供可用区。
  • PROJECT_ID:您的 Google Cloud 账号项目 ID。
  • MACHINE_TYPE:您要为节点使用的受支持机器类型。
  • DISK_TYPE:设置为 hyperdisk-balanced.。如果留空,磁盘类型将默认为 Hyperdisk Balanced。

创建一个 StorageClass

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

如需创建具有所需吞吐量或 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”限定符表示吞吐量值(以 MiB/s 为单位);例如,如果您需要的吞吐量为 250 MiB/s,请在创建 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,并将 Hyperdisk Balanced 卷的目标存储容量指定为 2048 GiB:

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 的 Deployment

最佳实践

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

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

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

Autopilot

在 Autopilot 集群中,指定 cloud.google.com/compute-class: Performance nodeSelector 以预配 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 集群中,请确保具有指定机器系列的节点池已启动并运行,然后再创建 Deployment。否则 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 Deployment 的 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 的现有 Deployment,使其使用您刚刚创建的新恢复的 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 Deployment 的一部分:

    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

后续步骤