Usa el controlador de CSI de Persistent Disk de Compute Engine


Google Kubernetes Engine (GKE) proporciona una forma sencilla de implementar y administrar de forma automática el controlador de interfaz de almacenamiento de contenedores (CSI) del disco persistente de Compute Engine en tus clústeres.

La versión del controlador de CSI del disco persistente de Compute Engine está vinculada a los números de la versión de GKE. La versión del controlador de CSI del disco persistente de Compute Engine suele ser el controlador más reciente disponible en el momento en que se lanza la versión de GKE. Los controladores se actualizan de forma automática cuando el clúster se actualiza al último parche de GKE.

Beneficios del uso del controlador de CSI de disco persistente de Compute Engine

El uso del controlador de CSI de Persistent Disk de Compute Engine en lugar del complemento de volumen de gcePersistentDisk de Kubernetes en configuración de árbol proporciona los siguientes beneficios:

  • Los controladores de CSI son el futuro de la extensión del almacenamiento en Kubernetes. Kubernetes anunció que se espera que los complementos de volumen de árbol se quiten de Kubernetes en la versión 1.21. Para obtener más información, consulta La migración de Kubernetes de árbol a volumen de CSI pasa a versión Beta. Una vez que se quitan los complementos de volumen de árbol, los volúmenes existentes que usan complementos de volumen de árbol se comunican mediante controladores de CSI.
  • Esto permite la implementación y la administración automáticas del controlador de disco persistente sin tener que configurarlo de forma manual ni usar el complemento de volumen de árbol.
  • Proporciona características de disco persistente adicionales en GKE. Por ejemplo:
    • Puedes usar claves de encriptación administradas por el cliente (CMEK) con el controlador de CSI del disco persistente de Compute Engine, pero no el complemento de volumen de árbol. Estas se usan para encriptar las claves de encriptación de datos que encriptan tus datos. Para obtener más información sobre CMEK en GKE, consulta Usa CMEK.
    • Puedes usar instantáneas de volumen con el controlador de CSI del disco persistente de Compute Engine. Las instantáneas de volumen te permiten crear una copia del volumen en un momento específico. Puedes usar esta copia para hacer que un volumen vuelva a su estado anterior o con el fin de aprovisionar un volumen nuevo.
  • La corrección de errores y la actualización de funciones se lanzan de forma independiente de las actualizaciones secundarias de Kubernetes. Por lo general, este programa de lanzamiento da como resultado una cadencia de actualización más rápida.

Requisitos

Para usar el controlador de CSI de disco persistente de Compute Engine, los clústeres deben tener las siguientes versiones:

  • Clústeres de Linux: GKE versión 1.14 o posterior.
  • Clústeres de Windows: GKE versión 1.18 o posterior.

Habilita el controlador de CSI de disco persistente de Compute Engine en un clúster nuevo

Para crear un clúster con una versión en la que el controlador de CSI de disco persistente de Compute Engine no esté habilitada de forma automática, puedes usar la herramienta de línea de comandos de gcloud o Google Cloud Console.

Para habilitar el controlador en la creación del clúster, completa los siguientes pasos:

gcloud

gcloud container clusters create CLUSTER-NAME \
    --addons=GcePersistentDiskCsiDriver \
    --cluster-version=VERSION

Reemplaza lo siguiente:

  • CLUSTER-NAME: El nombre de tu clúster.
  • VERSION: el número de versión de GKE. Debes seleccionar la versión 1.14 o una versión posterior para usar esta característica.

Para ver la lista completa de marcas, consulta la documentación de gcloud container clusters create.

Console

  1. Ve a la página de Google Kubernetes Engine en Cloud Console:

    Ir a Google Kubernetes Engine

  2. Haz clic en Crear.

  3. Configura el clúster como quieras.

  4. En el panel de navegación, en Clúster, haz clic en Funciones.

  5. Selecciona la casilla de verificación Habilita el controlador de CSI de Persistent Disk para Compute Engine.

  6. Haga clic en Crear.

Después de habilitar el controlador CSI del disco persistente de Compute Engine, puedes usarlo en volúmenes de Kubernetes con el nombre de controlador y aprovisionador: pd.csi.storage.gke.io.

Habilita el controlador de CSI de disco persistente de Compute Engine en un clúster existente

Para habilitar el controlador CSI de disco persistente de Compute Engine en clústeres existentes, usa la herramienta de línea de comandos de gcloud o Google Cloud Console.

Para habilitar el controlador en un clúster existente, completa los siguientes pasos:

gcloud

gcloud container clusters update CLUSTER-NAME \
   --update-addons=GcePersistentDiskCsiDriver=ENABLED

Reemplaza CLUSTER-NAME por el nombre del clúster existente.

Console

  1. En Cloud Console, ve al menú de Google Kubernetes Engine.

    Ir al menú de Google Kubernetes Engine

  2. En la lista de clústeres, haz clic en el nombre del clúster que deseas modificar.

  3. En Funciones junto al campo Controlador de CSI del disco persistente de Compute Engine, haz clic en Edita el controlador de CSI de Compute Engine.

  4. Selecciona la casilla de verificación Habilitar el controlador de CSI de Persistent Disk de Compute Engine.

  5. Haz clic en Save Changes.

Inhabilita el controlador de CSI de disco persistente de Compute Engine

Inhabilita el controlador de CSI de disco persistente de Compute Engine mediante la herramienta de línea de comandos de gcloud o Google Cloud Console.

Para inhabilitar el controlador en un clúster existente, completa los siguientes pasos:

gcloud

gcloud container clusters update CLUSTER-NAME \
    --update-addons=GcePersistentDiskCsiDriver=DISABLED

Reemplaza CLUSTER-NAME por el nombre del clúster existente.

Console

  1. En Cloud Console, ve al menú de Google Kubernetes Engine.

    Ir a Google Kubernetes Engine

  2. En la lista de clústeres, haz clic en el nombre del clúster que deseas modificar.

  3. En Funciones junto al campo Controlador de CSI del disco persistente de Compute Engine, haz clic en Edita el controlador de CSI de Compute Engine.

  4. Selecciona la casilla de verificación Habilita el controlador de CSI de disco persistente de Compute Engine.

  5. Haz clic en Save Changes.

Usa el controlador de CSI de disco persistente de Compute Engine para clústeres de Linux

En las siguientes secciones, se describe el proceso típico para usar un volumen de Kubernetes respaldado por un controlador de CSI en GKE. Estas secciones son específicas para clústeres que usan Linux.

Crea una StorageClass

Después de habilitar el controlador CSI del disco persistente de Compute Engine, GKE instala de forma automática las siguientes StorageClasses:

  • standard-rwo, con disco persistente balanceado
  • premium-rwo, con disco persistente SSD

En cambio, algunas versiones anteriores de clúster (1.17 y anteriores) pueden tener la StorageClass singlewriter-standard o standard-singlewriter, que usa un disco persistente estándar.

Para encontrar el nombre de la StorageClass instalada, ejecuta el siguiente comando:

kubectl get sc

También puedes instalar una StorageClass diferente que use el controlador de CSI del disco persistente de Compute Engine. Para ello, agrega pd.csi.storage.gke.io en el campo del aprovisionador.

Por ejemplo, puedes crear un StorageClass mediante el siguiente archivo llamado pd-example-class.yaml:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: pd-example
provisioner: pd.csi.storage.gke.io
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
parameters:
  type: pd-balanced

Cualquier tipo de disco persistente se puede especificar en el parámetro type (por ejemplo, pd-ssd, pd-standard o pd-balanced).

Después de crear el archivo pd-example-class.yaml, ejecuta el siguiente comando:

kubectl create -f pd-example-class.yaml

Crea una PersistentVolumeClaim

Puedes crear una PersistentVolumeClaim que haga referencia a la StorageClass del controlador de CSI del disco persistente de Compute Engine.

En el siguiente archivo, llamado pvc-example.yaml, se usa la clase de almacenamiento standard-rwo instalada previamente:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: podpvc
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: standard-rwo
  resources:
    requests:
      storage: 6Gi

Después de crear el manifiesto de PersistentVolumeClaim, ejecuta el siguiente comando:

kubectl create -f pvc-example.yaml

En la StorageClass instalada previamente (standard-rwo), volumeBindingMode se configura como WaitForFirstConsumer. Cuando volumeBindingMode se establece como WaitForFirstConsumer, el PersistentVolume no se aprovisiona hasta que se programa un Pod que haga referencia a la PersistentVolumeClaim. Si volumeBindingMode en la StorageClass se configura como Immediate (o se omite), se aprovisiona un PersistentVolume respaldado por un disco persistente luego de que se crea la PersistentVolumeClaim.

Crea un Pod que consuma el volumen

Cuando uses Pods con PersistentVolumes, te recomendamos usar un controlador de carga de trabajo (como Deployment o StatefulSet). Si bien no se suele usar un Pod independiente, en el siguiente ejemplo, se usa uno para mayor simplicidad.

En el siguiente ejemplo, se consume el volumen que creaste en la sección anterior:

apiVersion: v1
kind: Pod
metadata:
  name: web-server
spec:
  containers:
   - name: web-server
     image: nginx
     volumeMounts:
       - mountPath: /var/lib/www/html
         name: mypvc
  volumes:
   - name: mypvc
     persistentVolumeClaim:
       claimName: podpvc
       readOnly: false

Usa el controlador de CSI de disco persistente de Compute Engine para clústeres de Windows

En las siguientes secciones, se describe el proceso típico para usar un volumen de Kubernetes respaldado por un controlador de CSI en GKE. Estas secciones son específicas de los clústeres que usan Windows.

Asegúrate de que se cumplan estas condiciones:

  • La versión del clúster es 1.19.7-gke.2000, 1.20.2-gke.2000 o posterior.
  • Las versiones de nodo son 1.18.12-gke.1203, 1.19.6-gke.800 o posteriores.

Crea una StorageClass

Crear una StorageClass para Windows es muy similar a hacerlo en Linux. Debes tener en cuenta que la StorageClass instalada de forma predeterminada no funcionará para Windows porque el tipo de sistema de archivos es diferente. El controlador de CSI de disco persistente de Compute Engine para Windows requiere NTFS como tipo de sistema de archivos.

Por ejemplo, puedes crear una StorageClass mediante el siguiente archivo llamado pd- windows-class.yaml: Asegúrate de agregar csi.storage.k8s.io/fstype: NTFS a la lista de parámetros:

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: pd-sc-windows
provisioner: pd.csi.storage.gke.io
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
parameters:
  type: pd-balanced
  csi.storage.k8s.io/fstype: NTFS

Crea una PersistentVolumeClaim

Después de crear una StorageClass para Windows, puedes crear una PersistentVolumeClaim que haga referencia a esa StorageClass:

kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: podpvc-windows
spec:
  accessModes:
  - ReadWriteOnce
  storageClassName: pd-sc-windows
  resources:
    requests:
      storage: 6Gi

Crea un Pod que consuma el volumen

En el siguiente ejemplo, se consume el volumen que creaste en la tarea anterior:

apiVersion: v1
kind: Pod
metadata:
  name: web-server
spec:
  nodeSelector:
    kubernetes.io/os: windows
  containers:
    - name: iis-server
      image: mcr.microsoft.com/windows/servercore/iis
      ports:
      - containerPort: 80
      volumeMounts:
      - mountPath: /var/lib/www/html
        name: mypvc
  volumes:
    - name: mypvc
      persistentVolumeClaim:
        claimName: podpvc-windows
        readOnly: false

Problemas conocidos

Debido a una restricción de 128 caracteres en la especificación de ID de nodo de la CSI y la forma en que GKE genera nombres de instancias, puede que la instalación del controlador de CSI del disco persistente de Compute Engine falle en clústeres de GKE nuevos y existentes en determinados grupos de nodos. Para obtener más información, consulta este problema de GitHub.

Este problema se solucionó en las siguientes versiones:

  • 1.16.15-gke.1700 y posteriores
  • 1.17.9-6300 y posteriores
  • 1.18.6-4801 y posteriores

Si usas un clúster con una versión anterior, actualiza a una de las versiones enumeradas para resolver el problema.

¿Qué sigue?