Uso de almacenamiento distribuido de Alibaba Cloud en clústeres K8S autoconstruidos
Categories:
Introducción
Este artículo fue escrito el 14/06/2024 e introduce cómo usar el almacenamiento distribuido de Alibaba Cloud en clústeres autoconstruidos en Alibaba Cloud. Al final se adjuntan enlaces a la documentación, donde la documentación oficial de Alibaba Cloud está en chino, pero el plugin de almacenamiento de Alibaba Cloud en GitHub solo tiene documentación en inglés. Se recomienda a los lectores con posibilidad leer el original.
Instalación del plugin de almacenamiento
- Crear una política de permisos personalizada: https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/docs/ram-policies/disk.json
- Crear un rol RAM, otorgar la política de permisos personalizada, almacenar temporalmente
accesskeyysecretkubectl create secret -n kube-system generic csi-access-key --from-literal=id='{id}' --from-literal=secret='{secret}'
- Instalar el controlador CSI, no hay chart de helm, solo instalación local (20240613).
git clone https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver.gitcd alibaba-cloud-csi-driver/deploy- Si está instalado en un clúster autoconstruido en ecs de Alibaba Cloud, puede ejecutar directamente la siguiente sentencia, si no, por favor lea: https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/docs/install.md
helm upgrade --install alibaba-cloud-csi-driver ./chart --values chart/values-ecs.yaml --namespace kube-system
- Confirmar,
watch kubectl get pods -n kube-system -l app=csi-plugin
Referencia de selección de tipo de almacenamiento
- El tamaño mínimo de creación del disco en la nube ECS es 20GB, IOPS 3000, este tamaño es bastante grande y no es tan rentable.
- Volumen de almacenamiento dinámico en disco en la nube
- Documentación oficial:
- El disco en la nube no admite su uso entre zonas de disponibilidad, es almacenamiento no compartido y solo puede ser montado por un Pod a la vez. (Se probó que puede ser montado por múltiples Pods del mismo deployment)
- El tipo de disco en la nube y el tipo de ECS deben coincidir para poder montarse, de lo contrario fallará el montaje. Consulte familia de especificaciones de instancias para la relación de coincidencia entre tipos de disco en la nube y tipos de ECS.
- Al desplegar la aplicación, compre el disco en la nube mediante la creación automática de PV a través de StorageClass. Si ya compró el disco en la nube, se recomienda usar el volumen de almacenamiento estático en disco en la nube.
- El tamaño solicitado del disco en la nube no debe exceder el rango de capacidad del disco en la nube.
- Cuando el Pod se reconstruye, se montará nuevamente el disco en la nube original. Si por otras limitaciones no puede programarse en la zona de disponibilidad original, el Pod permanecerá en estado Pending.
- El disco en la nube creado dinámicamente es un disco en la nube pagado por uso.
- Otros resúmenes de pruebas:
- Aunque el disco en la nube puede ser montado por múltiples Pods, solo un Pod puede leer y escribir, los demás Pods no pueden leer ni escribir. Por lo tanto, en el pvc el
accessModessolo puede establecerse comoReadWriteOnce, modificarlo no producirá el resultado correcto. - Si el
reclaimPolicyde StorageClass se establece comoDelete, al eliminar el PVC, el disco en la nube también será eliminado automáticamente. - Si el
reclaimPolicyde StorageClass se establece comoRetain, al eliminar el PVC, el disco en la nube no será eliminado automáticamente, debe eliminarse manualmente en el clúster y en la consola de Alibaba Cloud.
- Aunque el disco en la nube puede ser montado por múltiples Pods, solo un Pod puede leer y escribir, los demás Pods no pueden leer ni escribir. Por lo tanto, en el pvc el
- Resulta difícil encontrar un escenario de uso adecuado.
- Documentación oficial:
- Volumen de almacenamiento estático en disco en la nube
- Documentación oficial:
- Cree manualmente PV y PVC
- El disco en la nube no admite su uso entre zonas de disponibilidad, es almacenamiento no compartido y solo puede ser montado por un Pod a la vez.
- El tipo de disco en la nube y el tipo de ECS deben coincidir para poder montarse, de lo contrario fallará el montaje.
- Puede seleccionar discos en la nube en estado de montaje pendiente en la misma región y zona de disponibilidad que el clúster.
- Documentación oficial:
- Volumen de almacenamiento dinámico en disco en la nube
- La latencia de operación del NAS es mayor, el mejor rendimiento es 2ms, el almacenamiento profundo 10ms, facturación por uso, rendimiento de lectura y escritura más alto que el almacenamiento de objetos OSS
- Volumen de almacenamiento OSS, https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/oss-volume-overview-1?spm=a2c4g.11186623.0.0.43166a351NbtvU
- OSS es almacenamiento compartido, puede proporcionar servicios de almacenamiento compartido para múltiples Pods simultáneamente.
- (20240613) Actualmente se admite CentOS, Alibaba Cloud Linux, ContainerOS y el sistema operativo Anolis.
- Al usar el volumen de datos, cada aplicación utiliza un nombre PV independiente.
- El volumen de datos OSS utiliza el sistema de archivos FUSE montado por el archivo ossfs.
- Es adecuado para escenarios de lectura de archivos. Por ejemplo, leer archivos de configuración, archivos de video, archivos de imágenes, etc.
- No es aplicable a escenarios de aplicaciones que escriben archivos. Si necesita escribir archivos, se recomienda usar SDK para implementar operaciones de escritura o usar el servicio de volumen de almacenamiento NAS.
- El ossfs puede optimizar su rendimiento en caché, permisos, etc. ajustando los parámetros de configuración
- Limitaciones de uso de ossfs
- Las operaciones de escritura aleatoria o de anexado de archivos provocarán la reescritura de todos los archivos.
- Debido a que es necesario acceder remotamente al servidor OSS, el rendimiento de operaciones de metadatos como list directory es pobre.
- Las operaciones de renombrar archivos y carpetas no son atómicas.
- Cuando varios clientes montan el mismo Bucket OSS, depende del usuario coordinar el comportamiento de cada cliente, por ejemplo, evitar que varios clientes escriban en el mismo archivo, etc.
- No admite enlaces duros (Hard Link).
- Cuando la versión del plugin CSI es anterior a v1.20.7, solo detecta modificaciones locales, pero no puede detectar modificaciones externas de otros clientes o herramientas.
- Para evitar el aumento de la carga del sistema, no utilice en escenarios de alta concurrencia de lectura y escritura.
- Si es un clúster híbrido (parte de los nodos no pertenecen a Alibaba Cloud), solo se pueden usar volúmenes estáticos NAS y OSS.
- El disco en la nube, el NAS y el OSS tienen sus limitaciones regionales.
En resumen, el disco en la nube se solicita y monta como un disco duro completo, no es conveniente compartir. OSS tiene granularidad de operación hasta el nivel de archivo, existen problemas de rendimiento en escenarios de alta concurrencia de lectura y escritura, y el soporte de sistemas es limitado.
- El disco en la nube es adecuado para escenarios que requieren gran cantidad de espacio y alto rendimiento, como bases de datos
- Otros escenarios con requisitos de rendimiento no altos pueden optar por NAS
- OSS no es adecuado para escenarios de escritura de alta concurrencia en clústeres de Alibaba Cloud, pero puede aplicarse a escenarios de lectura concurrente.
La documentación oficial de Alibaba Cloud tiene problemas de ubicación no uniforme y contradicciones internas, los lectores deben juzgar según la fecha de la documentación, algunas características declaradas como no compatibles pueden haber sido compatibles con la actualización de versiones, se necesita hacer algunas pruebas por cuenta propia.
Procedimientos de operación
Esta es la documentación de orientación oficial de Alibaba Cloud, después de seguir la instalación del plugin de almacenamiento de Alibaba Cloud según lo indicado en el artículo anterior, puede desplegar y probar siguiendo Uso de volúmenes NAS de aprovisionamiento estático.
Nota: Los usuarios de k3s encontrarán problemas con local-path-storage, la información de error puede ser,
- failed to provision volume with StorageClass “local-path”: claim.Spec.Selector is not supported
- Waiting for a volume to be created either by the external provisioner ’localplugin.csi.alibabacloud.com’ or manually by the system administrator. If volume creation is delayed, please verify that the provisioner is running and correctly registered.
Se necesita establecer el storageClassName del persistentVolumeClaim en vacío, evitando el uso del local-path-storage por defecto de k3s.
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pvc-nas
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 2Gi
selector:
matchLabels:
alicloud-pvname: pv-nas
storageClassName: ""
Referencias
- https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver
- https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/docs/disk.md
- https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/docs/install.md
- https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/docs/ram-policies/disk.json
- https://github.com/kubernetes-sigs/alibaba-cloud-csi-driver/blob/master/deploy/chart/values.yaml
- https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/use-dynamically-provisioned-disk-volumes?#6d16e8a415nie
- https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicated/user-guide/mount-statically-provisioned-nas-volumes?spm=a2c4g.11186623.0.0.125672b9VnrKw6