|
Este documento ha sido traducido utilizando tecnología de traducción automática. Si bien nos esforzamos por proporcionar traducciones precisas, no ofrecemos garantías sobre la integridad, precisión o confiabilidad del contenido traducido. En caso de discrepancia, la versión original en inglés prevalecerá y constituirá el texto autorizado. |
Crear volúmenes
Puedes crear recursos de almacenamiento persistente de Kubernetes de volúmenes persistentes (PVs) y reclamaciones de volúmenes persistentes (PVCs) que corresponden a volúmenes de Longhorn. Utilizarás kubectl para aprovisionar dinámicamente almacenamiento para cargas de trabajo utilizando una Longhorn StorageClass. Para obtener ayuda creando volúmenes desde la interfaz SUSE Storage, consulta esta sección.
Esta sección asume que entiendes cómo funciona el almacenamiento persistente de Kubernetes. Para obtener más información, consulta la documentación de Kubernetes.
Modos de acceso
SUSE Storage admite los siguientes modos de acceso de PersistentVolume de Kubernetes:
-
ReadWriteOnce (RWO): El volumen puede ser montado como lectura-escritura por un único nodo. Múltiples pods en el mismo nodo pueden acceder al volumen. Este es el modo de acceso predeterminado y más común.
-
ReadWriteOncePod (RWOP): El volumen puede ser montado como lectura-escritura por un único pod en el clúster. Este modo proporciona el aislamiento más fuerte, asegurando que solo un pod pueda acceder al volumen en cualquier momento. Se recomienda para cargas de trabajo con estado que requieren acceso de un solo escritor.
-
ReadWriteMany (RWX): El volumen puede ser montado como lectura-escritura por muchos nodos al mismo tiempo, permitiendo el acceso compartido entre múltiples pods. Para obtener más información, consulta volúmenes ReadWriteMany (RWX).
|
ReadOnlyMany (ROX) no es compatible. Para el acceso de solo lectura desde múltiples pods, utiliza ReadWriteMany con opciones de montaje de solo lectura en la especificación del pod. |
Creando volúmenes Longhorn con kubectl
Primero, necesitas crear una Longhorn StorageClass. La Longhorn StorageClass contiene los parámetros para aprovisionar PVs.
A continuación, se crea un PersistentVolumeClaim que hace referencia a la StorageClass. Finalmente, el PersistentVolumeClaim se monta como un volumen dentro de un Pod.
Cuando se despliega el Pod, el maestro de Kubernetes comprobará el PersistentVolumeClaim para asegurarse de que la solicitud de recursos se puede cumplir. Si hay almacenamiento disponible, el maestro de Kubernetes creará el volumen Longhorn y lo vinculará al Pod.
-
Utiliza el siguiente comando para crear una StorageClass llamada
longhorn:kubectl create -f https://raw.githubusercontent.com/longhorn/longhorn/v1.11.2/examples/storageclass.yamlSe crea el siguiente ejemplo de StorageClass:
kind: StorageClass apiVersion: storage.k8s.io/v1 metadata: name: longhorn provisioner: driver.longhorn.io allowVolumeExpansion: true parameters: numberOfReplicas: "3" staleReplicaTimeout: "2880" # 48 hours in minutes fromBackup: "" fsType: "ext4" # backupTargetName: "default" # mkfsParams: "-I 256 -b 4096 -O ^metadata_csum,^64bit" # diskSelector: "ssd,fast" # nodeSelector: "storage,fast" # recurringJobSelector: '[ # { # "name":"snap", # "isGroup":true, # }, # { # "name":"backup", # "isGroup":false, # } # ]'El parámetro
mkfsParamsse puede utilizar para especificar opciones de formato del sistema de archivos para cada StorageClass.El parámetro
backupTargetNamese puede utilizar para especificar el destino de la copia de seguridad. Se utiliza el nombre del destino de copia de seguridad predeterminado (default) si no se especificabackupTargetName.Los parámetros pueden omitirse de la especificación de la StorageClass. Cuando se utiliza la StorageClass para crear un PV y un volumen, los parámetros que no se especifican generalmente se establecerán utilizando un valor predeterminado tomado de la configuración global. Para la lista completa de configuraciones globales, consulta Parámetros de StorageClass y Configuraciones.
-
Crea un Pod que utilice volúmenes Longhorn ejecutando este comando:
kubectl create -f https://raw.githubusercontent.com/longhorn/longhorn/v1.11.2/examples/pod_with_pvc.yamlSe lanza un Pod llamado
volume-test, junto con un PersistentVolumeClaim llamadolonghorn-volv-pvc. El PersistentVolumeClaim hace referencia a la Longhorn StorageClass:apiVersion: v1 kind: PersistentVolumeClaim metadata: name: longhorn-volv-pvc spec: accessModes: - ReadWriteOnce storageClassName: longhorn resources: requests: storage: 2GiEl PersistentVolumeClaim se monta en el Pod como un volumen:
apiVersion: v1 kind: Pod metadata: name: volume-test namespace: default spec: containers: - name: volume-test image: nginx:stable-alpine imagePullPolicy: IfNotPresent volumeMounts: - name: volv mountPath: /data ports: - containerPort: 80 volumes: - name: volv persistentVolumeClaim: claimName: longhorn-volv-pvcMás ejemplos están disponibles aquí.
Vinculación de cargas de trabajo a PVs sin una StorageClass de Kubernetes
Es posible utilizar una StorageClass de Longhorn para vincular una carga de trabajo a un PV sin crear un objeto StorageClass en Kubernetes.
Dado que la StorageClass también es un campo utilizado para emparejar un PVC con un PV, que no tiene que ser creado por un Provisioner, puedes crear un PV manualmente con un nombre de StorageClass personalizado, y luego crear un PVC solicitando el mismo nombre de StorageClass.
Cuando un PVC solicita una StorageClass que no existe como recurso de Kubernetes, Kubernetes intentará vincular tu PVC a un PV con el mismo nombre de StorageClass. La StorageClass se utilizará como una etiqueta para encontrar el PV correspondiente, y solo se utilizarán los PVs existentes etiquetados con el nombre de la StorageClass.
Si el PVC nombra una StorageClass, Kubernetes hará:
-
Buscar un PV existente que tenga la etiqueta que coincida con la StorageClass
-
Buscar un recurso de StorageClass existente en Kubernetes. Si la StorageClass existe, se utilizará para crear un PV.
Creando volúmenes de Longhorn con la interfaz de usuario de Longhorn
Dado que el volumen de Longhorn ya existe al crear PV/PVC, no se necesita una StorageClass para aprovisionar dinámicamente el volumen de Longhorn. Sin embargo, el campo storageClassName debe establecerse en PVC/PV, para ser utilizado con fines de vinculación de PVC. No es necesario que los usuarios creen el objeto StorageClass relacionado.
Por defecto, la StorageClass para PV/PVC creados de Longhorn es longhorn-static. Los usuarios pueden modificarlo en Setting - General - Default Longhorn Static StorageClass Name según lo necesiten.
Los usuarios necesitan eliminar manualmente el PVC y el PV creados por SUSE Storage.
Creación de PV/PVC para volumen de Longhorn existente
Ahora los usuarios pueden crear PV/PVC a través de nuestra interfaz de usuario de Longhorn para los volúmenes de Longhorn existentes. Solo un volumen desmontado puede ser utilizado por un pod recién creado.
El fallo en la creación del volumen Longhorn
La creación de un volumen Longhorn puede fallar por diferentes razones. Los problemas se clasifican en:
-
almacenamiento insuficiente
-
disco no encontrado
-
discos no disponibles
-
etiquetas no cumplidas
-
nodo no encontrado
-
nodos no disponibles
-
ninguno de los candidatos a nodo contiene una imagen de motor lista
-
la afinidad dura no se puede satisfacer
-
la programación de réplicas falló
-
la réplica fallida no utilizada no es compatible
-
réplica ya programada
-
la operación del cliente Longhorn falló
-
tamaño de volumen incompatible
El fallo resulta en que la carga de trabajo no utiliza el PV provisionado y muestra un mensaje de advertencia
# kubectl describe pod workload-test
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedAttachVolume 14s (x8 over 82s) attachdetach-controller AttachVolume.Attach
failed for volume "pvc-e130e369-274d-472d-98d1-f6074d2725e8" : rpc error: code = Aborted
desc = volume pvc-e130e369-274d-472d-98d1-f6074d2725e8 is not ready for workloads
Para ayudar a los usuarios a entender las causas de los errores, SUSE Storage las resume en la anotación del PV, longhorn.io/volume-scheduling-error. Los fallos se combinan en esta anotación y se separan por un punto y coma, por ejemplo, longhorn.io/volume-scheduling-error: insufficient storage;disks are unavailable. La anotación se puede comprobar utilizando kubectl describe pv <pvc name>.
# kubectl describe pv pvc-e130e369-274d-472d-98d1-f6074d2725e8
Name: pvc-e130e369-274d-472d-98d1-f6074d2725e8
Labels: <none>
Annotations: longhorn.io/volume-scheduling-error: insufficient storage
pv.kubernetes.io/provisioned-by: driver.longhorn.io
...