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 volumen, 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).
Usa la expansión de volumen
Para usar la expansión de volumen, realiza las siguientes tareas:
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
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
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
, es posible que también se borre el almacenamiento subyacente.
Puedes realizar los siguientes pasos para mantener los Pods originales en funcionamiento mientras ajustas StatefulSet para aprovisionar réplicas futuras con el tamaño de volumen nuevo.
Guarda el StatefulSet existente en un archivo:
kubectl get StatefulSet statefulset-name -o yaml > sts-backup.yaml
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
Edita el tamaño de almacenamiento de volumen nuevo en el archivo
sts-backup.yaml
guardado de forma local, en particular, el valor despec.volumeClaimTemplates.spec.resources.requests.storage
.Vuelve a crear el StatefulSet en el clúster:
kubectl apply -f sts-backup.yaml
¿Qué sigue?
- Obtén más información sobre los volúmenes.
- Obtén más información sobre cómo cambiar el tamaño de volúmenes persistentes con Kubernetes.