Compartir a través de


Plantillas de clúster

Azure CycleCloud usa plantillas para definir configuraciones de clúster. CycleCloud incluye muchas plantillas de forma predeterminada. Para obtener una lista completa de las plantillas admitidas, consulte GitHub. Puede crear nuevas plantillas o personalizar las existentes. Por ejemplo, puede personalizar una plantilla existente para aprovechar las ventajas de las máquinas virtuales de Spot o agregar una VPC para ampliar su propia red.

Notación de configuración

Las plantillas de clúster de Azure CycleCloud permiten agregar una o varias secciones [[[configuración]]] a un nodo o una matriz de nodos. En estas secciones se especifican las opciones de configuración de software para los nodos que inician con CycleCloud. Use la notación de puntos para especificar los atributos que desea configurar:

[[node scheduler]]
  [[[configuration]]]
  cycle_server.admin.name = poweruser
  cycle_server.admin.pass = super_secret
  cycle_server.http_port = 8080
  cycle_server.https_port = 8443

También puede usar la notación prefix para especificar una sección de configuración y ahorrar tiempo al escribir. La misma configuración también se puede escribir como:

[[node scheduler]]
  [[[configuration cycle_server]]]
  admin.name = poweruser
  admin.pass = super_secret
  http_port = 8080
  https_port = 8443

Una matriz de nodos o nodos también puede contener varias secciones de configuración si es necesario:

[[node scheduler]]
  [[[configuration]]]
  run_list = role[sge_scheduler_node]

  [[[configuration cycle_server.admin]]]
  name = poweruser
  pass = super_secret

Parámetros de plantilla de clúster

Las plantillas de clúster pueden contener parámetros que se usan para cambiar los valores de determinadas partes de un clúster. No es necesario modificar la propia plantilla. Esta característica es especialmente útil cuando desea crear muchos clústeres similares con pequeñas diferencias, como la implementación de entornos de desarrollo y producción. Para especificar un parámetro dentro de una plantilla de clúster, prefijo una variable con "$". Un ejemplo de plantilla básico (no funcional) con algunos parámetros podría ser similar al siguiente:

# template.txt
[cluster gridengine]

  [[node scheduler]]
  MachineType = $machine_type

    [[[configuration]]]
    gridengine.slots = $slots

Esta plantilla define dos parámetros: $machine_type y $slots. Con esta plantilla, puede crear archivos de texto que contengan los valores de estos parámetros en los entornos de desarrollo y prod. Puede usar el formato JSON o el formato de archivo de propiedades de Java para el archivo de parámetros:

# dev-params.json
{
  "machine_type": "H16r",
  "slots": 2
}

# prod-params.properties
machine_type = Standard_D4v3
slots = 8

En este ejemplo se crea un archivo JSON que contiene los parámetros para desarrollo y un archivo .properties que contiene los valores de producción.

Nota:

El sufijo del nombre del archivo de parámetros es importante. Si usa JSON, asigne un nombre al archivo foo.json. Si usa propiedades de Java, finalice el nombre de archivo con .properties. Los archivos de parámetros con nombre incorrecto no se importarán correctamente.

Ahora puede importar la plantilla mediante el archivo de parámetros para rellenar las partes que faltan:

cyclecloud import_cluster gridengine-dev -f template.txt -p dev-params.json -c gridengine

cyclecloud import_cluster gridengine-prod -f template.txt -p prod-params.properties -c gridengine

También puede definir algunos o todos los parámetros dentro de la propia plantilla de clúster:

# template.txt
[cluster gridengine]

  [[node scheduler]]
  MachineType = $machine_type

    [[[configuration]]]
    gridengine.slots = $slots

[parameters]
  [[parameter machine_type]]
  DefaultValue = Standard_D4v3

  [[parameter slots]]
  DefaultValue = 2

La plantilla define valores predeterminados para cada parámetro (usamos los valores de desarrollo como valores predeterminados).

Ahora puede importar la plantilla sin un archivo de parámetros y los valores de desarrollo se usan automáticamente. Cuando sea el momento de crear un clúster de prod, use el archivo prod-params.properties para sobrescribir los valores especificados dentro del propio archivo de plantilla.

Nota:

Los nombres de parámetro pueden incluir letras, números y caracteres de subrayado.

Las referencias de parámetros de la plantilla pueden tener una de estas dos formas:

$param: usa el valor de un único parámetro denominado param.

${expr}: Evalúa expr en el contexto de todos los parámetros, lo cual permite calcular valores dinámicos. Por ejemplo:

Attribute = ${(a > b ? a : b) * 100}

Esta expresión toma el mayor de dos parámetros, a y b, y lo multiplica por 100. La expresión se interpreta y evalúa según la especificación del lenguaje ClassAd.

Si existe una referencia de parámetro por sí misma, se usa el valor del parámetro , que admite tipos que no son de cadena, como booleanos, enteros y estructuras anidadas, como listas. Sin embargo, si la referencia está incrustada en otro texto, su valor se convierte e incluye en una cadena. Por ejemplo, supongamos param que se define como 456 y se hace referencia a en dos lugares:

  • Attribute1 = $param
  • Attribute2 = 123$param

El valor de Attribute1 es el número 456, pero el valor de Attribute2 es la cadena "123456". ${param} funciona igual que $param, por lo que puede usarlo para incluir referencias de parámetro en situaciones más complejas:

  • Attribute3 = 123$param789
  • Attribute4 = 123${param}789

Attribute3 busca el parámetro denominado param789, pero Attribute4 usa el valor de param para obtener "123456789".

Tipos de máquina

Azure CycleCloud admite varios tipos de máquina mediante el MachineType atributo . La solución intenta obtener capacidad en el orden de la lista.

Especificaciones de inicialización de clúster

La aplicación web Azure CycleCloud le permite seleccionar las especificaciones del proyecto de inicialización de clúster al crear un nuevo clúster. Configure las especificaciones del proyecto dentro de la plantilla de clúster:

[parameter ClusterInitSpecs]
Label = Cluster-Init
Description = Cluster init specs to apply to nodes
ParameterType = Cloud.ClusterInitSpecs

[cluster demo]

  [[node defaults]]
  AdditionalClusterInitSpecs = $ClusterInitSpecs

      [[[cluster-init myproject:myspec:1.0.0]]]

Después de agregar este parámetro a la plantilla de clúster, puede usar el selector de archivos para seleccionar las especificaciones de proyecto adecuadas al crear un clúster.

Máquinas virtuales Spot

Para reducir el costo de sus cargas de trabajo, establezca Interruptible en true. Esta opción marca la instancia como una máquina virtual de tipo spot y le permite usar capacidad sobrante cuando esté disponible. Tenga en cuenta que estas instancias no siempre están disponibles y se pueden reemplazar en cualquier momento, por lo que es posible que no sean adecuadas para la carga de trabajo.

De forma predeterminada, cuando se establece Interruptible en true, la instancia usa máquinas virtuales de acceso puntual con un precio máximo establecido en -1. Esta configuración significa que la instancia no se elimina debido al precio. El precio de la instancia es el precio actual de las máquinas virtuales puntuales o el precio de una instancia estándar, lo que sea menor, siempre que haya capacidad y cuota disponible. Para establecer un precio máximo personalizado, use el MaxPrice atributo en el nodo o matriz de nodos deseado.

[cluster demo]

  [[nodearray execute]]
  Interruptible = true
  MaxPrice = 0.2

Tablas de búsqueda

Puede hacer que un parámetro haga referencia a otro y calcular un valor específico con una tabla de búsqueda. Por ejemplo, supongamos que tiene un parámetro para seleccionar la imagen a utilizar, con dos opciones en este caso.

[[parameter MachineImage]]
    Label = Image
    DefaultValue = image-1000
    Description = Ubuntu 22.04
    Config.Plugin = pico.control.AutoCompleteDropdown
    [[[list Config.Entries]]]
        Name = image-1000
        Label = Ubuntu 20.04
    [[[list Config.Entries]]]
        Name = image-2000
            Label = Ubuntu 22.04

También puede obtener la versión del sistema operativo de la imagen elegida y usarla para otra configuración haciendo que e un parámetro cuyo valor sea una tabla de búsqueda de valores:

[[parameter AmiLookup]]
  ParameterType = hidden
  [[[record DefaultValue]]]
      image-1000 = Ubuntu 20.04
      image-2000 = Ubuntu 22.04

Este parámetro está oculto, por lo que no aparece en la interfaz de usuario.

Puede obtener la versión del sistema operativo que se usa para la imagen elegida en cualquier otro lugar de la definición del clúster:

[[node node]]
[[[configuration]]]
version = ${AmiLookup[MachineImage]}

Integración de GUI

La definición de parámetros dentro de la plantilla de clúster permite aprovechar las ventajas de la GUI de Azure CycleCloud. Por ejemplo, al definir parámetros, use los siguientes atributos para ayudar a crear la GUI:

# template.txt
[cluster gridengine]

  [[node scheduler]]
  MachineType = $machine_type

    [[[configuration]]]
    gridengine.slots = $slots

[parameters]
  [[parameter machine_type]]
  DefaultValue = Standard_D4v3
  Label = Machine Type
  Description = MachineType to use for the Grid Engine scheduler node
  ParameterType = Cloud.MachineType

  [[parameter slots]]
  DefaultValue = 2
  Description = The number of slots for Grid Engine to report for the node

La GUI incluye los atributos Label y Description , que aparecen en la GUI, así como el atributo ParameterType opcional. El atributo ParameterType permite mostrar elementos de interfaz de usuario personalizados. En el ejemplo anterior, el Cloud.MachineType valor muestra una lista desplegable que contiene todos los tipos de máquina disponibles. Los demás valores ParameterType son:

Tipo de parámetro Descripción
Cloud.MachineType Muestra una lista desplegable que contiene todos los tipos de máquina disponibles.
Credenciales de la Nube Muestra una lista desplegable que contiene todas las credenciales disponibles.
Región de nube Muestra una lista desplegable que contiene todas las regiones disponibles.

Imágenes de usuario personalizadas en plantillas

Azure CycleCloud admite imágenes personalizadas en plantillas. Puede especificar el identificador de imagen (id. de recurso) directamente con ImageIdo puede agregar la imagen al registro de imágenes. Al agregar la imagen al Registro, puede hacer referencia a ella con Image o ImageName en el nodo. La imagen aparece en la lista desplegable de imágenes de la página de creación del clúster.

Las imágenes del registro de imágenes constan de un Package registro que identifica el contenido de la imagen lógica y uno o varios registros correspondientes Artifact que especifican el identificador de imagen real en el proveedor de nube adecuado. Por ejemplo, una imagen personalizada con R instalada en ella podría constar de este registro de paquete:

AdType = "Package"
Name = "r_execute"
Version = "2.1.1"
PackageType = "image"
Label = "R"

Al agregar ese registro, puede especificar la imagen incluyendo Image = R o ImageName = r_execute en la plantilla de clúster.

Si esta imagen existe como una sola máquina virtual en Este de EE. UU. con un identificador de /subscriptions/xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/images/MyCustomImage, debe almacenar el siguiente elemento:

AdType = "Artifact"
Package = "r_execute"
Version = "2.1.1"
Name = "az/useast"
Provider = "az"
ImageId = "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/images/MyCustomImage"

Debe especificar Provider en el artefacto.

Puede agregar tantos artefactos como desee para un paquete de imagen determinado, pero debe incluir todos los artefactos necesarios para usar esa imagen en todas las ubicaciones que desee (una por cuenta de proveedor de nube, regiones, proyectos, etc.). El nombre del artefacto no es importante, excepto que debe ser único para todos los artefactos de un paquete y una versión determinado. Normalmente, se recomienda usar una combinación de la información del proveedor y los detalles específicos, como la región. CycleCloud selecciona automáticamente el artefacto correcto para que coincida con el proveedor y los detalles específicos del proveedor, pero usa el atributo Provider (y Region, etc.) en lugar de analizar el nombre.

Si agrega más de un paquete de imagen con el mismo nombre, cada paquete debe tener un número de versión diferente. Al iniciar una instancia, CycleCloud selecciona automáticamente la imagen con el número de versión más alto. Trata el número de versión como una cadena de puntos y compara cada parte como un número. Para invalidar este comportamiento, especifique ImageVersion en el nodo como un número de versión literal (por ejemplo, 1.2) o un número de versión comodín (por ejemplo, 1.x).