Usa la expansión de volumen


En la versión 1.24 y posteriores de Google Kubernetes Engine (GKE), puedes usar la función de expansión de volumen de Kubernetes para cambiar la capacidad de un volumen persistente después de su creación.

Para obtener más información sobre la expansión de volúmenes, consulta la documentación de Kubernetes de código abierto.

Requisitos previos

La expansión de volumen tiene los siguientes requisitos previos:

  • Si el volumen al que deseas cambiarle el tamaño lo administra un controlador de CSI:
    • Asegúrate de que la versión del clúster de GKE sea 1.16 o posterior. Si el clúster tiene grupos de nodos de Windows, asegúrate de que la versión del clúster de GKE sea 1.18 o posterior. Si usas el controlador de CSI de Filestore de GKE administrado, la versión del clúster debe ser 1.21 o posterior.
    • Consulta la documentación de tu proveedor de almacenamiento para verificar que tu controlador de CSI admita la expansión de volumen. El controlador de CSI de Persistent Disk de Compute Engine y el controlador de CSI de Filestore admiten la expansión de volumen.
  • Si el volumen al que deseas cambiarle el tamaño es administrado por un complemento de volumen de árbol:
    • Asegúrate de que la versión del clúster de GKE sea 1.11 o superior. Si bien las versiones 1.11 a 1.14 del clúster de GKE admiten la expansión de volúmenes administrados por complementos de árbol, también requieren que todos los pods que usan el volumen se cierren y se vuelvan a crear para completar la expansión del volumen.
    • Revisa la documentación de tu proveedor de almacenamiento para verificar que tu complemento de volumen de árbol admita la expansión de volumen (el complemento de árbol de Persistent Disk de Compute Engine lo hace).
  • No puedes usar la expansión de volumen cuando usas el modo de acceso ReadOnlyMany.

Usa la expansión de volumen

Para usar la expansión de volumen, realiza las siguientes tareas:

  1. Agrega allowVolumeExpansion: true a tu StorageClass, si tu StorageClass aún no tiene el campo. Por ejemplo:

    apiVersion: storage.k8s.io/v1
    kind: StorageClass
    metadata:
      name: standard
    provisioner: my.driver
    ...
    allowVolumeExpansion: true
    
  2. Edita el campo spec.resources.requests.storage de tu PersistentVolumeClaim para solicitar un cambio en la capacidad del volumen.

     kubectl edit pvc pvc-name
    

    Por ejemplo, puedes cambiar la siguiente PVC para que pase de tener un disco de 30 gibibyte (GiB) a uno de 40 GiB.

    Antes de editar, ejecuta este comando:

     # pvc-demo.yaml
     apiVersion: v1
     kind: PersistentVolumeClaim
     metadata:
       name: pvc-demo
     spec:
       accessModes:
         - ReadWriteOnce
       resources:
         requests:
           storage: 30Gi
    

    Después de editar, ejecuta este comando:

     # pvc-demo.yaml
     apiVersion: v1
     kind: PersistentVolumeClaim
     metadata:
       name: pvc-demo
     spec:
       accessModes:
         - ReadWriteOnce
       resources:
         requests:
           storage: 40Gi
    
  3. Verifica el cambio mediante la visualización de PVC. Para ver tu PVC, ejecuta el siguiente comando:

    kubectl get pvc pvc-name -o yaml
    

    Con el tiempo, deberías ver el volumen nuevo en el campo status.capacity. Por ejemplo:

    ...
    spec:
      accessModes:
      - ReadWriteOnce
      resources:
        requests:
          storage: 40Gi
      storageClassName: standard
      volumeMode: Filesystem
      volumeName: pvc-078b7484-cc8d-4077-9bcb-2c17d8d4550c
    status:
      accessModes:
      - ReadWriteOnce
      capacity:
        storage: 40Gi
    ...
    

Si la capacidad de un PersistentVolume se modifica directamente, esto podría hacer que el sistema de archivos del contenedor sea incorrecto. Para solucionar estos problemas, consulta Soluciona problemas de cambios en la expansión de volumen.

Administra las expansiones de volumen en StatefulSets

Si necesitas aumentar el tamaño de los volúmenes que usan los Pods dentro de un StatefulSet en Kubernetes, debes ajustar el campo spec.resources.requests.storage de las PersistentVolumeClaims (PVC) asociadas. con los Pods. Si intentas modificar el campo volumeClaimTemplates directamente en el objeto StatefulSet, se producirá un error.

Además, si aumentas el recuento de réplicas del StatefulSet, se seguirán creando PVC del tamaño original. A fin de cambiar de forma permanente el tamaño de los volúmenes aprovisionados para los Pods administrados por StatefulSet, debes borrar y volver a crear el objeto StatefulSet con el tamaño actualizado especificado en el campo volumeClaimTemplates. Ten en cuenta que este proceso dará como resultado la eliminación de los Pods antiguos y sus PVCs correspondientes. Según la ReclaimPolicy, también es posible que se borre el almacenamiento subyacente.

Puedes seguir los pasos que se indican a continuación para mantener los Pods originales en funcionamiento mientras ajustas el StatefulSet para aprovisionar réplicas futuras con el nuevo tamaño de volumen.

  1. Guarda el StatefulSet existente en un archivo:

    kubectl get StatefulSet statefulset-name -o yaml > sts-backup.yaml
    
  2. Quita el objeto StatefulSet del clúster y mantén los Pods en ejecución como Pods independientes:

    kubectl delete sts statefulset-name --cascade=orphan
    
  3. Edita el tamaño de almacenamiento del volumen nuevo en el archivo sts-backup.yaml guardado de forma local, específicamente el valor de spec.volumeClaimTemplates.spec.resources.requests.storage.

  4. Vuelve a crear el StatefulSet en el clúster:

    kubectl apply -f sts-backup.yaml
    

¿Qué sigue?