Créer des clones de volumes persistants


Ce document explique comment utiliser le clonage de volume Kubernetes pour cloner des volumes persistants dans vos clusters Google Kubernetes Engine (GKE).

Aperçu

Un clone est un nouveau volume indépendant, qui est un double d'un volume Kubernetes existant. Un clone est semblable à un instantané de volume dans la mesure où il s'agit d'une copie d'un volume à un moment précis. Toutefois, au lieu de créer un objet instantané à partir du volume source, le clonage de volume provisionne le clone avec toutes les données du volume source.

Exigences

Pour utiliser le clonage de volume sur GKE, vous devez répondre aux exigences suivantes :

Pour vérifier la version du pilote CSI de disque persistant Compute Engine, exécutez la commande suivante dans gcloud CLI :

kubectl describe daemonsets pdcsi-node --namespace=kube-system | grep "gke.gcr.io/gcp-compute-persistent-disk-csi-driver"

Si le résultat affiche une version antérieure à 1.4.0, mettez à niveau manuellement votre plan de contrôle pour obtenir la dernière version.

Limites

  • Les deux volumes doivent utiliser le même mode de volume. Par défaut, GKE définit le paramètre VolumeMode sur ext4.
  • Toutes les restrictions relatives à la création de clones de disque à partir d'un disque existant sur Compute Engine s'appliquent également à GKE.
  • Vous pouvez créer un clone de disque régional à partir d'un disque zonal, mais vous devez tenir compte des restrictions de cette approche.
  • Le clonage doit être effectué dans une zone compatible. Limitez la topologie des volumes provisionnés à des zones spécifiques à l'aide de allowedTopology. Une autre possibilité est d'utiliser nodeSelectors ou Affinité et anti-affinité pour forcer un pod à s'exécuter sur un nœud spécifique exécuté dans une zone compatible.
    • Pour le clonage zonal vers zonal, la zone de clonage doit correspondre à la zone du disque source.
    • Pour le clonage zonal, l'une des zones dupliquées du clone doit correspondre à la zone du disque source.

Utiliser le clonage de volume

Pour provisionner un clone de volume, vous devez ajouter une référence à un objet PersistentVolumeClaim existant situé dans le même espace de noms dans le champ dataSource d'un nouvel objet PersistentVolumeClaim. L'exercice suivant montre comment provisionner un volume source avec des données, créer un clone de volume et l'utiliser.

Créer un volume source

Pour créer un volume source, suivez les instructions de l'article Utiliser le pilote CSI de disque persistant Compute Engine pour les clusters Linux pour créer des ressources StorageClass et PersistentVolumeClaim ainsi qu'un pod afin de consommer le nouveau volume. Vous allez utiliser l'objet PersistentVolumeClaim que vous créez en tant que source pour le clone de volume.

Ajouter un fichier de test au volume source

Ajoutez un fichier de test au volume source. Vous pouvez rechercher ce fichier de test dans le clone du volume pour vérifier que le clonage a bien été effectué.

  1. Créez un fichier de test dans un pod :

    kubectl exec POD_NAME \
        -- sh -c 'echo "Hello World!" > /var/lib/www/html/hello.txt'
    

    Remplacez POD_NAME par le nom d'un pod qui consomme le volume source. Par exemple, si vous avez suivi les instructions de la section Utiliser le pilote CSI de disque persistant Compute Engine pour les clusters Linux, remplacez POD_NAME par web-server.

  2. Vérifiez la présence du fichier.

    kubectl exec POD_NAME \
        -- sh -c 'cat /var/lib/www/html/hello.txt'
    

    Le résultat ressemble à ce qui suit :

    Hello World!
    

Cloner le volume source

  1. Enregistrez le manifeste suivant sous le nom 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
    

    Remplacez les éléments suivants :

    • PVC_NAME : nom de l'objet PersistentVolumeClaim source que vous avez créé dans la section Créer un volume source.
    • STORAGE_CLASS_NAME : nom de l'objet StorageClass à utiliser, qui doit être identique à celui de l'objet PersistentVolumeClaim source.
    • STORAGE : capacité de stockage à demander, qui doit être au moins égale à la taille de l'objet PersistentVolumeClaim source.
  2. Appliquer le fichier manifeste :

    kubectl apply -f podpvc-clone.yaml
    

Créer un pod qui consomme le volume cloné

L'exemple suivant crée un pod qui consomme le clone de volume que vous avez créé.

  1. Enregistrez le manifeste suivant sous le nom 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. Appliquer le fichier manifeste :

    kubectl apply -f web-server-clone.yaml
    
  3. Vérifiez que le fichier de test existe :

    kubectl exec web-server-clone \
        -- sh -c 'cat /var/lib/www/html/hello.txt'
    

    Le résultat ressemble à ce qui suit :

    Hello World!
    

Effectuer un nettoyage

Pour éviter que les ressources utilisées sur cette page soient facturées sur votre compte Google Cloud, suivez les étapes ci-dessous :

  1. Supprimer les objets Pod :

    kubectl delete pod POD_NAME web-server-clone
    
  2. Supprimer les objets PersistentVolumeClaim :

    kubectl delete pvc podpvc podpvc-clone