Persistent volume claims

Los persistent volume claims en Kubernetes son un recurso que permite a los pods solicitar almacenamiento persistente. Los persistent volume claims son una forma de solicitar almacenamiento persistente en un clúster de Kubernetes sin tener que preocuparse por los detalles de la implementación subyacente.

Comandos generales

Crear un persistent volume claim

Para crear un persistent volume claim en Kubernetes, podemos utilizar el comando kubectl create -f. Por ejemplo, para crear un persistent volume claim con una capacidad de 1Gi y un modo de acceso de ReadWriteOnce, podemos ejecutar el siguiente comando:

kubectl create -f Kubernetes/manifests/mi-pvc.yaml

Ver persistent volume claims

Para ver los persistent volume claims en un clúster de Kubernetes, podemos utilizar el comando kubectl get persistentvolumeclaims:

kubectl get persistentvolumeclaims

NOTA: usa -o wide para ver más detalles de los persistent volume claims.

Para ver los detalles de un persistent volume claim en particular, podemos utilizar el comando kubectl describe persistentvolumeclaim <nombre_del_pvc>:

kubectl describe persistentvolumeclaim mi-pvc

Eliminar un persistent volume claim

Para eliminar un persistent volume claim, podemos utilizar el comando kubectl delete persistentvolumeclaim <nombre_del_pvc>:

kubectl delete persistentvolumeclaim mi-pvc

Montar un volumen persitente en un pod

Un persistent volume claim puede ser montado como un volumen en un pod para que las aplicaciones puedan acceder al almacenamiento persistente. Para montar un persistent volume claim en un pod, podemos utilizar la siguiente definición en el manifiesto del pod:

apiVersion: v1
kind: Pod
metadata:
  name: mi-pod
spec:
    containers:
    - name: mi-contenedor
        image: nginx
        volumeMounts:
        - mountPath: "/var/www/html"
          name: mi-volumen
    volumes:
    - name: mi-volumen
        persistentVolumeClaim:
        claimName: mi-pvc

También podemos especificar un path en el volumen montado:

apiVersion: v1
kind: Pod
metadata:
  name: mi-pod
spec:
    containers:
    - name: mi-contenedor
        image: nginx
        volumeMounts:
        - mountPath: "/var/www/html"
          subPath: "mi-carpeta"
          name: mi-volumen
    volumes:
    - name: mi-volumen
        persistentVolumeClaim:
        claimName: mi-pvc
        readOnly: false