本文档介绍了如何使用 Hyperdisk 存储池来优化 GKE 中的 Google Kubernetes Engine (GKE) 存储性能和成本。
对于 GKE 集群中的有状态工作负载,请使用 GKE Hyperdisk 存储池来优化存储性能和成本。借助这些池,您可以高效地在多个 Hyperdisk 卷之间共享存储容量、吞吐量和 IOPS。Hyperdisk 支持取决于节点的机器类型。如需了解详情,请参阅 Hyperdisk 的机器系列支持。
本文档适用于部署 GKE 有状态工作负载的存储专家。如需详细了解我们在 Google Cloud 内容中提及的常见角色和示例任务,请参阅常见的 GKE 用户角色和任务。
概览
存储池会按逻辑将物理存储设备分组,以便您能够细分资源。您可以在这些存储池中预配 Google Cloud Hyperdisk,从而创建 Hyperdisk 存储池。Hyperdisk 存储池提供预先预配的容量、吞吐量和 IOPS,您的 GKE 集群磁盘可以共享这些资源。
您可以使用 Hyperdisk 存储池来更经济高效地管理存储资源。这样,您就可以利用重复数据删除和精简配置等效率技术。
在本指南中,您将使用 us-east4-c 可用区来创建 Hyperdisk Balanced 存储池和其他资源。
规划时的注意事项
在预配和使用 Hyperdisk 存储池之前,请考虑以下要求和限制。
创建和管理存储池
需要遵循以下要求和限制:
- 适用 Compute Engine Hyperdisk 存储池的所有限制。
- 适用在 Hyperdisk 存储池中创建磁盘的所有限制。
- 您创建的 Hyperdisk 存储池的类型决定了您可以在存储池中创建的磁盘类型。请参阅 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 存储池的类型。
- 在 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 Balanced 存储池支持的区域和可用区。
创建 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-create和provisioned-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 搭配使用时,请使用工作负载控制器,例如 Deployment 或 StatefulSet。
为了确保可以在支持 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 状态。
确认已预配挂接磁盘
检查名为
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检查是否已按 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
在存储池中拍摄快照和恢复已挂接的磁盘
不允许将磁盘移入或移出存储池。如需将磁盘移入或移出存储池,请通过快照重新创建磁盘。如需了解详情,请参阅更改磁盘类型。
本部分内容:
创建测试文件
如需创建和验证测试文件,请执行以下操作:
获取 Postgres Deployment 的 Pod 名称:
kubectl get pods -l app=postgres输出类似于以下内容:
NAME READY STATUS RESTARTS AGE postgres-78fc84c9ff-77vx6 1/1 Running 0 44s在 Pod 中创建测试文件
hello.txt:kubectl exec postgres-78fc84c9ff-77vx6 \ -- sh -c 'echo "Hello World!" > /usr/share/data/hello.txt'验证测试文件是否已创建:
kubectl exec postgres-78fc84c9ff-77vx6 \ -- sh -c 'cat /usr/share/data/hello.txt' Hello World!
创建卷快照并删除测试文件
如需创建和验证快照,请执行以下操作:
创建一个 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创建 VolumeSnapshot,并从绑定到
my-pvcPersistentVolumeClaim 的卷中截取快照: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验证是否已创建卷快照内容:
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确认快照已准备就绪,可供使用:
kubectl get volumesnapshot \ -o custom-columns='NAME:.metadata.name,READY:.status.readyToUse'输出类似于以下内容:
NAME READY my-snapshot true删除在 Pod
postgres-78fc84c9ff-77vx6中创建的原始测试文件hello.txt:kubectl exec postgres-78fc84c9ff-77vx6 \ -- sh -c 'rm /usr/share/data/hello.txt'
恢复卷快照
如需恢复卷快照和数据,请按以下步骤操作:
创建新的 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更新名为
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获取新创建的 Pod 的名称,该 Pod 是
postgresDeployment 的一部分:kubectl get pods -l app=postgres输出类似于以下内容:
NAME READY STATUS RESTARTS AGE postgres-59f89cfd8c-42qtj 1/1 Running 0 40s验证根据快照恢复卷后,之前已删除的
hello.txt文件现在存在于新 Pod (postgres-59f89cfd8c-42qtj) 中:kubectl exec postgres-59f89cfd8c-42qtj \ -- sh -c 'cat /usr/share/data/hello.txt' Hello World!这可以验证快照和恢复过程已成功完成,以及快照中的数据已恢复到 Pod 可访问的新 PV。
确认根据快照创建的卷位于您的存储池中:
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检查新卷是否按 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 存储池中预配的已挂接磁盘,请执行以下操作:
删除使用 PVC 的 Pod:
kubectl delete deployments postgres删除使用 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