Utiliser l'outil de migration CSI StatefulSet

Ce document explique comment utiliser l'outil de migration CSI StatefulSet pour migrer des charges de travail avec état depuis un plug-in de volume vSphere "in-tree" vers le pilote CSI vSphere dans Google Distributed Cloud.

Présentation

Google Distributed Cloud s'intègre aux systèmes externes de stockage de blocs ou de fichiers via le stockage VMware vSphere, les plug-ins de volume "in-tree" Kubernetes (ou "pilotes") et les pilotes CSI (Container Storage Interface).

Avec la fonctionnalité de migration CSI de Kubernetes activée par défaut dans la version 1.15, un PersistentVolume reposant sur le plug-in de volume vSphere "in-tree" continue de fonctionner dans un environnement CSI uniquement. La fonctionnalité de migration CSI redirige les appels d'opérations du plug-in "in-tree" vers le pilote CSI. Comme la spécification PersistentVolume est immuable, elle repose toujours sur le plug-in "in-tree". L'ensemble des caractéristiques disponibles est le même que pour le plug-in de volume "in-tree".

L'ensemble complet des fonctionnalités CSI, telles que l'extension de volume et l'instantané de volume, n'est pas disponible pour ces volumes. Pour bénéficier de ces fonctionnalités, les charges de travail avec état doivent être entièrement migrées vers CSI en recréant les PersistentVolumes reposant sur le pilote CSI vSphere. Vous pouvez utiliser l'outil de migration CSI pour migrer des charges de travail avec état vers CSI et utiliser l'ensemble des fonctionnalités CSI.

Cet outil permet de migrer progressivement les ressources PersistentVolume et PersistentVolumeClaim d'un StatefulSet vers CSI et n'implique pas de temps d'arrêt de l'application. Cet outil sauvegarde les ressources Kubernetes dans un répertoire local et définit ReclaimPolicy sur Retain avant la migration. Il n'y aura donc aucune perte de données.

Limite

  • Les outils automatisés ne sont compatibles qu'avec les versions de Google Distributed Cloud entièrement compatibles.

  • Elle ne fonctionne qu'avec des StatefulSets. Vous pouvez exécuter des vérifications préliminaires à l'aide de l'outil afin d'exécuter quelques contrôles de sécurité avant d'utiliser les outils.

./statefulset-csi-migration-tool preflight \
      --kubeconfig ADMIN_KUBECONFIG \
      --cluster-name USER_CLUSTER_NAME \
      --sts-name STS_NAME \
      --sts-namespace STS_NAMESPACE \
      --intree-storageclass INTREE_STORAGECLASS \
      --csi-storageclass CSI_STORAGECLASS

Remplacez les éléments suivants :

  • ADMIN_KUBECONFIG: chemin d'accès au fichier kubeconfig de votre cluster d'administrateur.

  • USER_CLUSTER_NAME: si le StatefulSet est en cours d'exécution sur le cluster d'utilisateur, indiquez le nom du cluster d'utilisateur. Ignorez cet indicateur si la charge de travail est en cours d'exécution sur le cluster d'administrateur.

  • STS_NAME: nom du StatefulSet.

  • STS_NAMESPACE: espace de noms du StatefulSet.

  • INTREE_STORAGECLASS: nom de la StorageClass in-tree qui sauvegarde le PersistentVolume du StatefulSet.

  • CSI_STORAGECLASS: nom de la StorageClass CSI sauvegardée le PersistentVolume du StatefulSet après la migration.

Télécharger

Vous pouvez télécharger l'outil à l'adresse gs://gke-on-prem-release/statefulset-csi-migration-tool/v0.1/statefulset-csi-migration-tool. Notez que cet outil est disponible en version preview.

Procédure

Cette section décrit la procédure à suivre pour migrer un StatefulSet de l'approvisionneur vCP interne vSphere (kubernetes.io/vsphere-volume) vers l'approvisionneur vSphere CSI (csi.vsphere.vmware.com).

./statefulset-csi-migration-tool rolling-migration all \
      --kubeconfig ADMIN_KUBECONFIG \
      --cluster-name USER_CLUSTER_NAME \
      --sts-name STS_NAME \
      --sts-namespace STS_NAMESPACE \
      --intree-storageclass INTREE_STORAGECLASS \
      --csi-storageclass CSI_STORAGECLASS \
      --working-directory WORKING_DIRECTORY

Remplacez les éléments suivants :

  • ADMIN_KUBECONFIG: chemin d'accès au fichier kubeconfig de votre cluster d'administrateur.

  • USER_CLUSTER_NAME: si le StatefulSet est en cours d'exécution sur le cluster d'utilisateur, indiquez le nom du cluster d'utilisateur. Ignorez cet indicateur si la charge de travail est en cours d'exécution sur le cluster d'administrateur.

  • STS_NAME: nom du StatefulSet.

  • STS_NAMESPACE: espace de noms du StatefulSet.

  • INTREE_STORAGECLASS: nom de la StorageClass in-tree qui sauvegarde le PersistentVolume du StatefulSet.

  • CSI_STORAGECLASS: nom de la StorageClass CSI sauvegardée le PersistentVolume du StatefulSet après la migration.

  • WORKING_DIRECTORY: répertoire local permettant d'enregistrer la spécification de ressource Kubernetes de l'objet StatefulSet et de son pod, PersistentVolumeClaim et PersistentVolume. Le nom du répertoire doit être unique pour chaque StatefulSet. Ce répertoire doit être vide ou inexistant. Il est recommandé de ne pas créer ce répertoire afin que les outils puissent en créer un pour vous.

Cette commande effectue les tâches suivantes:

  1. effectue une sauvegarde du StatefulSet et de ses dépendances, telles que les spécifications de PersistentVolume, de PersistentVolumeClaim et d'instance répliquée de pod dans le répertoire de travail local.

  2. Supprime le StatefulSet avec une règle de suppression orpheline. Cette étape ne supprime que le StatefulSet, mais ne supprime pas ses dépendances, telles que les instances répliquées de pod, le PersistentVolume et le PersistentVolumeClaim.

  3. Migration de chaque pod vers les pilotes CSI (comme pour l'option 1) et effectue les opérations suivantes:

    a. Définit le champ ReclaimPolicy du PersistentVolume sur "Conserver".

    b. Supprime le pod, les PersistentVolumes et les PersistentVolumeClaims.

    c. Convertit le VMDK existant en FCD.

    d. Il crée à nouveau le PersistentVolume, la PersistentVolumeClaim et le pod.

  4. Il recrée le StatefulSet, mais le champ "PVCTemplate" de sa spécification pointe vers la StorageClass CSI. Le contrôleur StatefulSet doit à nouveau être mappé aux instances répliquées orphelines.