Compartir a través de


Plantillas de clúster

Azure CycleCloud usa plantillas para definir configuraciones de clúster. Una serie de plantillas se incluyen en CycleCloud de forma predeterminada y hay disponible una lista completa de plantillas admitidas en GitHub. Puede crear nuevas plantillas o personalizar las existentes. Por ejemplo, puede que quiera personalizar una plantilla existente para aprovechar las ventajas de las máquinas virtuales de Spot, o puede que quiera agregar una VPC para ampliar su propia red.

Notación de configuración

Todas las plantillas de clúster de Azure CycleCloud tienen la opción de tener una o varias secciones [[[configuración]]] que pertenecen a un nodo o a nodearray. En estas secciones se especifican opciones de configuración de software sobre los nodos iniciados por CycleCloud. La notación de puntos se usa 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 especificar una sección de configuración utilizando notación prefix para 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

Un elemento node/nodearray 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 modifican los valores de determinadas partes de un clúster sin tener que modificar la propia plantilla. Esto resulta especialmente útil en los casos en los que se desean muchos clústeres similares con pequeñas diferencias, como la implementación de entornos de desarrollo y producción. La sintaxis para especificar un parámetro dentro de una plantilla de clúster es prefijar 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 definir archivos de texto que contengan los valores de los parámetros en los entornos de desarrollo y prod. El archivo de parámetros puede estar en formato JSON o en un formato de archivo de propiedades de Java:

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

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

Esto creará un archivo JSON que contiene los parámetros de 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, el archivo debe tener el nombre foo.json. Si usa propiedades de Java, el archivo debe terminar 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 es posible 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

Los valores predeterminados de cada parámetro se definen dentro de la plantilla (usamos los valores "dev" como valores predeterminados).

Ahora es posible importar la plantilla sin un archivo de parámetros y los valores de "desarrollo" se usarán automáticamente. Cuando es el momento de crear un clúster "prod", puede usar 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}

Esto tomaría el mayor de dos parámetros, a y b, y lo multiplicaría 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 sería el número 456, pero el valor de Attribute2 sería la cadena "123456". Tenga en cuenta que ${param} es idéntico a $param, que permite insertar referencias de parámetros en situaciones más complejas:

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

Attribute3 buscaría el parámetro denominado param789, pero Attribute4 usaría el valor de param para obtener "123456789".

Tipos de máquinas

Azure CycleCloud admite varios tipos de máquina mediante el MachineType atributo . Intentará adquirir capacidad en el orden indicado.

Especificaciones de inicialización de clúster

La aplicación web Azure CycleCloud permite a los usuarios seleccionar las especificaciones del proyecto cluster-init al crear un nuevo clúster. Las especificaciones del proyecto se configuran 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]]]

Una vez agregado este parámetro a la plantilla de clúster, el usuario puede usar el selector de archivos para seleccionar las especificaciones de proyecto adecuadas al crear un clúster.

Spot Virtual Machines

Para reducir el costo de las cargas de trabajo, puede establecer Interruptible = true. Esto marcará la instancia como Spot y usará capacidad sobrante cuando esté disponible. Es importante tener en cuenta que estas instancias no siempre están disponibles y se pueden adelantar en cualquier momento, lo que significa que no siempre son adecuadas para la carga de trabajo.

De forma predeterminada, establecer Interruptible en true usará instancias de spot con un precio máximo establecido en -1; esto significa que la instancia no se expulsará en función del precio. El precio de la instancia será el precio actual de Spot o el precio de una instancia estándar, lo que sea menor, siempre que haya capacidad y cuota disponible. Si desea establecer un precio máximo personalizado, use el atributo MaxPrice en el nodo deseado o nodearray.

[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

Tenga en cuenta que esto está oculto para que no aparezca 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 la GUI de Azure CycleCloud. Por ejemplo, al definir parámetros, se pueden usar los atributos siguientes para ayudar en la creación de 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

Los atributos "Label" y "Description" se incluyen, que aparecerán en la GUI, así como en el atributo opcional "ParameterType". "ParameterType" permite mostrar elementos de interfaz de usuario personalizados. En el ejemplo anterior, el valor "Cloud.MachineType" mostrará 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.

Compatibilidad con Chef Server

Azure CycleCloud admite ChefServer.

Cree el archivo chefserver.json y agregue sus credenciales. ValidationKey corresponde al archivo validation.pem del servidor chef. También debe demostrar si validation_client_name lo ha cambiado del valor predeterminado de "chef-validator":

{
"AdType" : "Cloud.Locker",
"ValidationKey" : "YOURVALIDATION.PEMHERE",
"ValidationClientName" : "chef-validator",
"Credentials" : "default",
"Location" : "https://mychefserver",
"ChefRepoType" : "chefserver",
"LockerType" : "chefrepo",
"Name" : "chefrepo",
"AccountId" : "default",
"Shared" : false
}

A continuación, coloque el archivo en el directorio /opt/cycle_server/config/data. Se importará automáticamente.

Imágenes de usuario personalizadas en plantillas

Azure CycleCloud admite imágenes personalizadas en plantillas. Especifique el identificador de imagen (id. de recurso) directamente con ImageIdo agregue la imagen al registro de imágenes. Cuando la imagen se encuentra en el Registro, haga referencia a ella con Image o ImageName en el nodo. Aparecerá 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"

Una vez que agregue ese registro, puede especificar esa imagen incluyendo Image = R o ImageName = r_execute en la plantilla de clúster.

Si esta imagen existía como una sola máquina virtual en useast con un identificador de /subscriptions/xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/images/MyCustomImage, tendría que tener almacenado el siguiente artefacto:

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 concretos. Normalmente se recomienda usar una combinación del proveedor y de los detalles específicos del proveedor (por ejemplo, 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 imágenes con el mismo nombre, deben tener números de versión diferentes. Al iniciar una instancia, CycleCloud seleccionará automáticamente la imagen con el número de versión más alto, tratando el número de versión como una cadena de puntos y comparando cada parte como un número. Para anular esto, especifique ImageVersion en el nodo como literal (por ejemplo, 1.2) o como comodín (1.x).