使用 Block Storage for VPC 叢集附加程式來設定 Snapshot

虛擬私有雲

Block Storage for VPC 卷快照提供了一種標準化的方式,讓您能在特定時間點複製卷的內容,而無需創建全新的卷。 如需有關快照的詳細資訊,請參閱 快照如何運作。 如需 Block Storage for VPC 的相關資訊,請參閱關於 Block Storage for VPC

根據預設,Block Storage for VPC 群集附加元件會在部署群集的相同 VPC 資源群組中建立磁碟區和快照。 但是,從附加元件版本 5.2.46 及更新版本開始,您可以在 VolumeSnapshotClass 中指定 resourceGroup 參數,在不同的資源群組中建立快照。 如需詳細資訊,請參閱 在不同資源群組中建立快照

建立應用程式

建立持續性磁區要求 (PVC) 範例,並部署參照該要求的 Pod。

  1. 登入您的帳戶。 適用的話,請將適當的資源群組設為目標。 設定叢集的環境定義。

  2. 驗證附加程式狀態為 normal,且狀態為 Ready

    ibmcloud oc cluster addon ls --cluster CLUSTER-ID
    
    Name                   Version                     Health State   Health Status   
    vpc-block-csi-driver   5.2   normal         Addon Ready. For more info: http://ibm.biz/addon-state (H1500)   
    
  3. 驗證已部署驅動程式 Pod,且狀態為 Running

    oc get pods -n kube-system | grep vpc-block-csi
    

    輸出範例

    ibm-vpc-block-csi-controller-0                        7/7     Running   0          77s
    ibm-vpc-block-csi-node-56c85                          4/4     Running   0          77s
    ibm-vpc-block-csi-node-87j2t                          4/4     Running   0          77s
    ibm-vpc-block-csi-node-cmh2h                          4/4     Running   0          77s
    
  4. 建立 PVC。

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: csi-block-pvc
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
      storageClassName: ibmc-vpc-block-5iops-tier
    
    oc create -f pvc.yaml
    
  5. 驗證 PVC 已建立且處於 Bound 狀態。

    oc get pvc
    
    NAME                   STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                AGE
    csi-block-pvc   Bound    pvc-0798b499-0b61-4f57-a184-4caeb7b9298d   10Gi       RWO            ibmc-vpc-block-5iops-tier   4m22s
    
  6. 為裝載您所建立之 PVC 的部署建立 YAML 配置檔。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: my-deployment
      labels:
        app: my-deployment
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: my-deployment
      template:
        metadata:
          labels:
            app: my-deployment
        spec:
          containers:
          - image: nginx # Your containerized app image
            name: container-name
            volumeMounts:
            - mountPath: /myvolumepath  # Mount path for PVC
              name: my-vol # Volume mount name
          volumes:
          - name: my-vol  # Volume resource name
            persistentVolumeClaim:
              claimName: csi-block-pvc  # The name of the PVC you created earlier
    
    oc create -f pod.yaml
    
  7. 驗證 Pod 是否在群集中執行。

    oc get pods
    
    NAME                          READY   STATUS    RESTARTS   AGE
    my-deployment-58dd7c89b6-8zdcl   1/1     Running   0          4m50s    
    
  8. 既然您已建立 Pod,請登入該 Pod,並建立要用於 Snapshot 的文字檔。

    oc exec -it POD_NAME /bin/bash
    

    輸出範例

    root@my-deployment-58dd7c89b6-8zdcl:/# cd myvolumepath/
    root@my-deployment-58dd7c89b6-8zdcl:/myvolumepath# echo "hi" > new.txt
    root@my-deployment-58dd7c89b6-8zdcl:/myvolumepath# exit
    

建立磁區 Snapshot

建立部署和 PVC 之後,您可以建立磁區 Snapshot 資源。

只有當磁碟區連接到 pod 時,才能建立快照。

  1. 確保您在 IAM 中擁有 Share Snapshot Operator(共用快照操作員) 權限。

  2. 使用啟用附加程式時所部署的 ibmc-vpcblock-snapshot Snapshot 類別,在叢集裡建立磁區 Snapshot 資源。 將下列 VolumeSnapshot 設定儲存至名為 snapvol.yaml 的檔案。

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: snapshot-csi-block-pvc
    spec:
      volumeSnapshotClassName: ibmc-vpcblock-snapshot
      source:
        persistentVolumeClaimName: csi-block-pvc
    
    oc create -f snapvol.yaml
    
  3. 驗證 Snapshot 已備妥可供使用。

    oc get volumesnapshots
    

    READYTOUSEtrue 的輸出範例:

    NAME                       READYTOUSE   SOURCEPVC       SOURCESNAPSHOTCONTENT   RESTORESIZE   SNAPSHOTCLASS           SNAPSHOTCONTENT                                    CREATIONTIME   AGE
    snapshot-csi-block-pvc     true         csi-block-pvc                           1Gi           ibmc-vpcblock-snapshot   snapcontent-9c374fbf-43a6-48d6-afc5-e76e1ab7c12b   18h            18h
    

在不同的資源群組中建立快照

從 Block Storage for VPC 群集附加元件版本 5.2.46 及更新版本開始,您可以在與群集資源群組不同的資源群組中建立磁碟區快照。 此功能可在資源組織、配額管理和存取控制方面提供更大的靈活性。

  • 版本需求:此功能僅在附加元件 5.2.46 及更新版本中支援。
  • 預設行為:如果未指定 resourceGroup 參數或指定空字串,則會在群集的資源群組中建立快照。

必要條件

開始之前,請確認您在 IAM 中擁有下列權限:

  • VPC 基礎設施服務(是):編輯與作家
  • Kubernetes Service (container-kubernetes):操作員
  • 資源群組:要建立快照的每個資源群組的檢視器

建立自訂 VolumeSnapshotClass

若要在不同的資源群組中建立快照,您必須建立指定目標資源群組 ID 的自訂 VolumeSnapshotClass

  1. 取得要建立快照的資源群組 ID。

    ibmcloud resource groups
    
  2. 建立 VolumeSnapshotClass 配置檔案。 將下列 YAML 儲存到名為 vpc-snap-custom-rg.yaml 的檔案中。 將 <RESOURCE_GROUP_ID> 改為您的目標資源群組 ID。

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshotClass
    metadata:
      name: vpc-snap-custom-rg
    driver: vpc.block.csi.ibm.io
    deletionPolicy: Delete
    parameters:
      resourceGroup: <RESOURCE_GROUP_ID>
    

    resourceGroup 參數必須是資源群組 ID,而不是資源群組名稱。

  3. 在群集中建立 VolumeSnapshotClass

    oc create -f vpc-snap-custom-rg.yaml
    
  4. 確認 VolumeSnapshotClass 已建立。

    oc get volumesnapshotclass
    

使用自訂資源群組建立快照

建立自訂 VolumeSnapshotClass 之後,您可以建立引用它的快照。

  1. 建立 VolumeSnapshot 配置檔案,引用您的自訂快照類別。 將下列 YAML 儲存到名為 snapshot-custom-rg.yaml 的檔案中。

    apiVersion: snapshot.storage.k8s.io/v1
    kind: VolumeSnapshot
    metadata:
      name: snapshot-custom-rg
    spec:
      volumeSnapshotClassName: vpc-snap-custom-rg
      source:
        persistentVolumeClaimName: csi-block-pvc
    
  2. 建立快照。

    oc create -f snapshot-custom-rg.yaml
    
  3. 驗證 Snapshot 已備妥可供使用。

    oc get volumesnapshots
    
  4. 使用 IBM Cloud CLI 驗證是否已在目標資源群組中建立快照。

    ibmcloud target -g <RESOURCE_GROUP_NAME>
    ibmcloud is snapshots
    

從磁區 Snapshot 還原

部署 Snapshot 資源之後,您可以使用 Snapshot 將資料還原至新磁區。 建立 PVC 會動態佈建具有 Snapshot 資料的新磁區。

  1. 建立參照磁區 Snapshot 的第二個 PVC。

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
      name: restore-pvc
    spec:
      storageClassName: ibmc-vpc-block-5iops-tier
      dataSource:
        name: snapshot-csi-block-pvc
        kind: VolumeSnapshot
        apiGroup: snapshot.storage.k8s.io
      accessModes:
        - ReadWriteOnce
      resources:
        requests:
          storage: 10Gi
    
  2. 驗證 PVC 已建立且處於 Bound 狀態。

    oc get pvc
    
    NAME                   STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                AGE
    restore-pvc            Bound    pvc-4ede7630-5a49-4bae-b34d-dc528acfb884   10Gi       RWO            ibmc-vpc-block-5iops-tier   18h
    
  3. 為裝載您所建立 PVC 的部署建立第二個 YAML 配置檔。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: podtwo
      labels:
        app: podtwo
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: podtwo
      template:
        metadata:
          labels:
            app: podtwo
        spec:
          containers:
          - image: nginx # Your containerized app image
            name: container-name
            volumeMounts:
            - mountPath: /myvolumepath  # Mount path for pvc from container
              name: my-vol # Volume mount name
          volumes:
          - name: my-vol  # Volume resource name
            persistentVolumeClaim:
              claimName: restore-pvc   # The name of the PVC that you created earlier
    
    oc create -f podtwo.yaml
    
  4. 驗證已建立 Pod。

    oc get pods
    
    NAME                          READY   STATUS    RESTARTS   AGE
    POD_NAME                      1/1     Running   0          30m
    POD2_NAME                     1/1     Running   0          46h
    
  5. 登入新建立的 Pod,並驗證您先前建立的範例文字檔已儲存至新的 Pod。

    oc exec -it POD_NAME /bin/bash
    root@POD_NAME :/# cd myvolumepath/
    root@POD_NAME :/myvolumepath# ls
    lost+found  new.txt
    root@POD_NAME :/myvolumepath# cat new.txt
    

    輸出範例

    hi
    

關閉 Snapshot

依預設,當使用 Block Storage for VPC時,會啟用 Snapshot 功能。 透過將 IsSnapshotEnabled 變更為 false,可以在 kube-system 名稱空間中的 configmap addon-vpc-block-csi-driver-configmap 中關閉此功能。 請注意,在 configmap 中進行這項變更之後,任何建立的 Snapshot 都會失敗,並出現下列訊息:CreateSnapshot functionality is disabled

  1. 將現行 configmap 從叢集儲存至本端機器。

    oc get cm -n kube-system addon-vpc-block-csi-driver-configmap -o yaml >> snapshotconfigmap.yaml
    
  2. IsSnapshotEnabled 參數編輯為 false

  3. 儲存檔案並應用您的變更。

    oc apply -f snapshotconfigmap.yaml
    

下一步

部署 Snapshot 驗證 Webhook 以驗證使用者輸入。 如需相關資訊,請參閱 部署 Snapshot 驗證 Webhook

疑難排解 Snapshot

檢視下列疑難排解主題。