建立永久磁碟區的副本


本文說明如何使用 Kubernetes 磁碟區複製功能,複製 Google Kubernetes Engine (GKE) 叢集中的永久磁碟區

總覽

副本是新的獨立磁碟區,與現有的 Kubernetes 磁碟區重複。本機副本與磁碟區快照類似,都是特定時間點的磁碟區副本。不過,磁碟區複製作業會從來源磁碟區佈建所有資料,而非建立快照物件。

需求條件

如要在 GKE 上使用磁碟區複製功能,必須符合下列規定:

如要確認 Compute Engine Persistent Disk 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,確保 Pod 只能在相容區域中執行的特定節點上執行。
    • 如要進行區域到區域的複製作業,複製區域必須與來源磁碟區域相符。
    • 如要將區域磁碟複製到區域磁碟,複製磁碟的其中一個備用資源可用區必須與來源磁碟的可用區相符。

使用磁碟區複製功能

如要佈建磁碟區副本,請在新的 PersistentVolumeClaim 的 dataSource 欄位中,新增對相同命名空間中現有 PersistentVolumeClaim 的參照。下列練習說明如何佈建含有資料的來源磁碟區、建立磁碟區副本,以及使用該副本。

建立來源磁碟區

如要建立來源磁碟區,請按照「使用 Compute Engine 永久磁碟 CSI 驅動程式建立 Linux 叢集」一文中的說明,建立 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,並使用您建立的磁碟區副本。

  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