Directorio de artículos
1. Teoría del almacenamiento persistente de PV y PVC
Documentos oficiales de referencia chinos:
1. ¿Qué son la fotovoltaica y el PVC?
- PersistentVolume (PV) es una pieza de almacenamiento en el clúster, que puede ser NFS, iSCSI, almacenamiento local, etc., configurado por el administrador o configurado dinámicamente mediante clases de almacenamiento . PV define atributos como la capacidad de almacenamiento, el modo de acceso y el tipo de almacenamiento persistente. El ciclo de vida de un PV es independiente del Pod. Incluso si se elimina el Pod, el PV aún existe y puede ser utilizado por otros Pods.
- PersistentVolumeClaim (PVC) es un volumen de almacenamiento persistente . Podemos definir un volumen de almacenamiento de tipo PVC al crear un pod. El PVC se puede usar para acceder a varios tipos de almacenamiento persistente, como almacenamiento local, almacenamiento en red, almacenamiento en la nube, etc. sin tener que preocuparse por la ubicación real y el tipo de estos recursos , el uso de PVC puede hacer que las aplicaciones sean más flexibles y portátiles, al mismo tiempo que mejora la utilización de los recursos de almacenamiento.
- Existe una correspondencia biunívoca entre PVC y PV. Si un PV está vinculado a un PVC, no puede ser utilizado por otros PVC.
2. Método de suministro fotovoltaico
Los dos tipos son estáticos y dinámicos:
- Aprovisionamiento estático: el administrador crea manualmente un objeto PV y lo vincula a un backend de almacenamiento específico, y luego el Pod puede solicitar vincularse al PV a través de un PVC (reclamo de volumen persistente).
- Aprovisionamiento dinámico: los administradores definen un conjunto de backends de almacenamiento a través de StorageClass, y luego los pods pueden vincularse a StorageClass a través de solicitudes de PVC, y los K8 crearán automáticamente un objeto PV y lo vincularán a un backend de almacenamiento disponible.
3. Estrategias de reciclaje para PV y PVC
Cuando creamos un pod, si usamos pvc como volumen de almacenamiento, se vinculará a pv. Cuando eliminemos el pod, se liberará el enlace entre pvc y pv. Después del lanzamiento, ¿qué se debe hacer con los datos en el volumen fotovoltaico unido a pvc?Los siguientes tipos:
Hay tres estrategias de reciclaje fotovoltaico en Kubernetes:
- Retener: retiene el PV, pero no elimina los recursos de almacenamiento subyacentes. Esto significa que los datos en el PV aún existen, pero deben limpiarse manualmente.
- Eliminar: elimine PV y recursos de almacenamiento subyacentes. Esto significa que los datos del PV se eliminarán de forma permanente.
- Reciclar: elimina los datos en el PV, pero no elimina los recursos de almacenamiento subyacentes. Esto significa que los datos del PV se borrarán, pero los recursos de almacenamiento subyacentes se pueden reutilizar. (no recomendado, puede eliminarse en 1.15)
Hay dos estrategias de reciclaje de PVC en Kubernetes:
- Retener: el PVC se retiene, pero los recursos de almacenamiento subyacentes no se eliminan. Esto significa que los datos en el PVC todavía están allí, pero deben limpiarse manualmente.
- Eliminar: elimine PVC y recursos de almacenamiento subyacentes. Esto significa que los datos en el PVC se eliminarán de forma permanente.
Cabe señalar que la política de reciclaje de un PVC debe coincidir con la política de reciclaje del PV al que está vinculado. Por ejemplo, si la política de reciclaje del PV es Retener, la política de reciclaje del PVC también debe ser Retener . De lo contrario, se pueden producir pérdidas de datos o fugas de recursos de almacenamiento.
2. Caso: Demostración de casos de almacenamiento persistente de PV y PVC
1. Construya un servidor NFS
PV utiliza NFS como almacenamiento.
Nota: Es necesario instalar todos los nodos del clúster K8Snfs-utils
yum install nfs-utils -y
mkdir /data/volumes/v{
1..3} -p
vim /etc/exports
/data/volumes/v1 *(rw,no_root_squash)
/data/volumes/v2 *(rw,no_root_squash)
/data/volumes/v3 *(rw,no_root_squash)
Cargue la configuración para que surta efecto && inicie el servicio NFS
exportfs -arv
systemctl enable nfs --now
Pruebe si NFS se puede montar normalmente en otros nodos Node:
yum install nfs-utils -y
mkdir /test
mount 16.32.15.200:/data/volumes/v1 /test
df -hT /test/
Bien, como se muestra en la figura anterior, NFS se puede montar normalmente, lo que significa que hasta ahora no hay ningún problema con la configuración de NFS.
2. Cree un PV y use NFS para compartir almacenamiento
Cree tres PV, utilizando diferentes directorios y diferentes módulos de acceso respectivamente. El YAML es el siguiente:
cat pv.yaml
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-1
labels:
app: pv-1
spec:
nfs:
path: /data/volumes/v1 # PV使用NFS路径
server: 16.32.15.200 # NFS 服务端IP地址
accessModes: ["ReadWriteOnce"] # 访问模式: ReadWriteOnce,卷可以被一个节点以读写方式挂载
capacity:
storage: 1Gi # 存储大小
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-2
labels:
app: pv-2
spec:
nfs:
path: /data/volumes/v2
server: 16.32.15.200
accessModes: ["ReadOnlyMany"] # 访问模式: ReadOnlyMany,可以被多个节点只读方式挂载
capacity:
storage: 2Gi
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-3
labels:
app: pv-3
spec:
nfs:
path: /data/volumes/v3
server: 16.32.15.200
accessModes: ["ReadWriteMany"] # 访问模式: ReadWriteMany,可以被多个节点读写方式挂载
capacity:
storage: 3Gi
...
Modo de acceso explicado:
- ReadWriteOnce: Montado por un nodo en modo lectura-escritura (explicación oficial, pero no se puede reflejar, debería ser un BUG).
- ReadOnlyMany: montado en modo de solo lectura por varios nodos.
- ReadWriteMany: montado por varios nodos en modo de lectura y escritura.
Ejecute el archivo YAML:
kubectl apply -f pv.yaml
Ver los recursos PV creados:
kubectl get pv
3. Cree un PVC y vincúlelo al PV
Cree tres PVC y vincule los tres PV anteriores con YAML de la siguiente manera:
cat pvc.yaml
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-1
labels:
app: pvc-1
spec:
accessModes: ["ReadWriteOnce"] # PVC访问模式,必须和PV访问模式一致
selector:
matchLabels:
app: pv-1 # 标签选择器,选择具有 app=pv-1 PV绑定
resources:
requests:
storage: 1Gi # 容量,必须和PV容量保持一致
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-2
labels:
app: pvc-2
spec:
accessModes: ["ReadOnlyMany"]
selector:
matchLabels:
app: pv-2
resources:
requests:
storage: 2Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-3
labels:
app: pvc-3
spec:
accessModes: ["ReadWriteMany"]
selector:
matchLabels:
app: pv-3
resources:
requests:
storage: 3Gi
...
Ejecute el archivo de manifiesto YAML:
kubectl apply -f pvc.yaml
Verifique si un PVC está asociado con un PV:
kubectl get pvc
4. Cree un pod y monte un volumen de PVC
cat pod-pvc.yaml
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: pvc-test
labels:
app: pvc-test
spec:
replicas: 3
selector:
matchLabels:
app: pvc-test
template:
metadata:
labels:
app: pvc-test
spec:
volumes:
- persistentVolumeClaim: # 使用PVC类型
claimName: pvc-2 # 指定使用PVC名字
name: web-html-path # 卷名称
containers:
- name: pvc-test
image: nginx
imagePullPolicy: IfNotPresent
volumeMounts:
- name: web-html-path # 使用卷名称,和上面卷名称对应上
mountPath: /usr/share/nginx/html # 容器内挂载目录
Ejecute el archivo YAML:
kubectl apply -f pod-pvc.yaml
Estamos usando permisos de solo lectura pvc-2
, y el directorio correspondiente es /data/volumes/v2/
agregar el archivo index.html en el directorio
echo "PVC-DEMO" > /data/volumes/v2/index.html
Visite el sitio web de Pods:
kubectl get pods -o wide
Ingresemos al contenedor y creemos un archivo para probar:
kubectl exec -it pvc-test-d65964fd4-jmkmg -- /bin/bash
Como se muestra en la figura a continuación, estoy usando un PVC de solo lectura. No debería haber permiso para crear archivos en el contenedor, pero los archivos sí se pueden crear en el contenedor. Consulté con expertos en el campo nativo de la nube. Esto debería ser un error de PVC K8S Mi versión actual de K8S es: v1.27.0
5. Los pasos correctos para eliminar PVC
-
pvc y pv están vinculados, si usa la política de reciclaje predeterminada retener, luego de eliminar pvc, pv estará en estado liberado, queremos continuar usando este pv, necesitamos eliminar manualmente pv, kubectl delete pv pv_name, delete pv , pv no se eliminará Los datos en el pvc se vincularán al mejor pv coincidente cuando recreamos el pvc Los datos seguirán siendo los datos originales y no se perderán.
-
Después de la prueba, si la estrategia de recuperación es Eliminar, elimine el PV y los datos almacenados en el backend de PV no se eliminarán.
-
Política de reciclaje Campo:
pv.spec.persistentVolumeReclaimPolicy
campo
Paso 1: Primero elimine el Pod usando PVC
Paso dos: quitar el PVC
Paso 3: Eliminar PV