Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Un proyecto es una colección de recursos que definen configuraciones de nodo. Los proyectos contienen especificaciones. Cuando se inicia un nodo, procesa y ejecuta una secuencia de especificaciones para configurar el nodo.
Azure CycleCloud usa proyectos para administrar aplicaciones agrupadas, como planificadores de ejecución por lotes. En el clúster HPCPack en CycleCloud, el proyecto usa las especificaciones hn y cn para definir las configuraciones y recetas para el nodo principal y el nodo de cómputo de HPCPack.
En la siguiente definición de nodo parcial, el nodo docker-registry ejecuta tres especificaciones: las especificaciones bind del Proyecto Okta versión 1.3.0 y core y registry del Proyecto Docker versión 2.0.0.
[[node docker-registry]]
Locker = base-storage
[[[cluster-init okta:bind:1.3.0]]]
[[[cluster-init docker:core:2.0.0]]]
[[[cluster-init docker:registry:2.0.0]]]
La etiqueta final es el número de versión del proyecto:
[[[cluster-init <project>:<spec>:<project version>]]]
Una caja de seguridad es una referencia a un contenedor de la cuenta de almacenamiento y su credencial. Los nodos tienen una caja de seguridad predeterminada, por lo que no siempre es necesario especificar este atributo.
Azure CycleCloud usa una abreviatura para las cuentas de almacenamiento. Por ejemplo, puede escribir https://mystorage.blob.core.windows.net/mycontainer como az://mystorage/mycontainer.
Si se define un proyecto en un nodo pero no existe en la ubicación de almacenamiento esperada, el nodo informa de un Software Installation Failure a CycleCloud.
CycleCloud tiene proyectos internos que se ejecutan de forma predeterminada en todos los nodos para realizar un volumen especial y controlar la red y configurar la comunicación con CycleCloud. El sistema refleja automáticamente estos proyectos internos en la caja de seguridad.
Usted es responsable de reflejar cualquier proyecto extra en la taquilla. La CLI de CycleCloud ofrece métodos para crear proyectos:
cyclecloud project init myproject
Además, los proyectos reflejados en las taquillas:
cyclecloud project init mylocker
Las especificaciones constan de scripts de Python, shell o PowerShell.
Crear un nuevo proyecto
Para crear un nuevo proyecto, use el comando cyclecloud project init myproject de la CLI donde myproject es el nombre del proyecto que desea crear.
myproject tiene una default especificación que puede cambiar. El comando crea el árbol de directorios con archivos plantilla que usted actualiza con su propia información.
Estructura de directorios
El comando del proyecto crea los directorios siguientes:
myproject
├── project.ini
├── blobs
├── templates
├── specs
│ ├── default
│ └── cluster-init
│ ├── scripts
│ ├── files
│ └── tests
El directorio templates contiene las plantillas de clúster, mientras que las especificaciones contienen las especificaciones que definen el proyecto. El directorio de especificaciones tiene un subdirectorio denominado cluster-init (pero consulte también Orquestación de Chef). El directorio cluster-init contiene directorios con significados especiales, incluido el directorio scripts (que contiene scripts que se ejecutan en orden lexicográfico en el nodo), archivos (que contienen archivos de datos sin procesar que van en el nodo) y pruebas (que contienen pruebas que se ejecutan al iniciar un clúster en modo de prueba).
project.ini
project.ini es el archivo que contiene todos los metadatos del proyecto. Puede contener:
| Parámetro | Descripción |
|---|---|
| nombre | Nombre del proyecto. Use guiones para separar palabras, como order-66-2018. |
| etiqueta | Nombre del proyecto. Usar un nombre de clúster largo con espacios para propósitos de visualización. |
| tipo | Tres opciones: scheduler, applicationo <blank>. Este parámetro determina el tipo de proyecto y genera la plantilla adecuada. Predeterminado: application. |
| version | Formato: x.x. |
Armarios
El contenido del proyecto se almacena dentro de una caja de seguridad. Puede cargar el contenido del proyecto en cualquier caja de seguridad definida en la instalación de CycleCloud ejecutando el comando cyclecloud project upload (locker), donde (locker) es el nombre de una caja de seguridad de almacenamiento en la nube en la instalación de CycleCloud. Este almacén es el destino predeterminado. Como alternativa, puede ejecutar el comando cyclecloud locker list para ver qué lockers están disponibles para usted. Puede ver detalles sobre un casillero específico con cyclecloud locker show (locker).
Si agrega más de un locker, puede establecer el locker predeterminado con cyclecloud project default_target (locker), y luego ejecutar cyclecloud project upload. También puede establecer un contenedor predeterminado global para que los proyectos compartan mediante la ejecución del comando cyclecloud project default locker (locker) -global.
Nota:
Los casilleros predeterminados se almacenan en el archivo de configuración de CycleCloud, ubicado en ~/.cycle/config.ini y no en el archivo deproject.ini . Esta configuración permite el control de versiones para project.ini.
Al cargar el contenido del proyecto, CycleCloud sincroniza el contenido de cluster-init con el almacen de destino, en projects/(project)/(version)/(spec_name)/cluster-init.
Descarga de blobs
Use project download para descargar todos los blobs a los que se hace referencia en project.ini al directorio de blobs locales. El comando usa el parámetro [locker] e intenta descargar blobs listados en project.ini desde el depósito al almacenamiento local. Si el comando no encuentra los archivos, devuelve un error.
Configuración del proyecto
Especificaciones
Al crear un nuevo proyecto, defina una default especificación. Use el cyclecloud project add_spec comando para agregar más especificaciones al proyecto.
Control de versiones
De forma predeterminada, todos los proyectos usan la versión 1.0.0. Establezca una versión personalizada a medida que desarrolle e implemente proyectos estableciendo version=x.y.z en el archivo project.ini .
Por ejemplo, si el locker_url es az://my-account/my-container/projects, el nombre del proyecto es "Order66", la versión es 1.6.9 y la especificación es default, la dirección URL es:
az://my-account/my-container/projects/Order66/1.6.9/default
Datos BLOB
Hay dos tipos de blobs: blobs de proyecto y blobs de usuario.
Blobs de proyectos
Los autores de proyectos proporcionan blobs de proyecto, que son archivos binarios que pueden distribuir (por ejemplo, archivos binarios para un proyecto de código abierto que alguien puede redistribuir legalmente). Los blobs se almacenan en el blobs directorio de un proyecto y están ubicados en /project/blobs cuando se cargan en un locker.
Para agregar blobs a los proyectos, agregue los archivos a project.ini:
[[blobs optionalname]]
Files = projectblob1.tgz, projectblob2.tgz, projectblob3.tgz
Separe múltiples objetos de datos con una coma. También puede especificar la ruta de acceso relativa al directorio de blobs del proyecto.
Blobs de usuario
Los blobs de usuario son archivos binarios, como archivos binarios de Univa Grid Engine, que el autor del proyecto no puede redistribuir legalmente. Estos archivos no se empaquetan con el proyecto. Debe almacenarlos manualmente en el almacén. Los archivos se encuentran en /blobs/my-project/ en el locker (por ejemplo, /blobs/my-project/my-blob.tgz). No es necesario definir blobs de usuario en project.ini.
Para descargar cualquier blob, use el jetpack download comando . CycleCloud busca primero el blob de usuario y usa el blob de nivel de proyecto si no encuentra el archivo.
Nota:
Un blob de usuario puede invalidar un blob de proyecto si tienen el mismo nombre.
Especificar proyectos dentro de una plantilla de clúster
Las especificaciones se definen en la plantilla de clúster mediante la [[[cluster-init]]]sección de un nodo:
[[node defaults]]
[[[cluster-init my-project:common:1.0.0]]]
[[node scheduler]]
[[[cluster-init my-project:scheduler:1.0.0]]]
[[nodearray execute]]
[[[cluster-init my-project:execute:1.0.0]]]
En este ejemplo se aprovecha la definición de nodo defaults de la cual heredan todos los nodos.
El nodo del planificador obtiene tanto common como scheduler especificaciones, y los nodos de la matriz de nodos de ejecución obtienen tanto common como execute especificaciones.
Ubicaciones de archivo
El nodo descarga los archivos cluster-init en /mnt/cluster-init/(project)/(spec)/. Para my-project y my-spec, los scripts, los archivos y las pruebas se encuentran en /mnt/cluster-init/my-project/my-spec.
Sincronizar proyectos
Puede sincronizar proyectos de CycleCloud desde reflejos en el almacenamiento en la nube local del clúster. Establezca un SourceLocker atributo en una [cluster-init] sección dentro de la plantilla. El nombre del casillero que especifique es el origen del proyecto, y los contenidos se sincronizan con su casillero cuando se inicia el clúster. También puede usar el nombre de la caja de seguridad como la primera parte del nombre de cluster-init. Por ejemplo, si el casillero de origen es cyclecloud, las dos definiciones siguientes son las mismas:
[cluster-init my-project:my-spect:1.2.3]
SourceLocker=cyclecloud
[cluster-init cyclecloud/my-proect:my-spec:1.2.3]
Almacenamiento de archivos grande
Los proyectos admiten archivos grandes. En el nivel superior de un proyecto recién creado, verá un directorio blobs para los archivos grandes (blobs). Los blobs que coloque en este directorio sirven para un propósito específico y actúan de forma diferente a los elementos del files directorio.
Los elementos del blobs directorio actúan independientemente de las especificaciones y versiones. Puede compartir cualquier cosa en blobs entre especificaciones o versiones de proyecto. Por ejemplo, puede almacenar un instalador para un programa que cambie con poca frecuencia en los blobs y hacer referencia a él dentro de project.ini. A medida que iteras en las versiones de tu proyecto, ese único archivo se mantiene igual y se copia una vez en el almacenamiento en la nube, lo que ahorra en los costos de transferencia y almacenamiento.
Para agregar un blob, coloque un archivo en el blobs directorio y edite el project.ini para hacer referencia a ese archivo:
[blobs]
Files=big_file1.tgz
Cuando se usa el project upload comando , transfiere todos los blobs a los que se hace referencia en project.ini al almacenamiento en la nube.
Archivos de registro
Los archivos de registro generados al ejecutar cluster-init se encuentran en $JETPACK_HOME/logs/cluster-init/(project)/(spec).
Ejecución de archivos
Cuando un script de cluster-init se ejecuta correctamente, coloca un archivo en /mnt/cluster-init/.run/(project)/(spec) para asegurarse de que el script no se ejecute de nuevo en una convergencia posterior. Para volver a ejecutar el script, elimine el archivo adecuado en este directorio.
Directorios de scripts
Cuando CycleCloud ejecuta scripts en el scripts directorio, agrega variables de entorno a la ruta de acceso y al nombre de los directorios spec y project.
CYCLECLOUD_PROJECT_NAME
CYCLECLOUD_PROJECT_PATH
CYCLECLOUD_SPEC_NAME
CYCLECLOUD_SPEC_PATH
En Linux, un proyecto denominado test-project con una especificación de default tiene las siguientes rutas de acceso:
CYCLECLOUD_PROJECT_NAME = test-project
CYCLECLOUD_PROJECT_PATH = /mnt/cluster-init/test-project
CYCLECLOUD_SPEC_NAME = default
CYCLECLOUD_SPEC_PATH = /mnt/cluster-init/test-project/default
Ejecución solo de scripts
Para ejecutar solo scripts cluster-init, use el siguiente comando:
jetpack converge --cluster-init
El comando envía su salida a STDOUT y a jetpack.log. La salida de cada script también se registra en:
$JETPACK_HOME/logs/cluster-init/(project)/(spec)/scripts/(script.sh).out
Descargar Jetpack
Para descargar un blob dentro de un script cluster-init, use el comando jetpack download (filename) para extraerlo del blobs directorio. Ejecutar este comando desde un script cluster-init le permite determinar el proyecto y la dirección URL base automáticamente. Para usarlo en un contexto que no sea cluster-init, debe especificar el proyecto. Para obtener más información, use la --help opción .