Descripción de las plantillas de clúster de Azure CycleCloud

Completado

Azure CycleCloud proporciona una implementación basada en plantillas de clústeres de HPC. De manera predeterminada, la aplicación de Azure CycleCloud incluye varias plantillas integradas para la implementación de los programadores de clúster más comunes, incluidos Slurm, PBSPro, LSF, Grid Engine y HT-Condor. Los repositorios de GitHub de Azure CycleCloud ofrecen muchos proyectos específicos de programador que se pueden personalizar e importar en la instancia de Azure CycleCloud. También existe la opción de implementar aprovisionamiento basado en plantillas para programadores propios desarrollados en local mediante complementos de escalado automático de CycleCloud.

Las plantillas facilitan la implementación de una amplia gama de características de Azure CycleCloud, incluida la compatibilidad con imágenes de máquina virtual (VM) personalizadas, el escalado automático y VM de acceso puntual. También minimizan la sobrecarga asociada al aprovisionamiento y el mantenimiento de varias implementaciones de clústeres configurados de forma idéntica, que se suelen usar para aislar los entornos de producción, desarrollo y pruebas.

Estas ventajas se alinean con los objetivos para implementar el nuevo clúster residente en Azure de Contoso. Para optimizar el alcance de estas ventajas, decide obtener más información sobre el formato y el proceso de implementación de las plantillas de Azure CycleCloud.

Formato de las plantillas de Azure CycleCloud

Las plantillas son archivos con formato INI que usan la sintaxis declarativa para describir la estructura y la configuración de un clúster de CycleCloud, incluidos los roles del nodo de clúster y sus relaciones respectivas. Las plantillas constan de secciones con nombre, con encabezados designados por uno o más pares de corchetes. Las secciones forman una jerarquía que se corresponde con la jerarquía de objetos del clúster y sus parámetros correspondientes. El número de corchetes representa un nivel dentro de esa jerarquía, y aumenta de manera secuencial con cada nivel.

[cluster]
  [[node, nodearray]]
    [[[volume]]]
    [[[network-interface]]]
    [[[cluster-init]]]
    [[[input-endpoint]]]
    [[[configuration]]]
[environment]
[noderef]
[parameters]
  [[parameters]]
    [[[parameter]]]

Así, la sección [cluster] puede contener una o más secciones [[node]], que pueden contener varias secciones [[[volume]]]. Del mismo modo, dentro de la misma plantilla, en la sección [cluster] es posible definir una o más secciones [[nodearray]], cada una con su [[[configuration]]].

Nota:

El orden de las secciones dentro del mismo nivel es arbitrario.

Secciones principales de una plantilla

Una plantilla consta de las siguientes secciones principales:

  • Clúster: La sección [cluster] contiene una definición de un objeto cluster de Azure CycleCloud. Una plantilla debe incluir al menos una sección [cluster], que contiene una o más secciones [[node]] y [[nodearray]] que describen los objetos secundarios de ese clúster.
  • Nodo: Representa una única máquina virtual aprovisionada para la plataforma.
  • Nodearray: Representa uno o más conjuntos de escalado de máquinas virtuales de Azure.

Nota:

Los clústeres incluyen nodos que atienden a sus roles designados durante el procesamiento de cargas de trabajo en clúster. Desde el punto de vista de la implementación, Azure CycleCloud se basa en Azure Resource Manager para aprovisionarlos como máquinas virtuales individuales de Azure o como miembros de un conjunto de escalado de máquinas virtuales. Este último caso representa una colección de máquinas virtuales configuradas de forma idéntica que, a diferencia de las máquinas virtuales de Azure, admiten el escalado automático horizontal. Azure CycleCloud usa conjuntos de escalado de máquinas virtuales para implementar objetos nodearray. Así, en la sección [[node]] se describen las propiedades de las máquinas virtuales subyacentes aprovisionadas para la plataforma, que pueden ser una máquina virtual de Azure independiente o pertenecer a un conjunto de escalado de máquinas virtuales de Azure. En la sección [[nodearray]] se describe un conjunto de escalado de máquinas virtuales de Azure.

Nota:

Un elemento nodearray puede constar de varios conjuntos de escalado de máquinas virtuales de Azure, cada uno de ellos con máquinas virtuales configuradas de forma diferente. Pero todos los nodos de un elemento nodearray tienen el mismo rol en el clúster, como proporcionar recursos a una sola cola del programador del clúster.

  • Volume define un disco administrado de Azure que se debe asociar a nodos de clúster individuales o nodos que forman un elemento nodearray. Es un objeto secundario de un objeto node o nodearray.
  • Network-interface define una interfaz de red de Azure que se debe asociar a nodos de clúster individuales o nodos que forman un elemento nodearray. Es un objeto secundario de un objeto node o nodearray.
  • Configuration define las propiedades configurables de un objeto node o nodearray. Es un objeto secundario de un objeto node o nodearray.
  • Cluster-init define las especificaciones del proyecto de Azure CycleCloud que se van a aplicar a un nodo de clúster. Un proyecto es una colección de recursos que definen las configuraciones del nodo en forma de especificaciones de proyecto. Cuando se inicia un nodo, se configura automáticamente mediante el procesamiento de estas especificaciones. Cluster-init es un objeto secundario de un objeto node o nodearray.
  • Environment define una implementación de Azure Resource Manager, que aprovisiona o modifica los recursos de Azure que va a usar el clúster. Es un objeto de nivel superior opcional.
  • Noderef hace referencia a un nodo dentro de la plantilla para expresar las dependencias de los recursos. Es un objeto de nivel superior opcional.
  • Parameters permite convertir una plantilla en portátil, lo que permite usarla para la implementación de varios clústeres con una jerarquía de objetos coincidente, pero con diferentes opciones de configuración. Es un objeto de nivel superior opcional, aunque tiene la opción de crear una jerarquía de parámetros anidados. Se puede definir el valor predeterminado de cada parámetro. Los parámetros también permiten exponer variables configurables en un clúster mediante la interfaz web de CycleCloud.

Cada sección contiene varios pares clave-valor que proporcionan detalles de configuración sobre el objeto correspondiente, representado por el encabezado de sección. Por ejemplo, en el caso de un elemento nodearray, estos detalles podrían incluir la clave ImageName con el valor que designa la imagen de máquina virtual de Azure que se va a usar para sus nodos o la clave Azure.MaxScalesetSize que especifica el tamaño máximo permitido del conjunto de escalado de máquinas virtuales como su valor. Del mismo modo, las secciones node o nodearray pueden incluir una o más secciones [[[configuration]]].

Aprovisionamiento de un clúster basado en una plantilla

Después de identificar la plantilla que se piensa usar para aprovisionar un clúster de Azure CycleCloud, se puede aplicar cualquiera de los métodos de implementación siguientes:

  • Use la CLI de Azure CycleCloud para importar la plantilla en la aplicación de Azure CycleCloud, y luego, use la interfaz gráfica de la aplicación para aprovisionar el clúster. Para desencadenar la importación se ejecuta el comando cyclecloud import_template -f <template_file> (donde el marcador de posición <template_file> representa el nombre del archivo que contiene la plantilla). Si la plantilla contiene varias definiciones de clúster, se especifica el nombre del clúster que se quiere importar al hacer referencia a él como valor del parámetro -c.
  • Use la CLI de Azure CycleCloud para importar la plantilla en la aplicación de Azure CycleCloud y, luego, para aprovisionar el clúster. Para desencadenar la importación se ejecuta el comando cyclecloud import_template -t -f <template_file> (donde el marcador de posición <template_file> representa el nombre del archivo que contiene la plantilla). Una vez terminada la importación, se ejecuta el comando cyclecloud create_cluster. Por ejemplo, para crear un clúster llamado lab-cluster a partir de una plantilla importada llamada lab-template, ejecutaría cyclecloud create_cluster lab-template lab-cluster.
  • Uso de la CLI de Azure CycleCloud para aprovisionar el clúster sin importar la plantilla de forma explícita. Para desencadenar la importación se ejecuta el comando cyclecloud import_cluster.

Independientemente del método que se elija, se deben proporcionar los valores de los parámetros requeridos durante el aprovisionamiento del clúster. Cuando se usa la CLI de Azure CycleCloud, se pueden proporcionar si se hace referencia a un archivo de parámetros con formato JSON.

Nota:

El archivo consta de pares clave-valor, donde la clave representa el nombre del parámetro. Para revisar su formato para un clúster existente se usa el comando cyclecloud export_parameters <cluster_name> > params.json, donde el marcador de posición <cluster_name> representa el nombre del clúster existente.

Nota:

Antes de implementar un clúster basado en una plantilla importada, también hay que cargar el contenido del proyecto correspondiente en un almacén de Azure CycleCloud. Para realizar una carga se usa el comando cyclecloud project upload <locker_name> de la CLI de Azure CycleCloud (donde el marcador de posición <locker_name> representa el nombre del almacén). Para enumerar los almacenes disponibles se ejecuta el comando cyclecloud locker list de la CLI de Azure CycleCloud. En la sección [[[cluster-init]]] se hace referencia al nombre del almacén.

Nota:

Uno de los pasos para configurar una instalación de Azure CycleCloud es la creación de un contenedor de blobs en una cuenta de almacenamiento de Azure. Este contenedor actúa como el almacén que el servidor de CycleCloud usa para almacenar temporalmente los proyectos de CycleCloud de los nodos de clúster. Posteriormente, los nodos de los clústeres administrados de Azure CycleCloud se configuran para descargar proyectos de CycleCloud desde este almacén como parte de su proceso de arranque.