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:
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
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
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.
Guarda el StatefulSet en un archivo:
kubectl get StatefulSet statefulset-name -o yaml > sts-backup.yaml
En cada PersistentVolumeClaim de StatefulSet, abre el objeto
PersistentVolumeClaim
en un editor de texto:kubectl edit pvc PVC_NAME
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.
Guarda los cambios y cierra el editor de texto. Espera a que Kubernetes actualice el PersistentVolumeClaim con los cambios.
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
Edita el tamaño de almacenamiento del nuevo volumen en el archivo
sts-backup.yaml
guardado localmente, concretamente el valor despec.volumeClaimTemplates.spec.resources.requests.storage
.Vuelve a crear el StatefulSet en el clúster:
kubectl apply -f sts-backup.yaml
Siguientes pasos
- Consulta más información sobre los volúmenes.
- Consulta más información sobre cómo cambiar el tamaño de los volúmenes persistentes con Kubernetes.