Índice
1. Conceptos de PV y PVC
2. Ejemplo práctico con PV y PVC
2.1. Configuración del entorno NFS
2.2. Instalación de herramientas NFS en todos los nodos
2.3. Configuración del servdior NFS en el nodo principal
2.4. Creación de recursos PV
2.5. Preparación de rutas de almacenamiento NFS
2.6. Creación de PVC para asociar con PV
2.7. Implementación de Pod que utiliza PVC
2.8. Prueba de acceso al contenido
3. Recursos de almacenamiento dinámico StorageClass
3.1. Preparación del entorno NFS
3.2. Despliegue del complemento de almacenamiento dinámico NFS
3.3. Configuración del plugin para adaptarse al clúster
3.4. Estrategias de reciclaje de StorageClass
3.5. Validación de creación automática de PV
Anteriormente estudimaos varios tipos de volúmenes de almacenamiento para persistencia de datos. Recordemos:
1. Volumen emptyDir: tiene el mismo ciclo de vida que el Pod; cuando se elimina el Pod, los datos también se borran.
2. Volumen hostPath: requiere especificar el host físico, no permite compartir datos entre Pods en diferentes hosts.
3. Volumen NFS.
- Conceptos de PV y PVC
En la montura tradicional de volúmenes de almacenamiento como NFS, aunque cubre la mayoría de escenarios productivos, presenta un alto grado de acoplamiento.
Ejemplo: si necesitamos migrar nuestro clúster de "Alibaba Cloud" a servidores privados y cambiar el tipo de volumen de almacenamiento, no podemos lograrlo directamente sin usar el tipo de volumen original. Por ejemplo, si el almacenamiento en Alibaba Cloud es NFS pero nuestros servidores locales utilizan Ceph, la migración fallaría.
Aquí es donde PV (PersistentVolume) y PVC (PersistentVolumeClaim) resuelven este problema de acoplamiento.
- Práctica inicial con PV y PVC
Vamos a construir la arquitectura según el diagrama y luego analizar la lógica interna.
2.1. Configuración del entorno NFS
2.1.1. Instalación de herramientas NFS en todos los nodos
Nodo principal NFS: instalado para funcionar como almacenamiento externo.
k8s1, k8s2: instalado para utilizar comandos NFS durante la montura automática.
yum -y install nfs-utils
2.1.2. Configuración del archivo NFS
# Servidor NFS
yum -y install rpcbind nfs-utils
systemctl enable --now nfs
mkdir -p /storage/nfs_data
vim /etc/exports
/storage/nfs_data/ *(rw,no_root_squash)
exportfs -r # Aplica la configuración inmediatamente
systemctl start rpcbind
systemctl start nfs ##(centos7)
systemctl enable rpcbind
systemctl enable nfs ##(centos7)
showmount -e # Verifica directorios compartidos en el servidor
# Cliente NFS
yum -y install rpcbind
systemctl enable --now nfs
mkdir -p /storage/nfs_data/
mount -t nfs {IP_SERVIDOR}:/storage/nfs_data/ /storage/nfs_data/ -o nolock,nfsvers=3,vers=3
#### Montaje automático en arranque
vim /etc/rc.d/rc.local
mount -t nfs {IP_SERVIDOR}:/storage/nfs_data/ /storage/nfs_data/ -o nolock,nfsvers=3,vers=3
2.2. Creación de tres recursos PV
[root@k8s1 k8s-manifests]# vi volumes-persistent.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: volumen-almacen-01
labels:
cluster: kubernetes
spec:
# Define modos de acceso
accessModes:
# ReadOnlyMany: [ROX] Permite lectura múltiple por múltiples nodos
# ReadWriteOnce: [RWO] Permite lectura/escritura única por un solo nodo
# ReadWriteMany: [RWX] Permite lectura/escritura múltiple por múltiples nodos
# ReadWriteOncePod: [RWOP] Permite lectura/escritura por un solo Pod (funcionalidad nueva desde 1.22)
- ReadOnlyMany
# Define tipo de montaje NFS
nfs:
path: /storage/kubernetes/volumes/vol01
server: 192.168.11.10
# Define política de reciclaje de datos
# Retain: Al eliminar PVC, PV no se borra, estado: Released, requiere reciclaje manual
# Delete: Al eliminar PVC, PV y datos se eliminan
# Recycle: Obsoleto por la comunidad (limpieza automática al eliminar PVC)
persistentVolumeReclaimPolicy: Retain
# Define capacidad del volumen (control de espacio disponible)
capacity:
storage: 2Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: volumen-almacen-02
labels:
cluster: kubernetes
spec:
accessModes:
- ReadWriteMany
nfs:
path: /storage/kubernetes/volumes/vol02
server: 192.168.11.10
persistentVolumeReclaimPolicy: Retain
capacity:
storage: 5Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: volumen-almacen-03
labels:
cluster: kubernetes
spec:
accessModes:
- ReadWriteMany
nfs:
path: /storage/kubernetes/volumes/vol03
server: 192.168.11.10
persistentVolumeReclaimPolicy: Retain
capacity:
storage: 10Gi
[root@k8s1 k8s-manifests]# kubectl apply -f volumes-persistent.yaml
Verificar recursos PV creados:
kubectl get pv
2.3. Creación de rutas NFS correspondientes en el nodo principle
[root@nfs-main storage]# mkdir -pv /storage/kubernetes/volumes/vol0{1..3}
2.4. Creación de PVC para asociar con PV
Dos formas de conectar PVC con PV:
1. Especificar qué PV usar.
2. No especificar PV; el PVC buscará automáticamente todos los PV existentes y encontrará uno adecuado para almacenamiento automático.
[root@k8s1 k8s-manifests]# cat claim-volume.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: reclamacion-volumen-01
spec:
# Declarar requisitos
accessModes:
- ReadOnlyMany
resources:
requests:
storage: 2Gi