Usar la herramienta de migración de CSI de StatefulSet

En este documento se explica cómo usar la herramienta de migración de CSI de StatefulSet para migrar cargas de trabajo con estado de un complemento de volumen de vSphere integrado al controlador de CSI de vSphere en Google Distributed Cloud.

En la siguiente lista se muestra la fase de lanzamiento de esta herramienta por versión:

Versiones compatibles de Google Distributed Cloud: 1.30 - 1.28.

Información general

Google Distributed Cloud se integra con sistemas de almacenamiento de archivos o de bloques externos a través del almacenamiento de VMware vSphere, los complementos de volumen internos de Kubernetes (o "controladores") y los controladores de la interfaz de almacenamiento de contenedores (CSI).

Con la función de migración de CSI de Kubernetes habilitada de forma predeterminada en la versión 1.15, un PersistentVolume respaldado por el complemento de volumen de vSphere integrado sigue funcionando en un entorno solo de CSI. La función de migración de CSI redirige las llamadas de operación de complementos integrados al controlador de CSI. Como el spec de PersistentVolume es inmutable, sigue respaldado por el complemento in-tree. El conjunto de funciones disponibles es el mismo que el del complemento de volumen integrado.

El conjunto completo de funciones de CSI, como la expansión de volumen y la creación de copias de volumen, no está disponible para estos volúmenes. Para aprovechar estas funciones, las cargas de trabajo con estado deben migrarse por completo a CSI recreando los PersistentVolumes respaldados por el controlador de CSI para vSphere. Puedes usar la herramienta de migración de CSI para migrar cargas de trabajo con estado a CSI y usar el conjunto completo de funciones de CSI.

Esta herramienta permite migrar de forma gradual los PersistentVolume y PersistentVolumeClaim de un StatefulSet a CSI sin que se produzca un tiempo de inactividad de la aplicación. Esta herramienta hace una copia de seguridad de los recursos de Kubernetes en un directorio local y establece ReclaimPolicy en Retain antes de la migración. Por lo tanto, no se perderán datos.

Limitación

  • Las herramientas automatizadas solo se admiten en las versiones de Google Distributed Cloud que tienen soporte completo.

  • Solo funciona con StatefulSets. Puedes ejecutar comprobaciones previas con la herramienta para hacer algunas comprobaciones de seguridad antes de usar las herramientas.

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

Haz los cambios siguientes:

  • ADMIN_KUBECONFIG: la ruta del archivo kubeconfig de tu clúster de administrador.

  • USER_CLUSTER_NAME: si StatefulSet se ejecuta en el clúster de usuario, proporcione el nombre del clúster de usuario. Omite este indicador si la carga de trabajo se ejecuta en el clúster de administrador.

  • STS_NAME: nombre del StatefulSet.

  • STS_NAMESPACE: espacio de nombres de StatefulSet.

  • INTREE_STORAGECLASS: el nombre de StorageClass del árbol que respalda el PersistentVolume de StatefulSet.

  • CSI_STORAGECLASS: el nombre de StorageClass de CSI que respalda el PersistentVolume de StatefulSet después de la migración.

Descargar

Descarga la herramienta en gs://gke-on-prem-release/statefulset-csi-migration-tool/v1.0/statefulset-csi-migration-tool. Ten en cuenta que esta herramienta está en versión preliminar.

Procedimiento

En esta sección se indican los pasos necesarios para migrar StatefulSet del aprovisionador interno vCP de vSphere en el árbol (kubernetes.io/vsphere-volume) al aprovisionador CSI de 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

Haz los cambios siguientes:

  • ADMIN_KUBECONFIG: la ruta del archivo kubeconfig de tu clúster de administrador.

  • USER_CLUSTER_NAME: si StatefulSet se ejecuta en el clúster de usuario, proporcione el nombre del clúster de usuario. Omite este indicador si la carga de trabajo se ejecuta en el clúster de administrador.

  • STS_NAME: nombre del StatefulSet.

  • STS_NAMESPACE: espacio de nombres de StatefulSet.

  • INTREE_STORAGECLASS: el nombre de StorageClass del árbol que respalda el PersistentVolume de StatefulSet.

  • CSI_STORAGECLASS: el nombre de StorageClass de CSI que respalda el PersistentVolume de StatefulSet después de la migración.

  • WORKING_DIRECTORY: el directorio local en el que se guardará la especificación de recursos de Kubernetes de StatefulSet y su pod, PersistentVolumeClaim y PersistentVolume. El nombre del directorio debe ser único para cada StatefulSet. Este directorio debe estar vacío o no existir. Lo ideal es no crear este directorio para que las herramientas puedan crear uno por ti.

Este comando realiza las siguientes tareas:

  1. Crea una copia de seguridad del StatefulSet y sus dependencias, como PersistentVolume, PersistentVolumeClaim y las especificaciones de réplica de Pod, en el directorio de trabajo local.

  2. Elimina el StatefulSet con la política de eliminación huérfana. En este paso solo se elimina el StatefulSet, pero no sus dependencias, como las réplicas de Pod, PersistentVolume y PersistentVolumeClaim.

  3. Migra cada pod a los controladores CSI (de forma similar a la opción 1) y hace lo siguiente:

    a. Define el campo ReclaimPolicy del PersistentVolume como Retain.

    b. Elimina el pod, el PersistentVolume y el PersistentVolumeClaim.

    c. Convierte el VMDK en FCD.

    d. Vuelve a crear los objetos PersistentVolume, PersistentVolumeClaim y Pod.

  4. Recrea el StatefulSet, pero el campo PVCTemplate de su especificación apunta a la clase de almacenamiento CSI. El controlador StatefulSet debería volver a asignar las réplicas huérfanas.