IBM Cloud Docs
Snapshots mit dem Cluster-Add-on Block Storage for VPC einrichten

Snapshots mit dem Cluster-Add-on Block Storage for VPC einrichten

Virtual Private Cloud

Block Storage for VPC volume Snapshots bieten Ihnen eine standardisierte Möglichkeit, den Inhalt eines Volumes zu einem bestimmten Zeitpunkt zu kopieren, ohne ein komplett neues Volume zu erstellen. Weitere Informationen zu Snapshots finden Sie unter Wie Snapshots funktionieren. Weitere Informationen zu Block Storage for VPC finden Sie unter Informationen zu Block Storage for VPC.

Die Unterstützung für Momentaufnahmen ist für Clusterversion 1.25 und höher und mit dem Cluster-Add-on Block Storage for VPC Version 5.0 und höher verfügbar.

App erstellen

Erstellen Sie einen Beispiel-PVC (Persistent Volume Claim) und stellen Sie einen Pod bereit, der auf diesen Anspruch verweist.

  1. Melden Sie sich an Ihrem Konto an. If applicable, target the appropriate resource group. Legen Sie den Kontext für den Cluster fest.

  2. Stellen Sie sicher, dass der Add-on-Status normal und der Status Ready lautet.

    ibmcloud ks 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. Überprüfen Sie, dass die Treiber-Pods bereitgestellt sind und ihr Status Running (aktiv) lautet.

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

    Beispielausgabe

    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. Erstellen Sie ein 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. Überprüfen Sie, ob der PVC erstellt wurde und sich im Status Bound befindet.

    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. Erstellen Sie eine YAML-Konfigurationsdatei für eine Bereitstellung, die die von Ihnen erstellte PVC einbindet.

    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. Überprüfen Sie, ob der Pod in Ihrem Cluster läuft.

    kubectl get pods
    
    NAME                          READY   STATUS    RESTARTS   AGE
    my-deployment-58dd7c89b6-8zdcl   1/1     Running   0          4m50s    
    
  8. Nachdem Sie den Pod erstellt haben, melden Sie sich am Pod an und erstellen Sie eine Textdatei, die für die Momentaufnahme verwendet werden kann.

    kubectl exec -it POD_NAME /bin/bash
    

    Beispielausgabe

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

Datenträgermomentaufnahme erstellen

Nachdem Sie eine Bereitstellung und einen PVC erstellt haben, können Sie die Ressourcen für Datenträgermomentaufnahmen erstellen.

Sie können Snapshots nur erstellen, wenn ein Datenträger einem Pod zugeordnet ist.

  1. Erstellen Sie eine Ressource für Datenträgermomentaufnahmen in Ihrem Cluster unter Verwendung der Momentaufnahmenklasse ibmc-vpcblock-snapshot, die implementiert wird, wenn Sie das Add-on aktiviert haben. Speichern Sie die folgende VolumeSnapshot Konfiguration in einer Datei namens 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. Stellen Sie sicher, dass die Momentaufnahme verwendet werden kann.

    kubectl get volumesnapshots
    

    Beispielausgabe, wobei READYTOUSE true ist.

    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
    

Wiederherstellung aus einer Datenträgermomentaufnahme

Nach der Implementierung der Momentaufnahmenressourcen können Sie Daten mithilfe der Momentaufnahme auf einem neuen Datenträger wiederherstellen. Durch das dynamische Erstellen eines PVC wird ein neuer Datenträger mit Momentaufnahmedaten bereitgestellt.

  1. Erstellen Sie einen zweiten PVC, der auf Ihre Datenträgermomentaufnahme verweist.

    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. Überprüfen Sie, ob der PVC erstellt wurde und sich im Status Bound befindet.

    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. Erstellen Sie eine zweite YAML-Konfigurationsdatei für ein Deployment, das die von Ihnen erstellte PVC einbindet.

    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. Stellen Sie sicher, dass der Pod erstellt wurde.

    kubectl get pods
    
    NAME                          READY   STATUS    RESTARTS   AGE
    POD_NAME                      1/1     Running   0          30m
    POD2_NAME                     1/1     Running   0          46h
    
  5. Melden Sie sich bei dem neu erstellten Pod an und prüfen Sie, ob die zuvor erstellte Beispieltextdatei im neuen Pod gespeichert wurde.

    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
    

    Beispielausgabe

    hi
    

Momentaufnahmen inaktivieren

Die Snapshotfunktionalität ist standardmäßig aktiviert, wenn die Block Storage for VPCverwendet wird. Diese Funktionalität kann in der Konfigurationszuordnung addon-vpc-block-csi-driver-configmap im Namensbereich kube-system inaktiviert werden, indem die IsSnapshotEnabled in false geändert wird. Beachten Sie, dass bei dieser Änderung in der Konfigurationszuordnung alle erstellten Momentaufnahmen mit der folgenden Nachricht fehlschlagen:CreateSnapshot functionality is disabled.

  1. Speichern Sie die aktuelle Konfigurationszuordnung Ihres Clusters auf Ihrer lokalen Maschine.

    kubectl get cm -n kube-system addon-vpc-block-csi-driver-configmap -o yaml >> snapshotconfigmap.yaml
    
  2. Bearbeiten Sie den Parameter IsSnapshotEnabled in false.

  3. Speichern Sie die Datei und übernehmen Sie Ihre Änderungen.

    kubectl apply -f snapshotconfigmap.yaml
    

Nächste Schritte

Implementieren Sie den Webhook für Momentaufnahmevalidierung, um die Benutzereingabe zu validieren. Weitere Informationen finden Sie unter Webhook für Momentaufnahmevalidierung bereitstellen.

Fehlerbehebung für Momentaufnahmen

Lesen Sie die folgenden Themen zur Fehlerbehebung.