Almacenamiento

En esta página, se explican los conceptos de almacenamiento de GKE en VMware.

Resumen

GKE en VMware se integra en sistemas de almacenamiento de archivos o en bloque externos a través de lo siguiente:

  • El controlador de Container Storage Interface (CSI) de vSphere
  • Controladores de CSI de terceros
  • Complementos de volumen de árbol de Kubernetes

Almacenes de datos de vSphere

Cuando creas un clúster de administrador, especificas un datastore de vSphere existente para los datos etcd del clúster.

Cuando creas un clúster de usuario, puedes usar el mismo almacén de datos que el clúster de administrador o puedes especificar uno diferente. También puedes especificar almacenes de datos para grupos de nodos individuales.

Los almacenes de datos de vSphere que usan los clústeres de administrador y de usuario pueden estar respaldados por NFS, vSAN o VMFS en un dispositivo de almacenamiento en bloques, como un arreglo de almacenamiento externo. En un entorno de varios hosts, cada dispositivo de almacenamiento en bloques se debe adjuntar a todos los hosts del entorno, y el almacén de datos debe configurarse en cada host a través de la opción Mount Datastore on Additional Hosts (Activar el almacén de datos en los hosts adicionales).

StorageClasses

Cuando creas una PersistentVolumeClaim, puedes especificar una StorageClass que proporciona información sobre cómo se aprovisionará el almacenamiento. Si no especificas una StorageClass, se usa la StorageClass predeterminada.

StorageClass del clúster de administrador

En los clústeres de administrador, existe una StorageClass llamada standard, que se designa como la StorageClass predeterminada. La StorageClass standard enumera el complemento de volumen en árbol de vSphere como aprovisionador.

Para ver la StorageClass standard, haz lo siguiente:

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get storageclass \
    standard --output yaml

En el resultado, puedes ver que standard es la StorageClass predeterminada y el aprovisionador es el complemento de volumen en árbol de vSphere, kubernetes.io/vsphere-volume. También puedes ver el nombre de un almacén de datos de vSphere.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
  ...
  labels:
    bundle.gke.io/component-name: admin-storage-class
  name: standard
...
parameters:
  datastore: vsanDatastore
provisioner: kubernetes.io/vsphere-volume
...

StorageClasses del clúster de usuario

En los clústeres de usuario, hay una StorageClass llamada standard y otra standard-rwo.

La StorageClass standard-rwo se designa como la StorageClass predeterminada y enumera el controlador de CSI de vSphere como aprovisionador.

Para ver la StorageClass standard-rwo, haz lo siguiente:

kubectl --kubeconfig USER_CLUSTER_KUBECONFIG get storageclass \
    standard-rwo --output yaml

En el resultado, puedes ver que standard-rwo es la StorageClass predeterminada y el aprovisionador es el controlador de CSI de vSphere, csi.vsphere.vmware.com. También puedes ver la URL de un almacén de datos de vSphere:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  annotations:
    storageclass.kubernetes.io/is-default-class: "true"
    ...
  labels:
    bundle.gke.io/component-name: user-vsphere-csi-driver-addon
    ...
  name: standard-rwo
...
parameters:
  datastoreURL: ds:///vmfs/volumes/vsan:52fb6ca22be2454e-e67f620175964a9f/
provisioner: csi.vsphere.vmware.com
...

Complementos de volumen de árbol de Kubernetes

Kubernetes se entrega con una serie de complementos de volumen en árbol. Sin embargo, la mayoría de estos complementos de volumen en árbol están obsoletos (incluido el complemento de volumen de árbol de vSphere). Para obtener más información, consulta el proyecto de migración de CSI.

Migración de CSI para el controlador de almacenamiento de vSphere

En el pasado, el complemento de volumen de vSphere en árbol era el aprovisionador para la StorageClass predeterminada en los clústeres de usuario. Sin embargo, ahora el complemento de volumen de vSphere en árbol está obsoleto, y el controlador de CSI de vSphere es el aprovisionador para la StorageClass predeterminada en los clústeres de usuario. Recomendamos que uses el controlador de CSI de vSphere en lugar del complemento de volumen de árbol.

A partir de la versión 1.15 de GKE on VMware, la función de migración de CSI de Kubernetes está habilitada de forma predeterminada para el complemento de volumen de vSphere en árbol. Esto significa que, si una carga de trabajo usa un volumen de vSphere en un árbol, todas las llamadas a operaciones de almacenamiento internas se redireccionan de forma automática al controlador de CSI de vSphere.

Por ejemplo, supongamos que una PersistentVolumeClaim especifica la StorageClass standard, que enumera el complemento de volumen en árbol de vSphere, kubernetes.io/vsphere-volume, como aprovisionador. Luego, las llamadas a las operaciones de almacenamiento se redireccionarán al controlador de CSI de vSphere, csi.vsphere.vmware.com, en cualquier carga de trabajo que use esa PersistentVolumeClaim.

Verificaciones previas

Cuando creas un clúster nuevo o actualizas uno, hay verificaciones previas que garantizan que el entorno sea adecuado para la migración de CSI.

Por ejemplo, las comprobaciones preliminares tienen las siguientes características:

  • Verifica que las versiones de vCenter y ESXI sean adecuadas.
  • Verifica que el controlador de CSI de vSphere esté habilitado si hay PersistentVolumes de vSphere en un árbol.
  • Verifica que las StorageClasses de vSphere no tengan ciertos parámetros que se ignoren después de la migración de CSI.
  • Verifica las anotaciones en los PersistentVolumes de árbol creados de forma estática y las PersistentVolumeClaims necesarias para la migración de CSI.
  • Verifica que el clúster pueda ejecutar correctamente una carga de trabajo mediante un volumen de CSI aprovisionado por el controlador de CSI de vSphere.

Para obtener más información, consulta Ejecuta verificaciones previas.

Problemas conocidos

Hay varios problemas conocidos relacionados con el controlador de CSI de vSphere. Para obtener información y soluciones alternativas, consulta la sección Problemas conocidos en las notas de la versión del controlador de CSI de VMware vSphere 3.0.

Completar la migración a CSI

Con la función de migración de CSI de Kubernetes habilitada de forma predeterminada en 1.15, el PersistentVolume respaldado por el complemento de volumen de vSphere en árbol continúa funcionando en un entorno solo CSI; solo redirecciona las llamadas de operación del complemento en árbol al complemento de CSI. Como la especificación de PersistentVolume es inmutable, la especificación será la misma que para el complemento de volumen de árbol.

Debido a esto, el conjunto completo de atributos de CSI, como la expansión del volumen y las funciones de instantáneas de volumen, no están disponibles para esos volúmenes. Para aprovechar estas funciones, la carga de trabajo con estado debe migrarse por completo a CSI mediante la recreación de la especificación de recursos de Kubernetes con los campos de CSI. Desarrollamos una herramienta automatizada para ayudar a migrar cargas de trabajo con estado a CSI sin tiempo de inactividad de la aplicación que te permitirá usar el conjunto de atributos de CSI completo.

Uso de controladores de terceros

Si deseas aprovisionar volúmenes de almacenamiento distintos de los almacenes de datos de vSphere, puedes crear una StorageClass nueva en un clúster que use un controlador de almacenamiento diferente. Luego, puedes configurar la StorageClass como la configuración predeterminada del clúster o configurar tus cargas de trabajo para que usen la StorageClass (ejemplo de StatefulSet).

Socios de almacenamiento

Nos asociamos con muchos proveedores de almacenamiento para calificar sus sistemas de almacenamiento con GKE en VMware. Consulta la lista completa de socios de almacenamiento calificados.

Expansión de volumen

Puedes expandir el tamaño de un volumen persistente después de aprovisionarlo si editas la solicitud de capacidad en la PersistentVolumeClaim. Puedes realizar una expansión en línea mientras un volumen está en uso mediante un pod, o una expansión sin conexión en la que el volumen no está en uso.

Para el controlador CSI de vSphere, la expansión sin conexión está disponible en versiones de vSphere >= 7.0 y la expansión en línea está disponible en las versiones de vSphere >= 7.0 (actualización 2).

La StorageClass standard-rwo configura allowVolumeExpansion como verdadero de forma predeterminada para los clústeres creados recientemente que se ejecutan en vSphere 7.0 >=. Puedes usar la expansión en línea y sin conexión para los volúmenes que usan esta StorageClass. En un clúster actualizado, debido a que las StorageClasses no se modifican en las actualizaciones del clúster, cuando un clúster se actualiza de 1.7 a 1.8, no se establece la configuración allowVolumeExpansion en standard-rwo, lo que significa que no se permite la expansión de volumen.

Para obtener más información sobre la expansión de volumen, consulta Usa la expansión de volumen.

Instantáneas del volumen de CSI

Puedes crear instantáneas de almacenamiento continuo con los recursos VolumeSnapshot y VolumeSnapshotClass. Para usar esta característica en un volumen de CSI, el controlador CSI debe admitir instantáneas de volumen, y el contenedor de archivo adicional external-snapshotter debe incluirse en la implementación del controlador CSI.

Para obtener más información sobre las instantáneas de volumen, consulta Usa instantáneas de volumen.

Los controladores de instantáneas CSI se implementan de forma automática cuando creas un clúster.

Limpieza de volumen

Cuando borras un clúster de usuario, no se borran los volúmenes aprovisionados por el controlador de CSI de vSphere. Debes borrar todos los volúmenes, las PersistentVolumeClaims y los StatefulSets, que se borrarán antes de borrar el clúster.

Soluciona problemas

Consulta Soluciona problemas de almacenamiento.

Lecturas adicionales