Crea un clúster de Grid Engine con Elasticluster

Si tienes herramientas existentes que utilizan Grid Engine para ejecutar tareas en los clústeres de procesamiento de Elasticluster, sigue este instructivo a fin de crear un entorno similar para ejecutar esas tareas en Google Cloud.

Objetivos

Después de completar el instructivo, sabrás cómo realizar las siguientes actividades:

  • Habilitar Elasticluster para acceder a tu proyecto de Google Cloud
  • Utilizar Elasticluster para crear un clúster de VM de Compute Engine que ejecuten Grid Engine
  • Copiar archivos en el clúster y conectarte con las instancias de clústeres

Costos

En este instructivo, se usan componentes facturables de Google Cloud, que incluyen los siguientes:

  • Compute Engine
  • Cloud Storage

Usa la calculadora de precios para generar una estimación de los costos según el uso previsto. Los usuarios nuevos de Cloud Platform pueden ser aptos para una prueba gratuita.

Antes de comenzar

  1. Accede a tu Cuenta de Google.

    Si todavía no tienes una cuenta, regístrate para obtener una nueva.

  2. En la página Selector de proyectos de Cloud Console, selecciona o crea un proyecto de Cloud.

    Ir a la página Selector de proyectos

  3. Comprueba que la facturación esté habilitada en tu proyecto.

    Descubre cómo puedes habilitar la facturación

  4. Habilita la API de Compute Engine.

    Habilita la API

  5. Instala e inicializa el SDK de Cloud.

Cómo configurar tu entorno local

Si todavía no instalaste Elasticluster en tu máquina local, sigue los pasos que se detallan a continuación:

Requisitos previos a la instalación

  1. Instala Python 2.7.

    Se requiere Python 2.7 para ejecutar Elasticluster. Para obtener más información sobre cómo configurar el entorno de desarrollo de Python como, por ejemplo, la instalación de pip en tu sistema, consulta la Guía de configuración del entorno de desarrollo de Python.

  2. Si no tienes virtualenv, instálalo con pip:

    pip install virtualenv
    

    Te recomendamos instalar Elasticluster en un virtualenv de Python. El virtualenv mantiene a Elasticluster y sus dependencias de Python separadas del resto del entorno de Python, a fin de que las actualizaciones en tu entorno de Python no generen errores en Elasticluster.

Instala Elasticluster

  1. Ejecuta virtualenv para crear un entorno aislado de Python llamado elasticluster. Luego, configura tu directorio actual:

    virtualenv elasticluster
    source elasticluster/bin/activate
    cd elasticluster
    
  2. En el virtualenv del directorio elasticluster creado en el paso anterior, clona el repositorio de Elasticluster GitHub y, luego, instala las dependencias:

    git clone git://github.com/gc3-uzh-ch/elasticluster.git src
    cd src
    pip install -e .
    pip install oauth2client
    
  3. Verifica que Elasticluster se haya instalado correctamente. Cuando ejecutas este comando, se genera un archivo ~/.elasticluster/config, y es posible que se muestren varios errores y advertencias, pero los puedes ignorar sin problema.

    elasticluster list-templates
    

Permite que Elasticluster acceda a tu proyecto de Google Cloud

Sigue los pasos que se presentan a continuación para habilitar Elasticluster y acceder a los recursos de tu proyecto de Google Cloud y crear clústeres de VM de Compute Engine. Completa estos pasos en tu máquina local.

Obtén tu ID de cliente y secreto del cliente

  1. Ve a la página Credenciales.
    Ir a la página Credenciales
  2. Selecciona tu proyecto de Google Cloud.
  3. Haz clic en Crear credenciales y selecciona ID de cliente de OAuth.

  4. En Tipo de aplicación, selecciona Otro, agrega un Nombre y haz clic en Crear.

  5. En la ventana del Cliente OAuth que aparece a continuación, toma nota del ID de cliente y del secreto del cliente. Los usarás en el archivo de configuración de Elasticluster.

  6. En la ventana Credenciales, podrás ver tus nuevas credenciales en Otros junto con el ID de cliente principal que se utiliza para acceder a tu solicitud.

Genera un par de llaves SSH

Elasticluster necesita un par de llaves SSH para conectarse a Google Cloud y para iniciar las VM de Compute Engine. Si aún no te conectaste a una instancia de Compute Engine con el comando gcloud compute ssh, ingresa lo siguiente:

gcloud compute config-ssh

Cuando se complete el proceso, verás el siguiente par de llaves en tu máquina:

~/.ssh/google_compute_engine
~/.ssh/google_compute_engine.pub

Selecciona una imagen de disco para las VM de tu clúster

Para iniciar las VM de Compute Engine, tu configuración de Elasticluster debe especificar una de las imágenes Debian disponibles en Compute Engine. Ejecuta el siguiente comando y anota el nombre de la imagen de disco que se muestra:

gcloud compute images list | grep debian | cut -f 1 -d " "

Si se muestran diferentes imágenes de disco, selecciona la primera de la lista. En el siguiente resultado de ejemplo, seleccionarías la imagen resaltada:

debian-8-jessie-v20180611
debian-9-stretch-v20180611

Configura Elasticluster

Abre el archivo ~/.elasticluster/config y borra todo su contenido. A continuación, copia el siguiente texto, sustituye las variantes relevantes y guarda el archivo.

# Grid Engine software to be configured by Ansible
[setup/gridengine]
provider=ansible
frontend_groups=gridengine_master
compute_groups=gridengine_worker

# Create a cloud provider called "google-cloud"
[cloud/google-cloud]
provider=google
gce_project_id=PROJECT_ID
gce_client_id=CLIENT_ID
gce_client_secret=SECRET_KEY

# Create a login called "google-login"
[login/google-login]
image_user=GOOGLE_USER_ID (just the user ID, not the full email address)
image_user_sudo=root
image_sudo=True
user_key_name=elasticluster
user_key_private=~/.ssh/google_compute_engine
user_key_public=~/.ssh/google_compute_engine.pub

# Bring all of the elements together to define a cluster called "gridengine"
[cluster/gridengine]
cloud=google-cloud
login=google-login
setup=gridengine
security_group=default
image_id=IMAGE
flavor=n1-standard-1
frontend_nodes=1
compute_nodes=3
image_userdata=
ssh_to=frontend

Para obtener más información sobre el archivo de configuración de Elasticluster, consulta la documentación sobre Elasticluster.

Cómo ejecutar un clúster de las VM de Compute Engine

En los siguientes pasos se muestra cómo iniciar un clúster, interactuar con este y cómo detenerlo.

Completa estos pasos en tu máquina local. La primera vez que inicies un clúster, deberás autorizar a Elasticluster a emitir solicitudes a la API de Compute Engine en tu nombre. El flujo de autorización inicia un navegador web en la misma máquina desde la que iniciaste el clúster.

Si necesitas ejecutar Elasticluster en una máquina remota o en algún otro entorno que no pueda abrir un navegador web, antes de iniciar el clúster, edita ~/.elasticluster/config y agrega noauth_local_webserver=true a la sección cloud/google-cloud:

# Create a cloud provider
[cloud/google-cloud]
provider=google
noauth_local_webserver=true

Iniciar un clúster

Ejecuta el siguiente comando para iniciar el clúster:

elasticluster start gridengine

El proceso puede tardar varios minutos en completarse. Una vez iniciado el clúster, se imprime el siguiente mensaje en la consola:

Your cluster `gridengine` is ready!

Cluster name:     gridengine
Cluster template: gridengine
Default ssh to node: frontend001
- frontend nodes: 1
- compute nodes: 4

To login on the frontend node, run the command:

    elasticluster ssh gridengine

To upload or download files to the cluster, use the command:

    elasticluster sftp gridengine

Para obtener un resultado detallado, usa la marca -v:

elasticluster start gridengine -v

Obtén una lista de las instancias de clústeres

Para obtener una lista de las instancias en tu clúster, ejecuta el siguiente comando:

elasticluster list-nodes gridengine

Aparecerá un mensaje similar al que figura a continuación:

Cluster name:     gridengine
Cluster template: gridengine
Default ssh to node: frontend001
- frontend nodes: 1
- compute nodes: 4

To login on the frontend node, run the command:

    elasticluster ssh gridengine

To upload or download files to the cluster, use the command:

    elasticluster sftp gridengine

frontend nodes:

  - frontend001
    connection IP: 203.0.113.1
    IPs:    203.0.113.1
    instance id:   gridengine-frontend001
    instance flavor: n1-standard-1

compute nodes:

  - compute001
    connection IP: 198.51.100.1
    IPs:    198.51.100.1
    instance id:   gridengine-compute001
    instance flavor: n1-standard-1

...

Copia archivos en instancias de clústeres

Puedes usar el comando sftp de Elasticluster para abrir una sesión de SFTP al nodo de frontend del clúster. Esto te permite subir o descargar archivos hacia y desde el clúster. Si necesitas más información sobre el uso de SFTP con Elasticluster, consulta la documentación de Elasticluster. Para abrir una sesión de SFTP, ejecuta el siguiente comando:

elasticluster sftp gridengine

Puedes utilizar este documento para enviar una lista de comandos a SFTP:

elasticluster sftp gridengine << 'EOF'
put *.sh
EOF

Para obtener más información acerca de SFTP, consulta la página de detalles de SFTP.

Cómo conectarse a instancias de clústeres

Con Elasticluster, puedes utilizar SSH para conectarte con cualquiera de los nodos de tu clúster. Si ejecutas elasticluster ssh gridengine sin especificar un nodo, Elasticluster se conecta automáticamente al nodo frontend:

elasticluster ssh gridengine

Para conectarte a otros nodos del clúster, agrega la marca -n y especifica el nombre del nodo:

elasticluster ssh gridengine -n NODE_NAME

Por ejemplo, para conectarse al nodo compute001 de los resultados de Obtén una lista de instancias de clústeres, ejecuta el siguiente comando:

elasticluster ssh gridengine -n compute001

Sal de virtualenv

Para salir de virtualenv, ejecuta el comando deactivate desde la línea de comandos:

deactivate

Para volver a usar los comandos de Elasticluster, vuelve a activar virtualenv con el comando source elasticluster/bin/activate.

Limpieza

Después de completar este instructivo, puedes limpiar los recursos que creaste en Google Cloud para que no se facturen en el futuro. En las siguientes secciones, se describe cómo borrarlos o desactivarlos.

Destruye el clúster

Para detener el clúster y desactivar todas las instancias de clústeres, ejecuta el siguiente comando:

elasticluster stop gridengine

Este comando muestra un aviso que te preguntará si realmente deseas detener el clúster. Para detener el clúster sin que aparezca el aviso, agrega la marca --yes al comando:

elasticluster stop --yes gridengine

Borra el proyecto

La manera más fácil de eliminar la facturación es borrar el proyecto que utilizaste para el instructivo.

Para borrar el proyecto, haz lo siguiente:

  1. En Cloud Console, ve a la página Proyectos.

    Ir a la página Proyectos

  2. En la lista de proyectos, selecciona el que quieres borrar y haz clic en Borrar proyecto (Delete project. Después de seleccionar la casilla de verificación ubicada junto al nombre del proyecto, haz clic en Borrar proyecto
  3. En el cuadro de diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

Qué sigue

  • Consulta la bifurcación de Elasticluster de Cloud Life Sciences. Esta bifurcación proporciona correcciones de errores y mejoras relevantes para los casos prácticos de Google Cloud.