Configuration d'instantanés avec le module complémentaire de cluster Block Storage for VPC

Cloud privé virtuel

Block Storage for VPC Les instantanés de volume vous offrent un moyen standardisé de copier le contenu d'un volume à un moment donné sans créer un volume entièrement nouveau. Pour plus d'informations sur les instantanés, voir Comment fonctionnent les instantanés. Pour plus d'informations sur Block Storage for VPC, voir A propos de Block Storage for VPC.

Par défaut, le module complémentaire de cluster Block Storage for VPC crée des volumes et des instantanés dans le même groupe de ressources VPC que celui où le cluster est déployé. Toutefois, à partir de la version 5.2.46 du module complémentaire, vous pouvez créer des instantanés dans un groupe de ressources différent en spécifiant le paramètre resourceGroup dans votre VolumeSnapshotClass. Pour plus d'informations, voir Création d'instantanés dans un groupe de ressources différent.

Création d'une application

Créez un exemple de réservation de volume persistant (PVC) et déployez un pod qui fait référence à cette réservation.

  1. Connectez-vous à votre compte. Le cas échéant, ciblez le groupe de ressources approprié. Définissez le contexte de votre cluster.

  2. Vérifiez que l'état du module complémentaire est normal et que le statut est 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. Vérifiez que les pods du pilote sont déployés et à l'état Running.

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

    Exemple de sortie

    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. Créer un 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. Vérifiez que la réservation de volume persistant est créée et qu'elle est à l'état 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. Créez un fichier de configuration YAML pour un déploiement qui monte le PVC que vous avez créé.

    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. Vérifiez que le pod fonctionne dans votre cluster.

    oc get pods
    
    NAME                          READY   STATUS    RESTARTS   AGE
    my-deployment-58dd7c89b6-8zdcl   1/1     Running   0          4m50s    
    
  8. Maintenant que vous avez créé le pod, connectez-vous au pod et créez un fichier texte à utiliser pour l'instantané.

    oc exec -it POD_NAME /bin/bash
    

    Exemple de sortie

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

Création d'un instantané de volume

Après avoir créé un déploiement et une réservation de volume persistant, vous pouvez créer les ressources d'instantané de volume.

Vous ne pouvez créer des instantanés que lorsqu'un volume est attaché à un module.

  1. Assurez-vous que vous disposez des droits d' opérateur de cliché instantané de partage dans IAM.

  2. Créez une ressource d'instantané de volume dans votre cluster à l'aide de la classe d'instantané ibmc-vpcblock-snapshot déployée lorsque vous avez activé le module complémentaire. Enregistrez la configuration suivante de VolumeSnapshot dans un fichier appelé 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. Vérifiez que l'instantané est prêt à être utilisé.

    oc get volumesnapshots
    

    Exemple de sortie où READYTOUSE est true:

    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
    

Création d'instantanés dans un groupe de ressources différent

À partir de la version 5.2.46 du module complémentaire pour cluster Block Storage for VPC, vous pouvez créer des instantanés de volume dans un groupe de ressources différent de celui de votre cluster. Cette fonctionnalité offre une plus grande flexibilité dans l'organisation des ressources, la gestion des quotas et le contrôle d'accès.

  • Exigence de version: Cette fonctionnalité n'est prise en charge que dans la version du module complémentaire 5.2.46 et les versions ultérieures.
  • Comportement par défaut: Si vous ne spécifiez pas de paramètre resourceGroup ou si vous spécifiez une chaîne vide, les instantanés sont créés dans le groupe de ressources du cluster.

Prérequis

Avant de commencer, assurez-vous que vous disposez des autorisations suivantes dans IAM :

  • VPC Infrastructure Services (est): Éditeur et rédacteur
  • Kubernetes Service (container-kubernetes): Opérateur
  • Groupe de ressources: Visionneuse pour chaque groupe de ressources dans lequel vous souhaitez créer des instantanés

Création d'un fichier personnalisé VolumeSnapshotClass

Pour créer des instantanés dans un groupe de ressources différent, vous devez créer une adresse personnalisée VolumeSnapshotClass qui spécifie l'ID du groupe de ressources cible.

  1. Obtenez l'identifiant du groupe de ressources dans lequel vous souhaitez créer l'instantané.

    ibmcloud resource groups
    
  2. Créer un fichier de configuration VolumeSnapshotClass. Enregistrez le fichier YAML suivant dans un fichier appelé vpc-snap-custom-rg.yaml. Remplacez <RESOURCE_GROUP_ID> par l'identifiant de votre groupe de ressources cible.

    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>
    

    Le paramètre resourceGroup doit être l'identifiant du groupe de ressources et non son nom.

  3. Créez le site VolumeSnapshotClass dans votre cluster.

    oc create -f vpc-snap-custom-rg.yaml
    
  4. Vérifiez que le site VolumeSnapshotClass est bien créé.

    oc get volumesnapshotclass
    

Création d'un instantané avec un groupe de ressources personnalisé

Après avoir créé le site VolumeSnapshotClass personnalisé, vous pouvez créer des instantanés qui y font référence.

  1. Créez un fichier de configuration VolumeSnapshot qui fait référence à votre classe d'instantané personnalisée. Enregistrez le fichier YAML suivant dans un fichier appelé 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. Créez l'instantané.

    oc create -f snapshot-custom-rg.yaml
    
  3. Vérifiez que l'instantané est prêt à être utilisé.

    oc get volumesnapshots
    
  4. Vérifiez que l'instantané a été créé dans le groupe de ressources cible à l'aide de l'interface CLI de IBM Cloud.

    ibmcloud target -g <RESOURCE_GROUP_NAME>
    ibmcloud is snapshots
    

Restauration à partir d'une image instantanée de volume

Après avoir déployé les ressources d'instantané, vous pouvez restaurer les données sur un nouveau volume à l'aide de l'instantané. La création d'une réservation de volume persistant met à disposition de manière dynamique un nouveau volume avec des données d'image instantanée.

  1. Créez une seconde réservation de volume persistant qui fait référence à votre instantané de volume.

    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. Vérifiez que la réservation de volume persistant est créée et qu'elle est à l'état 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. Créez un deuxième fichier de configuration YAML pour un déploiement qui monte le PVC que vous avez créé.

    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. Vérifiez que le pod a bien été créé.

    oc get pods
    
    NAME                          READY   STATUS    RESTARTS   AGE
    POD_NAME                      1/1     Running   0          30m
    POD2_NAME                     1/1     Running   0          46h
    
  5. Connectez-vous au pod que vous venez de créer et vérifiez que l'exemple de fichier texte que vous avez créé précédemment est sauvegardé dans le nouveau 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
    

    Exemple de sortie

    hi
    

Désactivation des instantanés

Par défaut, la fonctionnalité d'instantané est activée lors de l'utilisation de Block Storage for VPC. Cette fonctionnalité peut être désactivée dans la mappe de configuration addon-vpc-block-csi-driver-configmap de l'espace de nom kube-system en remplaçant IsSnapshotEnabled par false. Notez qu'avec cette modification dans la mappe de configuration, tous les instantanés créés échouent avec le message suivant:CreateSnapshot functionality is disabled.

  1. Sauvegardez la mappe de configuration en cours depuis votre cluster sur votre machine locale.

    oc get cm -n kube-system addon-vpc-block-csi-driver-configmap -o yaml >> snapshotconfigmap.yaml
    
  2. Modifiez le paramètre IsSnapshotEnabled en false.

  3. Enregistrez le fichier et appliquez vos modifications.

    oc apply -f snapshotconfigmap.yaml
    

Etapes suivantes

Déployez le webhook de validation d'instantané pour valider l'entrée utilisateur. Pour plus d'informations, voir Déploiement du webhook de validation d'instantané.

Identification et résolution des problèmes

Passez en revue les rubriques de dépannage suivantes.