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 d'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 Container Storage Interface (CSI).

Avec la fonctionnalité de migration CSI de Kubernetes activée par défaut dans la version 1.15, un PersistentVolume sauvegardé par 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ération du plug-in "in-tree" vers le pilote CSI. Comme la spécification PersistentVolume est immuable, elle est toujours sauvegardée par le plug-in "in-tree". L'ensemble de fonctionnalités 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 objets PersistentVolume et PersistentVolumeClaim d'un StatefulSet vers CSI et n'implique pas de temps d'arrêt de l'application. Cet outil effectue la sauvegarde des 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 entièrement compatibles de Google Distributed Cloud.

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

./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 cette option si la charge de travail est exécutée 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 qui sauvegarde le PersistentVolume du StatefulSet après la migration.

Télécharger

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

Procédure

Cette section décrit les étapes nécessaires à la migration du StatefulSet depuis l'approvisionneur interne vCP in-tree vSphere (kubernetes.io/vsphere-volume) vers l'approvisionneur CSI vSphere (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 cette option si la charge de travail est exécutée 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 qui sauvegarde le PersistentVolume du StatefulSet après la migration.

  • WORKING_DIRECTORY: répertoire local dans lequel enregistrer les spécifications de ressources 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 n'existe pas. Il est préférable 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, PersistentVolumeClaim et d'instance répliquée de pod dans le répertoire de travail local.

  2. Supprime le StatefulSet avec une stratégie de suppression orpheline. Cette étape ne fait que supprimer le StatefulSet, mais ne supprime pas ses dépendances telles que les instances répliquées de pods, les PersistentVolumes et les PersistentVolumeClaims.

  3. Il migre chaque pod vers des pilotes CSI (semblable à l'option 1) et effectue les opérations suivantes:

    a. Définit le champ "ReclaimPolicy" de l'objet PersistentVolume sur "Conserver".

    b. supprime le pod, l'objet PersistentVolume et la PersistentVolumeClaim.

    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 mapper vers les instances dupliquées orphelines.