Cuando varios pods comparten un nodo y cada uno requiere múltiples discos, algo común en cargas de trabajo de bases de datos, integración continua (CI) y procesamiento por lotes, el montaje en serie predeterminado aumenta el tiempo de inicio de los pods. El montaje paralelo de discos adjunta los discos de forma simultánea, lo que reduce la latencia de arranque.
Requisitos previos
Cuenta con an ACK managed cluster que ejecuta Kubernetes 1.26 o una versión posterior, donde csi-plugin y csi-provisioner están en la versión v1.30.4 o superior.
Instaló y configuró Alibaba Cloud CLI.
Notas de uso
-
El montaje paralelo solo es compatible con discos que tienen números de serie. Para obtener más información sobre cómo consultar el número de serie de un disco, consulte Query serial number.
Los discos creados antes del 10 de junio de 2020 no tienen números de serie reconocibles. Si habilita el montaje paralelo para estos discos, el proceso fallará.
Cuando se desmontan varios discos del mismo nodo, las operaciones de desmontaje se ejecutan en modo serie.
Después de habilitar el montaje paralelo, los campos
Deviceque devuelve la API, como ECS DescribeDisks, y el destino de montaje que se muestra en la consola pueden ser inexactos. No dependa de esta ruta de montaje en sus cargas de trabajo. Utilice el número de serie del disco para determinar la ruta de montaje real.
Procedimiento
Para habilitar el montaje paralelo de discos, utilice el script automatizado o siga el procedimiento manual a continuación.
Usar un script automatizado
-
Guarde el siguiente script en un archivo llamado enable_parallel_attach.sh.
-
Ejecute el script para montar los discos en modo paralelo.
bash enable_parallel_attach.sh <Cluster ID>
Habilitar la función manualmente
-
Agregue ECS Tags al node pool del clúster. Establezca la clave de la etiqueta en
supportConcurrencyAttachy su valor entrue. Asegúrese de que la etiqueta se agregue a una nueva instancia de ECS.Inicie sesión en la consola de ACK. En el panel de navegación izquierdo, haga clic en Clusters.
En la página Clusters, haga clic en el nombre de su clúster. En el panel de navegación izquierdo, seleccione .
En la página Node Pools, busque el node pool que desea modificar y haga clic en Edit dentro de la columna Actions.
En la parte inferior de la página, ubique la sección Advanced y agregue una etiqueta en ECS Tags. Establezca la clave en
supportConcurrencyAttachy el valor entrue.
Agregue una etiqueta a las instancias de ECS de todos los nodos existentes en el clúster. Establezca la clave en
supportConcurrencyAttachy el valor entrue. Para obtener más información, consulte Add a custom tag.-
En el panel de navegación izquierdo, haga clic en Components and Add-ons. Seleccione la pestaña Storage, busque el complemento
csi-provisioner, haga clic en Configuration en la esquina inferior derecha del componente y establezca el parámetro FeatureGate enDiskADController=true,DiskParallelAttach=true.NotaDespués de especificar
DiskADController=true, csi-provisioner ejecuta las operacionesattachydetachrelacionadas con los discos. Al especificarDiskParallelAttach=true, se habilita la función de montaje paralelo de discos. Una vez configurado csi-provisioner, establezca el parámetro FeatureGate de csi-plugin en
DiskADController=true.
Comprobar el rendimiento del montaje paralelo de discos
En este ejemplo, se crean pods con una gran cantidad de discos montados en el mismo nodo. Esto permite comprobar la aceleración en el inicio de los pods tras habilitar el montaje paralelo.
Los resultados de las pruebas de este tema son valores de referencia. Los resultados reales pueden variar según su entorno.
Agregue un nodo compatible con múltiples discos a un clúster de ACK. Por ejemplo, una instancia
ecs.g7se.16xlargeadmite hasta 56 discos.-
Cree un archivo de prueba llamado
attach-stress.yamly copie en él el siguiente contenido. Reemplace<YOUR-HOSTNAME>por el nombre real del nodo. -
Ejecute el siguiente comando para confirmar que la aplicación inicia correctamente. Después, escale el número de réplicas a 0 para preparar las pruebas de montaje por lotes.
kubectl apply -f attach-stress.yaml kubectl rollout status sts attach-stress kubectl scale sts attach-stress --replicas 0Resultado esperado:
storageclass.storage.k8s.io/alibabacloud-disk created statefulset.apps/attach-stress created partitioned roll out complete: 1 new pods have been updated... statefulset.apps/attach-stress scaled -
Ejecute los siguientes comandos para iniciar la prueba de montaje por lotes y medir el tiempo de arranque de los pods:
NotaEn este caso, el montaje paralelo está deshabilitado para el clúster. Ajuste la cantidad de pods de la prueba según el número máximo de discos que admite su nodo.
date && \ kubectl scale sts attach-stress --replicas 28 && \ kubectl rollout status sts attach-stress && \ dateResultado esperado:
Tuesday October 15 19:21:36 CST 2024 statefulset.apps/attach-stress scaled Waiting for 28 pods to be ready... Waiting for 27 pods to be ready... <Omitted...> Waiting for 3 pods to be ready... Waiting for 2 pods to be ready... Waiting for 1 pods to be ready... partitioned roll out complete: 28 new pods have been updated... Tuesday October 15 19:24:55 CST 2024El resultado indica que se necesitan más de 3 minutos para iniciar los 28 pods cuando el montaje paralelo está deshabilitado.
Habilite el montaje paralelo siguiendo las instrucciones de la sección Procedure.
-
Ejecute el siguiente comando para eliminar los pods anteriores y preparar la siguiente ronda de pruebas:
NotaSupervise los recursos
volumeattachmentsdel clúster. Una vez eliminados estos recursos, los discos se desmontarán. Este proceso tarda unos minutos.kubectl scale sts attach-stress --replicas 0 -
Vuelva a ejecutar el siguiente comando para calcular el tiempo necesario para iniciar los pods con el montaje paralelo habilitado. Se espera que tarde aproximadamente 40 segundos, mucho menos que los 3 minutos requeridos sin esta función.
date && \ kubectl scale sts attach-stress --replicas 28 && \ kubectl rollout status sts attach-stress && \ dateResultado esperado:
Tuesday October 15 20:02:54 CST 2024 statefulset.apps/attach-stress scaled Waiting for 28 pods to be ready... Waiting for 27 pods to be ready... <Omitted...> Waiting for 3 pods to be ready... Waiting for 2 pods to be ready... Waiting for 1 pods to be ready... partitioned roll out complete: 28 new pods have been updated... Tuesday October 15 20:03:31 CST 2024
-
Ejecute el siguiente comando para eliminar las aplicaciones de prueba del clúster:
kubectl delete -f attach-stress.yaml