IBM Cloud Docs
使用 Block Storage for VPC 集群附加组件设置快照

使用 Block Storage for VPC 集群附加组件设置快照

虚拟私有云

Block Storage for VPC 卷快照为你提供了一种标准化的方法,在特定时间点复制卷的内容,而无需创建一个全新的卷。 有关快照的更多信息,请参阅 快照如何工作。 有关 Block Storage for VPC 的更多信息,请参阅关于 Block Storage for VPC

快照支持可用于集群 V 4.9 和更高版本以及 Block Storage for VPC 集群附加组件 V 5.0 和更高版本。

创建应用程序

创建示例持久卷声明 (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

    kubectl 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
    
    kubectl create -f pvc.yaml
    
  5. 验证 PVC 是否已创建且处于 Bound 状态。

    kubectl 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
    
    kubectl create -f pod.yaml
    
  7. 验证 pod 是否在群集中运行。

    kubectl get pods
    
    NAME                          READY   STATUS    RESTARTS   AGE
    my-deployment-58dd7c89b6-8zdcl   1/1     Running   0          4m50s    
    
  8. 现在,您已创建 pod,请登录到 pod 并创建要用于快照的文本文件。

    kubectl 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
    

创建卷快照

创建部署和 PVC 后,可以创建卷快照资源。

仅当卷连接到 pod 时,才能创建快照。

  1. 使用启用附加组件时部署的 ibmc-vpcblock-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
    
    kubectl create -f snapvol.yaml
    
  2. 验证快照是否已准备就绪可供使用。

    kubectl get volumesnapshots
    

    示例输出,其中 READYTOUSEtrue

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

从卷快照复原

部署快照资源后,可以使用快照将数据复原到新卷。 创建 PVC 会动态供应具有快照数据的新卷。

  1. 创建另一个引用卷快照的 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 状态。

    kubectl 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
    
    kubectl create -f podtwo.yaml
    
  4. 验证 pod 是否已创建。

    kubectl get pods
    
    NAME                          READY   STATUS    RESTARTS   AGE
    POD_NAME                      1/1     Running   0          30m
    POD2_NAME                     1/1     Running   0          46h
    
  5. 登录到新创建的 pod,并验证您先前创建的样本文本文件是否已保存到新 pod。

    kubectl 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
    

关闭快照

缺省情况下,使用 Block Storage for VPC时,将启用快照功能。 通过将 IsSnapshotEnabled 更改为 false,可以在 kube-system 名称空间的 configmap addon-vpc-block-csi-driver-configmap 中关闭此功能。 请注意,通过配置映射中的此更改,创建的任何快照都将失败并显示以下消息:CreateSnapshot functionality is disabled

  1. 将当前配置映射从集群保存到本地计算机。

    kubectl get cm -n kube-system addon-vpc-block-csi-driver-configmap -o yaml >> snapshotconfigmap.yaml
    
  2. IsSnapshotEnabled 参数编辑为 false

  3. 保存文件并应用更改。

    kubectl apply -f snapshotconfigmap.yaml
    

后续步骤

部署快照验证 Webhook 以验证用户输入。 有关更多信息,请参阅 部署快照验证 Webhook

快照故障诊断

查看以下故障排除主题。