Si crea manualmente un PV y un PVC, puede montar un disco en la nube en un Pod como un volumen aprovisionado de forma estática. Este método proporciona almacenamiento persistente, ideal para cargas de trabajo que requieren un alto rendimiento de E/S de disco y baja latencia sin compartir datos.
Los discos son adecuados para los siguientes escenarios:
Aplicaciones que necesitan un alto rendimiento de E/S de disco sin compartir datos, como MySQL y Redis.
Escritura de registros a alta velocidad.
Persistencia de datos independiente del ciclo de vida del Pod.
Flujo de trabajo
|
Requisitos previos
-
Requisitos de los componentes CSI: deben estar instalados los componentes csi-plugin y csi-provisioner.
Los componentes CSI se instalan de forma predeterminada. Consulte la página para asegurarse de que sigan instalados. Se recomienda actualizar CSI components a la versión más reciente.
-
El disco en la nube debe estar en estado Available y cumplir con los siguientes requisitos:
Restricciones de zona de disponibilidad: excepto los discos en la nube ESSD con redundancia de zona, los demás tipos solo se pueden adjuntar a Pods en la misma zona de disponibilidad.
Restricciones por familia de tipo de instancia: algunos tipos de disco en la nube solo se pueden adjuntar a instance type families específicos.
-
Restricciones de nodos virtuales: para usar un disco en la nube en un nodo virtual, su clúster y kube-scheduler deben cumplir con los siguientes requisitos de versión.
-
Restricciones de nodos Lingjun: para usar discos en la nube en nodos Lingjun, se deben cumplir los siguientes requisitos.
Paso 1: Cree un PV
Cree un PV para declarar un disco en la nube existente como un recurso de almacenamiento disponible en el clúster.
kubectl
-
Cree un archivo llamado disk-pv.yaml con el siguiente contenido.
Obtenga el ID del disco, su tamaño, el ID de zona y la categoría. Después, reemplace las variables del archivo YAML con los valores reales.
apiVersion: v1 kind: PersistentVolume metadata: # The ID of your existing cloud disk, such as d-uf628m33r5rsbi****** name: "<YOUR-DISK-ID>" annotations: # Recommended. Ensures the Pod is scheduled to a node that supports this disk type. # <YOUR-DISK-CATEGORY> is the category of your existing cloud disk. Supported values include cloud_essd_entry, cloud_auto, cloud_essd, cloud_ssd, cloud_efficiency, and cloud_regional_disk_auto. csi.alibabacloud.com/volume-topology: '{"nodeSelectorTerms":[{"matchExpressions":[{"key":"node.csi.alibabacloud.com/disktype.<YOUR-DISK-CATEGORY>","operator":"In","values":["available"]}]}]}' spec: capacity: # The size of your existing cloud disk, such as 20Gi. storage: "<YOUR-DISK-SIZE>" claimRef: apiVersion: v1 kind: PersistentVolumeClaim namespace: default name: disk-pvc accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Retain csi: driver: diskplugin.csi.alibabacloud.com # The ID of your existing cloud disk, such as d-uf628m33r5rsbi****** volumeHandle: "<YOUR-DISK-ID>" nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: topology.diskplugin.csi.alibabacloud.com/zone operator: In values: # The zone where the cloud disk is located, such as cn-shanghai-f. - "<YOUR-DISK-ZONE-ID>" storageClassName: alicloud-disk-topology-alltype volumeMode: FilesystemA continuación se describen los parámetros clave.
Parámetro
Descripción
csi.alibabacloud.com/volume-topologyEsta anotación establece la afinidad de nodo para el disco en la nube. Así se garantiza que los Pods que usan este disco se programen en nodos compatibles con el tipo de disco correspondiente, lo que evita errores de montaje por incompatibilidad.
Para asegurar una programación precisa, se recomienda especificar la categoría del disco. Los tipos compatibles son los siguientes:
Disco ESSD Entry:
cloud_essd_entryDisco ESSD AutoPL:
cloud_autoDisco ESSD:
cloud_essdSSD estándar:
cloud_ssdDisco Ultra:
cloud_efficiencyDisco con redundancia de zona:
cloud_regional_disk_auto(requiere ajustes en nodeAffinity parameter)
claimRefEspecifica el PVC que se puede vincular a este PV. Para permitir que cualquier PVC se vincule a este PV, elimine este parámetro.
accessModesModo de acceso. El modo compatible depende de si multi-attach feature for cloud disks está habilitado.
Multi-attach deshabilitado: solo se admite
ReadWriteOnce(RWO). El disco en la nube se puede montar en un solo nodo en modo de lectura y escritura.Multi-attach habilitado:
Como sistema de archivos estándar (formateado): admite
ReadWriteOnce(RWO) yReadOnlyMany(ROX).Para evitar la corrupción de datos por escrituras simultáneas en sistemas de archivos como ext4 en varios nodos, no se admite el modo
ReadWriteMany(RWX).Como dispositivo de bloques sin procesar (sin formatear): admite
ReadWriteOnce(RWO),ReadOnlyMany(ROX) yReadWriteMany(RWX).
persistentVolumeReclaimPolicyPolítica de recuperación del PV. Determina qué sucede con el PV y con el disco en la nube subyacente cuando se elimina el PVC vinculado.
Delete: cuando se elimina el PVC, también se eliminan el PV y el disco en la nube. Use esta configuración con precaución.Para evitar la pérdida accidental de datos, puede create an automatic snapshot policy para respaldar el disco en la nube antes de eliminarlo.
Retain: cuando se elimina el PVC, no se eliminan el PV ni el disco en la nube. Debe liberarlos manualmente.
driverEstablézcalo en
diskplugin.csi.alibabacloud.comcuando use discos de Alibaba Cloud.nodeAffinityConfiguración de afinidad de nodo. Excepto los discos ESSD con redundancia de zona, los demás tipos de disco en la nube solo se pueden adjuntar a Pods dentro de la misma zona. Esta configuración garantiza que los Pods se programen en nodos ECS de la misma zona que el disco.
En el caso de discos con redundancia de zona, cambie la configuración a la siguiente para permitir que el disco se monte en cualquier zona de la región.
En esta configuración,
<YOUR-DISK-REGION-ID>es la región donde se encuentra el disco en la nube, comocn-shanghai.nodeAffinity: required: nodeSelectorTerms: - matchExpressions: - key: topology.kubernetes.io/region operator: In values: - "<YOUR-DISK-REGION-ID>"storageClassNameEsta configuración no tiene efecto en los volúmenes aprovisionados de forma estática y no necesita crear una StorageClass correspondiente. Sin embargo, debe asegurarse de que el valor sea el mismo tanto en el PV como en el PVC.
-
Cree el PV.
kubectl create -f disk-pv.yaml -
Compruebe el estado del PV y asegúrese de que sea
Available.kubectl get pvSalida esperada:
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS VOLUMEATTRIBUTESCLASS REASON AGE d-uf628m33r5rsbi****** 20Gi RWO Retain Available default/disk-pvc alicloud-disk-topology-alltype <unset> 1m36s
Console
En la ACK Clusters página, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, haga clic en .
-
En la Persistent Volumes página, haga clic en Create, establezca PV Type en Cloud Disk y configure los parámetros del PV según las indicaciones.
Parámetro
Descripción
Access Mode
Solo se admite ReadWriteOnce.
Disk ID:
Haga clic en Select Disk y seleccione un disco en la nube no montado que esté en la misma región y zona que el nodo.
File System Type:
Seleccione el tipo de sistema de archivos para almacenar datos en el disco en la nube. Los tipos de File System Type: admitidos incluyen ext4, ext3, xfs y vfat.
Paso 2: Cree un PVC
Cree un PVC para vincularlo al PV que creó en el paso anterior.
kubectl
-
Cree un archivo llamado disk-pvc.yaml con el siguiente contenido.
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: disk-pvc spec: accessModes: - ReadWriteOnce resources: requests: # The requested storage capacity, which must match the PV capacity. storage: "<YOUR-DISK-SIZE>" # Must match the storageClassName defined in the PV. storageClassName: alicloud-disk-topology-alltype # Specify the PV to bind to. volumeName: "<YOUR-DISK-ID>"A continuación se describen los parámetros clave.
Parámetro
Descripción
accessModesModo de acceso. Debe coincidir con la configuración del PV.
storageCapacidad de almacenamiento asignada al Pod. Debe coincidir con la capacidad del PV.
storageClassNameEsta configuración no tiene efecto en los volúmenes aprovisionados de forma estática y no necesita crear una StorageClass correspondiente. Sin embargo, debe asegurarse de que el valor sea el mismo tanto en el PV como en el PVC.
volumeNameEspecifica el PV al que se vinculará. Para permitir que el PVC se vincule a cualquier PV coincidente, elimine este parámetro.
-
Cree el PVC.
kubectl create -f disk-pvc.yaml -
Compruebe el estado del PVC y asegúrese de que sea
Bound.kubectl get pvcSalida esperada, que indica que el PVC está vinculado al PV del disco en la nube:
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS VOLUMEATTRIBUTESCLASS AGE disk-pvc Bound d-bp1ff1mn65jk8s****** 20Gi RWO alicloud-disk-topology-alltype <unset> 6s
Console
En el panel de navegación izquierdo de la página de administración del clúster, elija .
-
En la Persistent Volume Claims página, haga clic en Create, establezca PVC Type en Disk y cree un PVC según las indicaciones.
Parámetro
Descripción
Allocation Mode
Seleccione Existing Volumes.
Existing Volumes
Seleccione el PV que creó anteriormente.
Capacity
Capacidad de almacenamiento asignada al Pod. No puede superar la capacidad del disco en la nube.
Paso 3: Cree una aplicación y monte el disco en la nube
Cree una carga de trabajo y utilice el disco en la nube al montar el PVC.
Un disco en la nube proporciona almacenamiento no compartido. A menos que multi-attach esté habilitado, solo se puede montar en un Pod a la vez. Compartir un PVC en un Deployment con varias réplicas puede impedir que se inicien nuevos Pods si otro Pod ya está usando el disco.
Si aun así necesita usar un disco en la nube con un Deployment, considere using a Cloud Disk as an ephemeral volume. Para habilitar multi-attach, consulte Use NVMe-based Cloud Disks with multi-attach and reservation.
kubectl
-
Cree un archivo llamado disk-test.yaml con el siguiente contenido.
En el siguiente ejemplo se crea un StatefulSet con una réplica. El Pod solicita recursos de almacenamiento mediante un PVC llamado
disk-pvcy monta el volumen en la ruta/data.apiVersion: apps/v1 kind: StatefulSet metadata: name: disk-test spec: replicas: 1 selector: matchLabels: app: nginx template: metadata: labels: app: nginx spec: containers: - name: nginx image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6 ports: - containerPort: 80 volumeMounts: - name: pvc-disk mountPath: /data volumes: - name: pvc-disk persistentVolumeClaim: claimName: disk-pvcImportante-
Cuando configura
securityContext.fsgroup, kubelet cambia de forma recursiva los permisos de los archivos (chmod/chown) al montar un volumen. Esto puede aumentar significativamente el tiempo de montaje en volúmenes con muchos archivos.Para clústeres de la versión 1.20 o posterior, se recomienda establecer
fsGroupChangePolicyenOnRootMismatch. Esto optimiza el rendimiento de montaje porque solo aplica el cambio recursivo de permisos cuando el volumen se monta por primera vez y los permisos del directorio raíz no coinciden. Si el rendimiento sigue siendo un problema o necesita un control de permisos más detallado, use uninitContainerpara gestionar los permisos antes de que se inicie el contenedor de la aplicación. Cuando se reconstruye un Pod, vuelve a montar el disco en la nube original. Si otras restricciones impiden que el Pod se programe en la zona original, permanecerá en estado Pending porque no podrá montar el disco.
-
-
Cree el StatefulSet y monte el disco en la nube.
kubectl create -f disk-test.yaml -
Compruebe el estado del Pod y asegúrese de que esté ejecutándose (
Running).kubectl get pod -l app=nginxSalida esperada:
NAME READY STATUS RESTARTS AGE disk-test-0 1/1 Running 0 14s -
Revise la ruta de montaje para confirmar que el disco en la nube está montado.
kubectl exec disk-test-0 -- df -h /dataSalida esperada:
Filesystem Size Used Avail Use% Mounted on /dev/vdb 20G 24K 20G 1% /data
Console
En el panel de navegación izquierdo de la página de administración del clúster, elija .
-
En la StatefulSets página, haga clic en Create from Image y siga las indicaciones de la página para configurar los parámetros del StatefulSet.
A continuación se describen los elementos principales de configuración. Para obtener instrucciones detalladas, consulte Create a StatefulSet.
Página de configuración
Parámetro
Descripción
Basic Information
Replicas:
Configure el número de réplicas del StatefulSet.
Container
Image Name
Introduzca la dirección de la imagen usada para desplegar la aplicación, como
anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6.Required Resources
Establezca los recursos obligatorios de vCPU, memoria y almacenamiento efímero.
En este ejemplo, la CPU se establece en 0.25 Core y la memoria en 512 MiB.
Volume
Haga clic en Add PVC y luego configure los parámetros.
Mount Source: seleccione el PVC que creó anteriormente.
Container Path: introduzca la ruta del contenedor donde se montará el disco en la nube, como /data.
-
Compruebe el estado de despliegue de la aplicación.
En la StatefulSets página, haga clic en el nombre de la aplicación.
En la pestaña Pods, asegúrese de que el Pod esté en estado Running.
Compruebe la persistencia de los datos
Siga el proceso "escribir datos > eliminar el Pod > comprobar los datos" para verificar que la información almacenada en el disco en la nube persiste después de reconstruir el Pod.
-
Escriba datos de prueba en el Pod.
-
Revise la ruta de montaje para ver los datos del disco en la nube.
kubectl exec disk-test-0 -- ls /dataSalida esperada:
lost+found -
Escriba datos de prueba en el Pod.
Tome como ejemplo el Pod
disk-test-0. Cree un archivo de prueba en el directorio/data, que es la ruta de montaje del disco en la nube.kubectl exec disk-test-0 -- touch /data/test
-
-
Simule un error del Pod al eliminarlo.
kubectl delete pod disk-test-0Ejecute de nuevo el comando
kubectl get pod -l app=nginx. Se creará automáticamente un Pod con el mismo nombre. -
Verifique los datos en el nuevo Pod.
Revise de nuevo el directorio
/dataen el nuevo Poddisk-test-0.kubectl exec disk-test-0 -- ls /dataEn la salida esperada, el archivo de prueba creado anteriormente sigue existiendo. Esto indica que los datos persisten incluso después de eliminar y reconstruir el Pod.
lost+found test
Consideraciones para producción
-
Alta disponibilidad
-
Política de programación de Pods
Configure correctamente
nodeAffinityycsi.alibabacloud.com/volume-topologyen el PV. Así garantizará que el Pod se programe correctamente y que el disco en la nube se vuelva a montar después de reconstruir el Pod. -
Selección del disco en la nube
Evalúe factores como performance, facturación, zonas de disponibilidad y instance type families para asegurar que sus Pods se programen en nodos compatibles.
Cuando seleccione un cloud disk type, tenga en cuenta que los discos SSD en la nube y los discos Ultra están en proceso de retiro. Se recomienda usar discos ESSD PL0 o ESSD Entry en lugar de discos Ultra, y discos ESSD AutoPL en lugar de discos SSD.
-
Recuperación ante desastres entre zonas de disponibilidad
Recuperación ante desastres a nivel de aplicación: para cargas de trabajo críticas como bases de datos, despliegue instancias de la aplicación en varias zonas de disponibilidad y utilice el mecanismo nativo de sincronización de datos de la aplicación para lograr alta disponibilidad.
Recuperación ante desastres a nivel de almacenamiento: elija un tipo de disco en la nube que admita recuperación ante desastres en múltiples zonas. Esta función escribe datos de forma síncrona en distintas zonas de disponibilidad dentro de la misma región, lo que permite la conmutación por error entre zonas. Para obtener más información, consulte Use ESSD Co-located Redundant Disks.
-
-
Seguridad de los datos
Copias de seguridad rutinarias: use automatic snapshot policy para crear instantáneas de sus discos en la nube y así respaldar y recuperar datos.
-
Optimización de rendimiento y costos
-
Adjuntar en paralelo
Para acelerar el inicio de los Pods, use parallel attach for cloud disks.
-
Monitoreo y alertas de almacenamiento
Configure alertas basadas en container storage monitoring para detectar oportunamente anomalías en los volúmenes de almacenamiento o cuellos de botella de rendimiento.
-
Limpieza de recursos
Para evitar cargos inesperados y garantizar la seguridad de los datos, siga este proceso para liberar los recursos que no utilice.
-
Elimine la carga de trabajo
-
Acción: elimine todas las aplicaciones que usen el PVC correspondiente, como Deployments y StatefulSets. Esta acción detiene los Pods en ejecución y desmonta los volúmenes.
Comando de ejemplo:
kubectl delete deployment <YOUR-DEPLOYMENT-NAME>
-
-
Elimine el PVC
Acción: elimine el PVC asociado a la aplicación. Después de eliminarlo, lo que ocurra con el PV vinculado dependerá de su
persistentVolumeReclaimPolicy.-
Detalles de la política de recuperación:
Retain: después de eliminar el PVC, el estado de su PV vinculado cambia aReleased, pero el objeto PV y el disco en la nube del backend se conservan. Si confirma que ya no necesita el disco ni sus datos, consulte Release a cloud disk para eliminarlo. Esta acción es irreversible, así que proceda con precaución.-
Delete: después de eliminar el PVC, se eliminan tanto el objeto PV como el disco en la nube del backend. Los datos del disco se perderán permanentemente y no se podrán recuperar. Use esta política con precaución.Para evitar la pérdida accidental de datos, puede create an automatic snapshot policy para respaldar el disco en la nube antes de eliminarlo.
Comando de ejemplo:
kubectl delete pvc <YOUR-PVC-NAME>
-
Elimine el objeto PV: esta acción solo quita la definición del recurso del clúster y no elimina el disco en la nube del backend.
Acción: elimine manualmente el PV que esté en estado
Released.Comando de ejemplo:
kubectl delete pv <YOUR-PV-NAME>
Documentos relacionados
Para consultar las recomendaciones de optimización de configuración en el despliegue de discos en la nube en múltiples zonas, consulte High-availability configuration recommendations for cloud disk volumes.
Si la capacidad del disco en la nube es insuficiente o el disco está lleno, consulte Expand cloud disk volumes para cambiar su tamaño.
Si ya no utiliza un disco en la nube y desea detener su facturación, puede release the cloud disk. Después de liberarlo, se eliminan el disco en la nube y los datos almacenados en él, por lo que la facturación se detiene.
Si encuentra problemas al usar volúmenes de disco en la nube, consulte FAQ about cloud disk volumes.
Si su clúster todavía usa el componente obsoleto FlexVolume, migrate from FlexVolume to CSI.
