Gestión del almacenamiento
Objetivos
En este tutorial, aprenderá a gestionar el almacenamiento persistente en su clúster Managed Kubernetes. Kubernetes utiliza el concepto de StorageClass para definir los diferentes tipos de almacenamiento disponibles.
Al finalizar esta guía, será capaz de:
- Comprender las diferentes
StorageClassesdisponibles. - Crear un
PersistentVolumeClaim(PVC) para solicitar almacenamiento. - Montar este almacenamiento en sus Pods.
Las StorageClasses disponibles
Cloud Temple ofrece varias clases de almacenamiento (StorageClasses) para satisfacer sus diferentes necesidades en términos de rendimiento y casos de uso :
-
ceph-block(par défaut)- Tipo de acceso : Bloque (
ReadWriteOnce). - Factor de replicación : X3 (haute disponibilité).
- Caso de uso : Es la clase predeterminada, ideal para bases de datos y aplicaciones que requieren un acceso exclusivo y de alto rendimiento al disco, con una alta resiliencia.
- Tipo de acceso : Bloque (
-
ceph-filesystem- Tipo de acceso : Sistema de archivos (
ReadWriteMany). - Caso de uso : Útil cuando varios Pods (répartis sur différents nœuds) necesitan leer y escribir simultáneamente en el mismo volumen (ex: partage de fichiers, CMS, assets statiques).
- Tipo de acceso : Sistema de archivos (
-
ceph-block-norepl- Tipo de acceso : Bloque (
ReadWriteOnce). - Factor de replicación : X1 (sans réplication supplémentaire).
- Caso de uso : Destinado a datos para los cuales la replicación ya está gestionada a nivel de aplicación o que no requieren una alta resiliencia a nivel de almacenamiento (caches, données éphémères).
- Tipo de acceso : Bloque (
-
topolvm-ssd(optionnel)- Tipo de acceso : Local (
ReadWriteOnce). - Caso de uso : Almacenamiento local en el nodo que ofrece un rendimiento muy alto (faible latence). Atención, este almacenamiento está vinculado al nodo físico. Si el nodo se elimina, los datos también.
- Tipo de acceso : Local (
Paso 1: Crear un PersistentVolumeClaim (PVC)
Un PVC es una solicitud de almacenamiento. A continuación se explica cómo crear un PVC para cada tipo de almacenamiento.
Ejemplo 1 : Volumen ceph-block (Por defecto)
Si no especifica storageClassName, la clase ceph-block se utilizará por defecto.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-ceph-block
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: ceph-block
Ejemplo 2 : Volumen compartido ceph-filesystem
Para un volumen que pueda ser montado por varios Pods al mismo tiempo, utilice ceph-filesystem con el modo de acceso ReadWriteMany.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-ceph-fs
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 20Gi
storageClassName: ceph-filesystem
Ejemplo 3: Volumen ceph-block-norepl
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-ceph-block-norepl
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: ceph-block-norepl
Ejemplo 4: Volumen local con topolvm
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-topolvm
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 5Gi
storageClassName: topolvm-ssd
Aplica el manifiesto de tu elección con el siguiente comando :
kubectl apply -f mon-pvc.yaml
Puedes verificar el estado de tu PVC :
kubectl get pvc
El estado cambiará a Bound una vez asignado el volumen.
Paso 2: Utilizar el almacenamiento en un Pod
Una vez creado el PVC, puede montarlo en un Pod agregándolo en la sección volumes y volumeMounts.
A continuación se muestra un ejemplo de Pod que utiliza el PVC pvc-ceph-block creado anteriormente:
apiVersion: v1
kind: Pod
metadata:
name: app-storage-demo
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- mountPath: "/usr/share/nginx/html/data"
name: my-storage
volumes:
- name: my-storage
persistentVolumeClaim:
claimName: pvc-ceph-block
Aplique el manifiesto:
kubectl apply -f pod.yaml
Verifique que el Pod se esté ejecutando:
kubectl get pods
Limpieza
Para liberar los recursos de almacenamiento, elimine primero el Pod y luego el PVC:
kubectl delete pod app-storage-demo
kubectl delete pvc pvc-ceph-block
Atención : La eliminación del PVC provoca por defecto la eliminación del volumen subyacente y de los datos que contiene (según la
ReclaimPolicyde la StorageClass, que suele serDelete).