Ejercicio: Creación de un script de cloud-init para usarlo con Azure CycleCloud

Completado

Al aprovisionar nodos para un clúster, es posible que quiera poder realizar tareas de configuración personalizadas durante el proceso de arranque del sistema operativo, antes de que se apliquen los cambios controlados por el programador. Estas tareas pueden incluir, por ejemplo, la actualización de variables de entorno path, la configuración de la resolución de nombres del Sistema de nombres de dominio (DNS) o el enlace de nodos a un dominio de Microsoft Entra Domain Services.

Para implementar esta funcionalidad, decide explorar el uso de cloud-init en clústeres de Azure CycleCloud y probarlo con un script de Bash simple que modifica el contenido de un archivo local en cada nodo. Para validar el resultado, piensa conectarse a los nodos de clúster y revisar el contenido de los archivos modificados.

Nota:

Al crear scripts de cloud-init, puede usar cualquier método de scripting o configuración que el sistema operativo que se ejecuta en los nodos de destino pueda reconocer y procesar, incluido el scripting de shell tradicional, Python y YAML.

En este ejercicio, realizará las siguientes tareas:

  • Tarea 1: configuración de la autenticación basada en SSH para nodos de clúster de Azure CycleCloud
  • Tarea 2: incorporación de un script de cloud-init a los nodos de clúster
  • Tarea 3: comprobación de la funcionalidad de cloud-init en el nodo de programador
  • Tarea 4: comprobación de la funcionalidad de cloud-init en los nodos de ejecución
  • Tarea 5: Limpieza del entorno del ejercicio

Nota:

Asegúrate de haber realizado correctamente el ejercicio anterior antes de iniciar este.

Tarea 1: configuración de la autenticación basada en SSH para nodos de clúster de Azure CycleCloud

Para validar la ejecución de scripts de cloud-init, se va a conectar a los nodos de clúster con la CLI de Azure CycleCloud desde Azure Cloud Shell. Esta conexión se basa en la autenticación basada en claves SSH, por lo que debe cargar en el directorio principal de Azure Cloud Shell la clave privada correspondiente a la clave pública distribuida a los nodos de clúster.

  1. Vaya a Azure Portal y, cuando se le pida, autentíquese con una cuenta de Microsoft o de Microsoft Entra que tenga el rol Colaborador o Propietario en la suscripción de Azure que está usando en este módulo.

  2. En Azure Portal, abra Cloud Shell. Para ello, seleccione su icono en la barra de herramientas que se encuentra junto al cuadro de búsqueda y asegúrese de que está ejecutando una sesión de Bash.

  3. En el panel Azure Cloud Shell, en la barra de herramientas del panel, seleccione el cuarto icono que muestra una página con un par de flechas verticales que apuntan a direcciones opuestas. Luego, en el menú desplegable, seleccione Cargar.

  4. En el cuadro de diálogo Abrir, vaya a la ubicación del archivo .pem que contiene la clave privada y seleccione Abrir.

  5. Ejecute los siguientes comandos en Cloud Shell para mover el archivo .pem cargado a la ubicación correcta y configurar los permisos necesarios a nivel de archivo (reemplace el marcador de posición <private_key.pem> por el nombre del archivo .pem):

    mkdir -p ~/.ssh
    mv private_key.pem ~/.ssh
    chmod 600 ~/.ssh/cc-ssh-keys.pem
    

Tarea 2: incorporación de un script de cloud-init a los nodos de clúster

La opción para agregar scripts a los nodos de clúster está disponible directamente desde la interfaz gráfica de Azure CycleCloud. La va a usar para asignar el mismo script de cloud-init al programador y a los nodos de ejecución y comprobar su funcionalidad. El script agrega una entrada 10.10.10.10 cc.contoso.com al archivo /etc/hosts.

  1. Si aún no está conectado a la aplicación web de Azure CycleCloud, abra otra ventana del explorador y vaya a la dirección URL https://<IP_address>. Si se le pide, confirme que quiere continuar.

  2. Si se le pide que se autentique, inicie sesión con las credenciales de su cuenta de usuario de la aplicación de Azure CycleCloud con el rol Administrador.

  3. En la interfaz gráfica de Azure CycleCloud, vaya a la página Clústeres. En la lista de clústeres, selecciona la entrada contoso-custom-slurm-lab-cluster y selecciona Editar.

  4. En la ventana emergente Editar contoso-custom-slurm-lab-cluster, seleccione la entrada Cloud-init y, en la sección Configuración de cloud-init, en la pestaña scheduler, escriba el siguiente script:

    #!/bin/bash
    echo "10.10.10.10 www.contoso.com" >> /etc/hosts
    

    Screenshot of the Cloud-init tab of the Edit contoso-custom-slurm-lab-cluster pop-up window in the Azure CycleCloud web application.

  5. En la misma ventana emergente, con la entrada Cloud-init seleccionada, seleccione cada una de las pestañas restantes (incluidas cuda, hpc y htc) y escriba el mismo script. Seleccione Guardar.

Tarea 3: comprobación de la funcionalidad de cloud-init en el nodo de programador

Para comprobar la funcionalidad de cloud-init en el nodo de programador, va a iniciar el clúster. Esto desencadena el aprovisionamiento del nodo de programador. Una vez que el nodo esté en ejecución, se podrá conectar a él desde Azure Cloud Shell y comprobar que el archivo /etc/hosts contiene la entrada 10.10.10.10 www.contoso.com.

  1. En la ventana del explorador que muestra la aplicación web de Azure CycleCloud, seleccione el vínculo Iniciar en la página contoso-custom-slurm-lab-cluster. Cuando se le pida confirmación, seleccione Aceptar.

    Nota:

    Si el clúster ya se está ejecutando, debe finalizar y volver a iniciarlo para aplicar la configuración actualizada; de lo contrario, esa configuración no será visible en los pasos posteriores.

  2. En la lista de nodos, seleccione la entrada Scheduler y supervise su estado en el panel de Detalles; espere hasta que cambie de Obteniendo a Listo.

    Nota:

    Esto puede tardar unos tres minutos.

  3. En el panel Detalles, seleccione Conectar. En la ventana emergente Connect to node: scheduler (Conexión con el nodo: scheduler), en la sección Using the CycleCloud CLI (Uso de la CLI de CycleCloud), seleccione la entrada que contiene el comando que le permite conectarse al nodo de programador y seleccione Cerrar:

    Screenshot of the Connect to node: scheduler pop-up window in the Azure CycleCloud web application.

    Nota:

    El comando debe tener el formato cyclecloud connect scheduler -c contoso-custom-slurm-lab-cluster

  4. Cambie a la ventana del explorador web con el panel de Cloud Shell y ejecute el comando que ha copiado en el paso anterior.

    Nota:

    El comando debe generar una salida en el formato siguiente:

    m@Azure:~$ cyclecloud connect scheduler -c contoso-custom-slurm-lab-cluster
    Connecting to cc-admin@40.87.52.25 (contoso-custom-slurm-lab-cluster scheduler) using SSH
    [cc-admin@ip-0A000304 ~]$
    
  5. Cuando esté conectado al nodo de programador, ejecute el comando siguiente para comprobar que el archivo /etc/hosts contiene la entrada 10.10.10.10 www.contoso.com:

    grep "10.10.10.10 www.contoso.com" /etc/hosts
    

    Nota:

    El comando debe generar una salida en el formato siguiente:

    [cc-admin@ip-0A000304 ~]$ grep "10.10.10.10 www.contoso.com" /etc/hosts
    10.10.10.10 www.contoso.com
    

Tarea 4: comprobación de la funcionalidad de cloud-init en los nodos de ejecución

Ahora va a repetir la secuencia equivalente de pasos para comprobar la funcionalidad de cloud-init en los nodos de ejecución.

Importante

Para poder aplicar el procedimiento equivalente a fin de comprobar la funcionalidad de cloud-init en los nodos de ejecución, debe quitar y volver a asignar el conjunto de escalado de máquinas virtuales correspondiente. Este paso es específico de los clústeres basados en Slurm porque, en este caso, la integración de escalado automático del programador requiere que Azure CycleCloud rellene previamente los nodos de ejecución. Como resultado, la configuración de cloud-init aplicada anteriormente en este ejercicio no afectaría a los nodos existentes.

  1. Mientras está conectado al nodo de programador, ejecute los siguientes comandos en Cloud Shell para eliminar y reasignar los nodos de proceso de su clúster de Azure CycleCloud y finalizar la conexión con el nodo de programador:

    sudo -i
    cd /opt/cycle/jetpack/system/bootstrap/slurm
    ./cyclecloud_slurm.sh remove_nodes
    ./cyclecloud_slurm.sh scale
    exit
    exit
    

    Nota:

    Una vez completado este paso, aparece un mensaje que indica Intentando quitar los siguientes nodos, seguido de reescalado del clúster completado.

  2. En el equipo, vaya a la ventana del explorador web que muestra la página contoso-custom-slurm-lab-cluster de la aplicación web de Azure CycleCloud. En la pestaña Nodos, seleccione la fila htc y, en el panel de Detalles, seleccione la entrada htc-1 y luego seleccione el encabezado Acciones. En el menú desplegable, seleccione Inicio y seleccione Aceptar cuando se le pida que confirme.

    Screenshot of the Actions menu on the contoso-custom-slurm-lab-cluster page in the Azure CycleCloud web application.

  3. En el panel de Detalles, supervise el nodo recién iniciado y espere hasta que su estado cambie de Obteniendo a Listo.

    Nota:

    Esto puede tardar unos tres minutos.

  4. En el panel Detalles, seleccione Conectar. En la ventana emergente Conexión al nodo: htc-1, seleccione la entrada de la sección Uso de la CLI de CycleCloud que contiene el comando que le permite conectarse al nodo de programador y seleccione Cerrar:

    Screenshot of the Connect to node: htc-1 pop-up window in the Azure CycleCloud web application.

    Nota:

    El comando debe tener el formato cyclecloud connect htc-1 -c contoso-custom-slurm-lab-cluster.

  5. Cambie al panel de Cloud Shell y ejecute el comando que copió en el paso anterior.

    Nota:

    El comando debe generar una salida en el formato siguiente:

    m@Azure:~$ cyclecloud connect htc-1 -c contoso-custom-slurm-lab-cluster
    Connecting to cc-admin@10.0.3.5 (contoso-custom-slurm-lab-cluster htc-1) through SSH bastion at cc-admin@40.87.52.25
    [cc-admin@ip-0A000305 ~]$
    
  6. Cuando esté conectado al nodo htc-1, ejecute el comando siguiente para comprobar que el archivo /etc/hosts contiene la entrada 10.10.10.10 www.contoso.com:

    cat /etc/hosts | grep "10.10.10.10 www.contoso.com"
    

    Nota:

    Una vez que llegue a este punto debe eliminar todos los recursos que ha implementado en este ejercicio y los anteriores de este módulo. Esto le permite evitar los cargos en la suscripción a Azure asociados al mantenimiento de estos recursos.

Tarea 5: limpieza del entorno de laboratorio

Han terminado las pruebas de personalización del clúster mediante la aplicación de Azure CycleCloud. Para evitar costos innecesarios asociados al uso de recursos de Azure, va a finalizar el clúster y a quitar todos los recursos aprovisionados durante los ejercicios de este módulo.

  1. En el explorador web que muestra la interfaz gráfica de la aplicación web de Azure CycleCloud, seleccione el vínculo Finalizar en la página contoso-custom-slurm-lab-cluster y, cuando se le pida confirmación, seleccione Aceptar.

  2. Supervise el proceso de finalización.

    Nota:

    El proceso implica desaprovisionar la máquina virtual de Azure que desempeña el rol de nodo principal del clúster. Esto puede tardar unos cinco minutos.

    Nota:

    Para eliminar todos los demás recursos aprovisionados en este laboratorio, va a eliminar los grupos de recursos que hospedan los recursos de clúster.

  3. En Azure Portal, vaya a la hoja del grupo de recursos que hospeda los recursos de clúster y seleccione la entrada Eliminar grupo de recursos de la barra de herramientas. En el cuadro de texto Escriba el nombre del grupo de recursos para confirmar la eliminación, escriba el nombre del grupo de recursos y seleccione Eliminar. Vuelva a seleccionar Eliminar para confirmar la eliminación.

    Nota:

    Puede haber grupos de recursos adicionales asociados a los recursos de Slurm. Para evitar cargos adicionales, asegúrese de eliminar todos estos grupos de recursos relacionados con Slurm y sus recursos.

Felicidades. Ha realizado correctamente el tercer y último ejercicio de este módulo. En este ejercicio ha explorado el uso de cloud-init en clústeres de Azure CycleCloud y lo ha probado con un script de Bash simple que modificaba el contenido de un archivo local en cada nodo. Para validar el resultado, se ha conectado a los nodos de clúster y ha revisado el contenido de los archivos modificados. Por último, ha finalizado el clúster y ha eliminado todos los recursos de clúster usados en este módulo para evitar costos innecesarios.