Skip to content

Latest commit

 

History

History
94 lines (60 loc) · 4.07 KB

pv.md

File metadata and controls

94 lines (60 loc) · 4.07 KB

Almacenamiento disponible en Kubernetes: PersistentVolumen

Ya hemos visto que podemos añadir almacenamiento a un pod, sin embargo habría que distinguir dos conceptos:

  • El desarrollador de aplicaciones no debería conocer con profundidad las características de almacenamiento que le ofrece el cluster. Desde este punto de vista, al desarrollador le puede dar igual que tipo de volumen puede utilizar (aunque en algún caso puede ser interesante indicarlo), lo que le interesa es, por ejemplo, el tamaño y las operaciones (lectura, lectura y escritura) del almacenamiento que necesita, y obtener del cluster un almacenamiento que se ajuste a esas características. La solicitud de almacenamiento se realiza con un elemento del cluster llamado PersistentVolumenCliams.
  • El administrador será el responsable de dar de alta en el cluster los distintos tipos de almacenamientos que hay disponibles, y que se representa con un recurso llamado PersistentVolumen.

Definiendo un PersistentVolumen

Un PersistentVolumen es un objeto que representa los volúmenes disponibles en el cluster. En él se van a definir los detalles del backend de almacenamiento que vamos a utilizar, el tamaño disponible, los modos de acceso, las políticas de reciclaje, etc.

Tenemos tres modos de acceso, que depende del backend que vamos a utilizar:

  • ReadWriteOnce: read-write solo para un nodo (RWO)
  • ReadOnlyMany: read-only para muchos nodos (ROX)
  • ReadWriteMany: read-write para muchos nodos (RWX)

Las políticas de reciclaje de volúmenes también depende del backend y son:

  • Retain: Reclamación manual
  • Recycle: Reutilizar contenido
  • Delete: Borrar contenido

Creando un PersistentVolumen con NFS

Vamos a instalar en el master del cluster (lo podríamos tener en cualquier otro servidor) un servidor NFS para compartir directorios en los nodos del cluster.

Configuración en el master

En el master como root, ejecutamos:

apt install nfs-kernel-server
mkdir -p /var/shared

Y en el fichero /etc/export declaramos el directorio que vamos a exportar:

/var/shared 10.0.0.0/24(rw,sync,no_root_squash,no_all_squash)

Nota: La red 10.0.0.0/24 es la red interna donde se encuentra el master y los nodos del cluster.

Por último reiniciamos el servicio:

systemctl restart nfs-kernel-server.service

Y comprobamos los directorios exportados:

showmount -e 127.0.0.1
Export list for 127.0.0.1:
/var/shared 10.0.0.0/24

Configuración en los nodos

En cada uno de los nodos del cluster vamos a montar el directorio compartido, para ello:

apt install nfs-common

Y comprobamos los directorios exportados en el master:

showmount -e 10.0.0.4
Export list for 10.0.0.4:
/var/shared 10.0.0.0/24

Y ya podemos montarlo:

mount -t nfs4 10.0.0.4:/var/shared /var/data

Creación del volumen en Kubernetes

Ya podemos crear el volumen utilizando el objeto PersistentVolumen. Lo definimos en el fichero nfs-pv.yaml:

apiVersion: v1
kind: PersistentVolume
metadata:
  name: nfs-pv
spec:
  capacity:
    storage: 5Gi
  accessModes:
    - ReadWriteMany
  persistentVolumeReclaimPolicy: Recycle
  nfs:
    path: /var/shared
    server: 10.0.0.4

Y lo creamos y vemos el recurso:

kubectl create -f nfs-pv.yaml 
persistentvolume "nfs-pv" created

kubectl get pv
NAME      CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM     STORAGECLASS   REASON    AGE
nfs-pv    5Gi        RWX            Recycle          Available                                      10s

El tipo de volumen disponible lo vamos a referenciar cin su nombre (nfs-pv), tiene 5Gb de capacidad, estamos utilizando NFS, el modo de acceso es RWX y su política de reciclaje es de reutilización del contenido.