En este documento, se explica cómo usar la herramienta de migración de CSI de StatefulSet para migrar cargas de trabajo con estado desde un complemento de volumen de vSphere en árbol al controlador de CSI de vSphere en GKE en VMware.
Descripción general
GKE en VMware se integra en sistemas de almacenamiento de archivos o bloques externos a través del almacenamiento de VMware vSphere, complementos de volumen de árbol de Kubernetes (o “controladores”) y controladores de Container Storage Interface (CSI).
Con la función de migración de CSI de Kubernetes habilitada de forma predeterminada en 1.15, un PersistentVolume respaldado por el complemento de volumen de vSphere en árbol continúa funcionando en un entorno solo CSI. La función de migración de CSI redirecciona las llamadas de operaciones del complemento de árbol al controlador de CSI. Debido a que la especificación de PersistentVolume es inmutable, todavía cuenta con el respaldo del complemento de árbol. El conjunto de funciones disponibles es el mismo que para el complemento de volumen de árbol.
El conjunto completo de funciones de CSI, como la expansión del volumen y la instantánea de volumen, no está disponible para esos volúmenes. Para aprovechar estas funciones, las cargas de trabajo con estado deben migrarse por completo a CSI mediante la recreación de los PersistentVolumes respaldados por el controlador de CSI de 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 proporciona dos maneras de migrar un PersistentVolume y PersistentVolumeClaim de StatefulSet a CSI. El primer subcomando migration-with-downtime
implica el tiempo de inactividad de la aplicación y la migración a CSI.
El segundo subcomando rolling-migration
realiza una migración progresiva a CSI y no implica tiempo de inactividad de la aplicación. Esta herramienta toma la 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 habrá pérdida de datos.
Limitación
Las herramientas automatizadas solo son compatibles con GKE en VMware 1.14 y versiones posteriores.
Solo funciona con StatefulSets. Puedes ejecutar comprobaciones preliminares con la herramienta para ejecutar algunas verificaciones de seguridad antes de usarlas.
./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
Reemplaza lo siguiente:
ADMIN_KUBECONFIG
: Es la ruta de acceso del archivo kubeconfig del clúster de administrador.USER_CLUSTER_NAME
: Si el StatefulSet se ejecuta en el clúster de usuario, proporciona el nombre del clúster de usuario. Omite esta marca si la carga de trabajo se ejecuta en el clúster de administrador.STS_NAME
: Es el nombre del StatefulSet.STS_NAMESPACE
: Es el espacio de nombres del StatefulSet.INTREE_STORAGECLASS
: Es el nombre de la StorageClass en el árbol que respalda el PersistentVolume del StatefulSet.CSI_STORAGECLASS
: Es el nombre de la StorageClass de CSI que respalda el PersistentVolume del StatefulSet después de la migración.
Descargar
Descarga la herramienta en gs://gke-on-prem-release/statefulset-csi-migration-tool/v0.1/statefulset-csi-migration-tool
.
Ten en cuenta que esta herramienta se encuentra en versión preliminar.
Procedimiento
En esta sección, se proporcionan los pasos necesarios para migrar StatefulSet desde el aprovisionador interno de vSphere vCP (kubernetes.io/vsphere-volume
) hacia vSphere CSI (csi.vsphere.vmware.com
). Proporcionamos dos formas de hacerlo:
El primer método implica reducir la carga de trabajo con estado y volver a crear el PersistentVolume y la PersistentVolumeClaim con los valores de campo de CSI.
El segundo método implica realizar una migración progresiva en la que se vuelve a crear una réplica única del StatefulSet y sus volúmenes con valores de campo de CSI.
Migra un StatefulSet a CSI con tiempo de inactividad
./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
Reemplaza lo siguiente:
ADMIN_KUBECONFIG: Es la ruta de acceso del archivo kubeconfig del clúster de administrador.
USER_CLUSTER_NAME: Si el StatefulSet se ejecuta en el clúster de usuario, proporciona el nombre del clúster de usuario. Omite esta marca si la carga de trabajo se ejecuta en el clúster de administrador.
STS_NAME: Es el nombre del StatefulSet.
STS_NAMESPACE: Es el espacio de nombres del StatefulSet.
INTREE_STORAGECLASS: Es el nombre de la StorageClass en el árbol que respalda el PersistentVolume de StatefulSet.
CSI_STORAGECLASS: Es el nombre de la StorageClass de CSI que respalda el PersistentVolume del StatefulSet después de la migración.
WORKING_DIRECTORY: Es el directorio local para 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:
Realiza una copia de seguridad del StatefulSet y sus dependencias, como las réplicas de Pods, las especificaciones de PersistentVolumeClaim y PersistentVolume en el directorio de trabajo local.
Establece el campo ReclaimPolicy del PersistentVolume en Retain para evitar que se borre el disco subyacente.
Borra el recurso StatefulSet. Esto provoca que los Pods del StatefulSet se borren y se genere tiempo de inactividad.
Borra el recurso PersistentVolume y PersistentVolumeClaim.
Para cada par de PersistentVolume y PersistentVolumeClaim, convierte el VMDK existente en FCD. Crea el PV y el PVC con el mismo nombre de recurso que antes, pero con campos CSI y la StorageClass de CSI.
Vuelve a crear el StatefulSet, pero PVCTemplate en su especificación apunta a la StorageClass de CSI.
Migración progresiva de un StatefulSet a CSI sin tiempo de inactividad
./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
Reemplaza lo siguiente:
ADMIN_KUBECONFIG: Es la ruta de acceso del archivo kubeconfig del clúster de administrador.
USER_CLUSTER_NAME: Si el StatefulSet se ejecuta en el clúster de usuario, proporciona el nombre del clúster de usuario. Omite esta marca si la carga de trabajo se ejecuta en el clúster de administrador.
STS_NAME: Es el nombre del StatefulSet.
STS_NAMESPACE: Es el espacio de nombres del StatefulSet.
INTREE_STORAGECLASS: Es el nombre de la StorageClass en el árbol que respalda el PersistentVolume de StatefulSet.
CSI_STORAGECLASS: Es el nombre de la StorageClass de CSI que respalda el PersistentVolume del StatefulSet después de la migración.
WORKING_DIRECTORY: Es el directorio local para 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:
Realiza una copia de seguridad del StatefulSet y sus dependencias, como PersistentVolume, PersistentVolumeClaim y especificaciones de réplica de Pods en el directorio de trabajo local.
Borra el StatefulSet con política de eliminación huérfana. En este paso, solo se borra el StatefulSet, pero no se borran sus dependencias, como las réplicas de Pods, PersistentVolume y PersistentVolumeClaim.
Migra cada Pod a controladores de CSI (similar a la opción 1) y hace lo siguiente:
a. Establece el campo ReclaimPolicy de PersistentVolume como Retain.
b. Borra el Pod, el PersistentVolume y la PersistentVolumeClaim.
c. Convierte el VMDK existente en FCD.
d. Vuelve a crear el PersistentVolume, la PersistentVolumeClaim y el Pod.
Vuelve a crear el StatefulSet, pero el campo de PVCTemplate en su especificación apunta a la StorageClass de CSI. El controlador de StatefulSet debería volver a asignarse a las réplicas huérfanas.