Usar la expansión de volumen


En Google Kubernetes Engine (GKE) 1.24 o versiones posteriores, puedes usar la función de expansión de volúmenes de Kubernetes para cambiar la capacidad de un volumen persistente después de crearlo.

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

Requisitos previos

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

  • Si el volumen cuyo tamaño quieres cambiar está gestionado por un controlador 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 la 1.18 o una posterior. Si usas el controlador de CSI de Filestore de GKE gestionado, la versión del clúster debe ser la 1.21 o una posterior.
    • Consulta la documentación de tu proveedor de almacenamiento para verificar que tu controlador CSI admite la expansión de volúmenes. El controlador de CSI para Persistent Disk en Compute Engine y el controlador de CSI para Filestore admiten la expansión de volúmenes.
  • Si el volumen cuyo tamaño quieres cambiar está gestionado por un complemento de volumen in-tree:
    • Asegúrate de que la versión del clúster de GKE sea la 1.11 o una posterior. Aunque las versiones 1.11-1.14 del clúster de GKE admiten la expansión de volúmenes gestionados por complementos integrados, requieren que se finalicen y se vuelvan a crear todos los pods que usen el volumen para completar la expansión.
    • Consulta la documentación de tu proveedor de almacenamiento para verificar que el complemento de volumen integrado admite la expansión de volumen (el complemento integrado de disco persistente de Compute Engine sí lo admite).
  • No puedes usar la expansión de volumen cuando usas el modo de acceso ReadOnlyMany.

Usar la expansión de volumen

Para usar la expansión de volumen, sigue estos pasos:

  1. Añade allowVolumeExpansion: true a tu StorageClass si aún no tiene este campo. Por ejemplo:

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

     kubectl edit pvc pvc-name
    

    Por ejemplo, puedes cambiar el siguiente PVC para que tenga un disco de 40 gibibytes (GiB) en lugar de 30 GiB.

    Antes de editar:

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

    Después de editar:

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

    kubectl get pvc pvc-name -o yaml
    

    Al final, debería ver el nuevo volumen 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, el sistema de archivos del contenedor podría ser incorrecto. Para solucionar estos problemas, consulta cómo solucionar problemas con los cambios en la expansión del volumen.

Gestionar expansiones de volumen en StatefulSets

Si necesitas aumentar el tamaño de los volúmenes que usan los pods de un StatefulSet en Kubernetes, debes ajustar el campo spec.resources.requests.storage de los PersistentVolumeClaims (PVCs) asociados a los pods. Si intentas modificar el campo volumeClaimTemplates directamente en el objeto StatefulSet, se producirá un error.

Además, si aumentas el número de réplicas de StatefulSet, se seguirán creando PVCs del tamaño original. Para cambiar permanentemente el tamaño de los volúmenes aprovisionados para los pods gestionados por el StatefulSet, debes eliminar y volver a crear el objeto StatefulSet con el tamaño actualizado que se especifica en el campo volumeClaimTemplates.

Para mantener los pods originales activos y en funcionamiento mientras ajustas el StatefulSet para aprovisionar futuras réplicas con el nuevo tamaño de volumen, puedes seguir estos pasos.

  1. Guarda el StatefulSet en un archivo:

    kubectl get StatefulSet statefulset-name -o yaml > sts-backup.yaml
    
  2. En cada PersistentVolumeClaim de StatefulSet, abre el objeto PersistentVolumeClaim en un editor de texto:

    kubectl edit pvc PVC_NAME
    
  3. Actualice el campo spec.resources.requests.storage con el nuevo tamaño del volumen, como en el siguiente ejemplo:

    apiVersion: v1
    kind: PersistentVolumeClaim
    metadata:
    # lines omitted for clarity
    spec:
      resources:
        requests:
          storage: 14Gi
    # lines omitted for clarity
    

    Para obtener más información, consulta Ampliar reclamaciones de volúmenes persistentes.

  4. Guarda los cambios y cierra el editor de texto. Espera a que Kubernetes actualice el PersistentVolumeClaim con los cambios.

  5. Elimina el objeto StatefulSet del clúster y mantén los pods en ejecución como pods independientes:

    kubectl delete sts statefulset-name --cascade=orphan
    
  6. Edita el tamaño de almacenamiento del nuevo volumen en el archivo sts-backup.yaml guardado localmente, concretamente el valor de spec.volumeClaimTemplates.spec.resources.requests.storage.

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

    kubectl apply -f sts-backup.yaml
    

Siguientes pasos