创建永久性卷克隆


本文档介绍了如何使用 Kubernetes 卷克隆在 Google Kubernetes Engine (GKE) 集群中克隆永久性卷

概览

克隆是新的独立卷,即现有 Kubernetes 卷的副本。克隆与卷快照类似,因为它是特定时间点的卷副本。但是,卷克隆会使用来源卷中的所有数据预配克隆,而不是从来源卷创建快照对象。

要求

如需在 GKE 上使用卷克隆,必须满足以下要求:

如需验证 Compute Engine 永久性磁盘 CSI 驱动程序版本,请在 gcloud CLI 中运行以下命令:

kubectl describe daemonsets pdcsi-node --namespace=kube-system | grep "gke.gcr.io/gcp-compute-persistent-disk-csi-driver"

如果输出显示 1.4.0 之前的版本,请手动升级控制平面以获取最新版本。

限制

  • 两个卷必须使用相同的卷模式。默认情况下,GKE 会将 VolumeMode 设置为 ext4
  • 在 Compute Engine 上通过现有磁盘创建磁盘克隆的所有限制也适用于 GKE。
  • 您可以通过可用区级磁盘创建区域级磁盘克隆,但您应该了解此方法的限制
  • 必须在兼容的可用区中完成克隆。使用 allowedTopologies 将预配卷的拓扑限制为特定可用区。或者,nodeSelectors亲和性和反亲和性可用于限制 pod,使其受限于在兼容可用区中运行的特定节点上运行。
    • 对于从可用区到可用区的克隆,克隆可用区必须与来源磁盘可用区匹配。
    • 对于从可用区到区域的克隆,克隆的一个副本可用区必须与来源磁盘的可用区匹配。

使用卷克隆

如需预配卷克隆,请将对同一命名空间中现有 PersistentVolumeClaim 的引用添加到新 PersistentVolumeClaim 的 dataSource 字段中。以下练习展示了如何使用数据预配来源卷,创建卷克隆以及使用克隆。

创建来源卷

如需创建来源卷,请按照使用适用于 Linux 集群的 Compute Engine 永久性磁盘 CSI 驱动程序中的说明创建 StorageClass、PersistentVolumeClaim 和 Pod 以使用新卷。您将使用创建的 PersistentVolumeClaim 作为卷克隆的来源。

将测试文件添加到来源卷

将测试文件添加到来源卷。您可以在卷克隆中查找此测试文件,以验证克隆成功。

  1. 在 Pod 中创建测试文件:

    kubectl exec POD_NAME \
        -- sh -c 'echo "Hello World!" > /var/lib/www/html/hello.txt'
    

    POD_NAME 替换为使用来源卷的 Pod 的名称。例如,如果您按照使用适用于 Linux 集群的 Compute Engine 永久性磁盘 CSI 驱动程序中的说明操作,请将 POD_NAME 替换为 web-server

  2. 验证文件是否存在:

    kubectl exec POD_NAME \
        -- sh -c 'cat /var/lib/www/html/hello.txt'
    

    输出内容类似如下:

    Hello World!
    

克隆来源卷

  1. 将以下清单保存为 podpvc-clone.yaml

    kind: PersistentVolumeClaim
    apiVersion: v1
    metadata:
      name: podpvc-clone
    spec:
      dataSource:
        name: PVC_NAME
        kind: PersistentVolumeClaim
      accessModes:
      - ReadWriteOnce
      storageClassName: STORAGE_CLASS_NAME
      resources:
        requests:
          storage: STORAGE
    

    替换以下内容:

    • PVC_NAME:您在创建来源卷中创建的来源 PersistentVolumeClaim 的名称。
    • STORAGE_CLASS_NAME:要使用的 StorageClass 的名称,必须与来源 PersistentVolumeClaim 的 StorageClass 相同。
    • STORAGE:要请求的存储空间容量,必须至少为来源 PersistentVolumeClaim 的大小。
  2. 应用清单:

    kubectl apply -f podpvc-clone.yaml
    

创建使用克隆卷的 Pod

以下示例会创建一个 Pod,该 Pod 使用您创建的卷克隆。

  1. 将以下清单保存为 web-server-clone.yaml

    apiVersion: v1
    kind: Pod
    metadata:
      name: web-server-clone
    spec:
      containers:
       - name: web-server-clone
         image: nginx
         volumeMounts:
           - mountPath: /var/lib/www/html
             name: mypvc
      volumes:
       - name: mypvc
         persistentVolumeClaim:
           claimName: podpvc-clone
           readOnly: false
    
  2. 应用清单:

    kubectl apply -f web-server-clone.yaml
    
  3. 验证测试文件是否存在:

    kubectl exec web-server-clone \
        -- sh -c 'cat /var/lib/www/html/hello.txt'
    

    输出内容类似如下:

    Hello World!
    

清理

为避免因本页中使用的资源导致您的 Google Cloud 账号产生费用,请按照以下步骤操作。

  1. 删除 Pod 对象:

    kubectl delete pod POD_NAME web-server-clone
    
  2. 删除 PersistentVolumeClaim 对象:

    kubectl delete pvc podpvc podpvc-clone