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 GKE sur VMware.

Présentation

GKE sur VMware 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 propose deux façons de migrer les ressources PersistentVolume et PersistentVolumeClaim d'un StatefulSet vers CSI. La première sous-commande migration-with-downtime implique un temps d'arrêt de l'application et une migration vers CSI. La deuxième sous-commande rolling-migration effectue une migration progressive 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 GKE sur VMware 1.14 et versions ultérieures.

  • 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 interne vCP vSphere dans l'arborescence (kubernetes.io/vsphere-volume) vers l'approvisionneur vSphere CSI (csi.vsphere.vmware.com). Nous proposons deux méthodes:

  1. La première méthode consiste à réduire la charge de travail avec état et à recréer les PersistentVolumes et PersistentVolumeClaims avec les valeurs des champs CSI.

  2. La deuxième méthode consiste à effectuer une migration progressive au cours de laquelle une instance répliquée unique de l'objet StatefulSet et de ses volumes est recréée avec les valeurs des champs CSI.

Migrer un StatefulSet vers CSI avec un temps d'arrêt

./statefulset-csi-migration-tool migration-with-downtime 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 de l'objet StatefulSet et de ses dépendances, telles que les instances répliquées de pod, les spécifications PersistentVolumeClaim et les spécifications de PersistentVolume dans le répertoire de travail local.

  2. Il définit le champ ReclaimPolicy du PersistentVolume sur "Conserver" afin d'empêcher la suppression du disque sous-jacent.

  3. Supprime la ressource StatefulSet. Les pods StatefulSet sont alors supprimés et entraînent des temps d'arrêt.

  4. Supprime les ressources PersistentVolume et PersistentVolumeClaim.

  5. Pour chaque paire PersistentVolume et PersistentVolumeClaim, convertit le VMDK existant en FCD. Elle crée le PV et la PVC avec le même nom de ressource qu'auparavant, mais avec les champs CSI et StorageClass CSI.

  6. Il crée à nouveau le StatefulSet, mais le modèle PVCTemplate dans sa spécification pointe vers la StorageClass CSI.

Migration progressive d'un StatefulSet vers CSI sans temps d'arrêt

./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.