¿Cómo preparo MAAS para servir imágenes en OpenStack?

Tengo Openstack listo con MAAS , ¿cómo preparo la nube con imágenes de Ubuntu para poder implementarla con Juju?

Preparando MAAS para Juju y OpenStack usando Simplestreams

Cuando Juju arranca una nube, necesita dos datos críticos:

  1. El uuid de la imagen que se utilizará al iniciar nuevas instancias de proceso.
  2. La URL desde la cual se descarga la versión correcta de un tarball de herramientas.

Esta información necesaria se almacena en un formato de metadatos json llamado “simplestreams”. Para los servicios de nube pública admitidos, como Amazon Web Services, HP Cloud, Azure, etc., el usuario final no requiere ninguna acción. Sin embargo, aquellos que configuran una nube privada, o que quieren cambiar cómo funcionan las cosas (por ejemplo, usar una imagen de Ubuntu diferente), pueden crear sus propios metadatos, después de comprender un poco cómo funciona.

El formato de flujo simple se utiliza para describir elementos relacionados de una manera estructural. Ver el proyecto Launchpad lp: simplestreams . A continuación, analizaremos cómo Juju determina qué metadatos usar y cómo crear sus propias imágenes y herramientas, y hacer que Juju las use en lugar de los valores predeterminados.

Flujo de trabajo básico

Ya sean imágenes o herramientas, Juju usa una ruta de búsqueda para tratar de encontrar los metadatos adecuados. Los componentes de la ruta (en orden de búsqueda) son:

  1. Ubicación provista por el usuario (especificada por las opciones de configuración de tools-metadata-url o image-metadata-url ).
  2. El almacenamiento en la nube del entorno.
  3. Ubicaciones específicas del proveedor (p. Ej., Punto final clave si está en Openstack).
  4. Una ubicación web con metadatos para nubes públicas admitidas – https://streams.canonical.com

Los metadatos pueden estar firmados en línea o sin firmar. Indicamos que un archivo de metadatos está firmado mediante la extensión ‘.sjson’. En cada ubicación de la ruta se buscan primero metadatos firmados y, si no se encuentra ninguno, se intentan los metadatos no firmados antes de pasar a la siguiente ubicación de ruta.

Juju se entrega con claves públicas que se utilizan para validar la integridad de los metadatos de imágenes y herramientas obtenidos de https://streams.canonical.com . Por lo tanto, fuera de la caja, Juju “solo trabajará” con cualquier nube pública compatible, utilizando metadatos firmados. La configuración de metadatos para una nube privada (por ejemplo, Openstack) requiere que se generen metadatos utilizando herramientas que se envían con Juju.

Contenidos de metadatos de imágenes

Los metadatos de imagen utilizan un tipo de contenido de flujo simple de “ID de imagen”. La identificación del producto se forma de la siguiente manera:

 com.ubuntu.cloud:server:: 

Por ejemplo:

 com.ubuntu.cloud:server:14.04:amd64 

Las imágenes no publicadas (p. Ej., Beta, diaria, etc.) tienen identificadores de producto como:

 com.ubuntu.cloud.daily:server:13.10:amd64 

El índice de metadatos y los archivos del producto deben estar en el siguiente árbol de directorios (en relación con la URL asociada con cada componente de la ruta):

  |-streams |-v1 |-index.(s)json |-product-foo.(s)json |-product-bar.(s)json 

El archivo de índice debe llamarse “index. (S) json” (sjson para firmado). Los distintos archivos de productos se nombran de acuerdo con los valores de Ruta contenidos en el archivo de índice.

Los metadatos de herramientas utilizan un tipo de contenido de flujo simple de “descarga de contenido”. La identificación del producto se forma de la siguiente manera:

 "com.ubuntu.juju::" 

Por ejemplo:

 "com.ubuntu.juju:12.04:amd64" 

El índice de metadatos y los archivos del producto deben estar en el siguiente árbol de directorios (en relación con la URL asociada con cada componente de la ruta). Además, también se esperan herramientas tarballs que Juju necesita descargar.

  |-streams | |-v1 | |-index.(s)json | |-product-foo.(s)json | |-product-bar.(s)json | |-releases |-tools-abc.tar.gz |-tools-def.tar.gz |-tools-xyz.tar.gz 

El archivo de índice debe llamarse “index. (S) json” (sjson para firmado). El archivo del producto y los nombres de las herramientas de tarball coinciden con lo que se encuentra en los archivos de índice / producto.

Configuración

Para nubes públicas soportadas, no se requiere configuración adicional; las cosas funcionan fuera de la caja Sin embargo, para propósitos de prueba o para implementaciones en la nube no compatibles, Juju necesita saber dónde encontrar las herramientas y qué imagen ejecutar. Incluso para las nubes públicas compatibles donde todos los metadatos necesarios están disponibles, el usuario puede colocar sus propios metadatos en la ruta de búsqueda para anular lo que proporciona la nube.

URLs especificadas por el usuario

Estos se especifican inicialmente en el archivo .juju/environments.yaml (y luego se copian en el archivo jenv cuando el entorno es bootstrapped). Para imágenes, use image-metadata-url ; Para herramientas, use tools-metadata-url . Las URL pueden apuntar a un contenedor / cubo legible para todo el mundo en la nube, a una dirección servida por un servidor http o incluso a un directorio compartido al que pueden acceder todas las instancias de nodo que se ejecutan en la nube.

Suponga un servidor http de Apache con URL base https://juju-metadata , que proporciona acceso a la información en /images y /tools . El archivo yaml del entorno Juju podría tener las siguientes entradas (una o ambas):

 tools-metadata-url: https://juju-metadata/tools image-metadata-url: https://juju-metadata/images 

Los archivos requeridos en cada ubicación son según el diseño del directorio descrito anteriormente. Para un directorio compartido, use una URL del file:///sharedpath formulario file:///sharedpath .

Almacenamiento en la nube

Si no se encuentran metadatos coincidentes en la URL especificada por el usuario, se busca el almacenamiento en la nube del entorno. No se requiere configuración de usuario aquí: todos los entornos Juju están configurados con almacenamiento en la nube que se utiliza para almacenar información de estado, accesos, etc. La configuración del almacenamiento en la nube depende del proveedor; para las nubes de Amazon y Openstack, el almacenamiento se define por el valor “control-bucket”, para Azure, el valor de “nombre-cuenta-almacenamiento” es relevante.

La estructura de directorio (opcional) dentro del almacenamiento en la nube es la siguiente:

  |-tools | |-streams | |-v1 | |-releases | |-images |-streams |-v1 

Por supuesto, si solo se requieren metadatos de imagen personalizados, el directorio de herramientas no será necesario, y viceversa.

Tenga en cuenta que si juju bootstrap se ejecuta con la opción --upload-tools , las herramientas y los metadatos se colocan de acuerdo con la estructura anterior. Es por eso que las herramientas están disponibles para que Juju las use.

Almacenamiento específico del proveedor

Los proveedores pueden permitir ubicaciones adicionales para buscar metadatos y herramientas. Para OpenStack, los puntos finales de Keystone pueden ser creados por el administrador de la nube. Estos se definen como sigue:

juju-tools el valor descrito anteriormente en Herramientas Metadatos Contenidoproduct-streams el valor tal como se describe anteriormente en Imagen Metadata Contents

Otros proveedores también pueden especificar ubicaciones, aunque la implementación variará.

Esta es la ubicación predeterminada que se utiliza para buscar metadatos de imágenes y herramientas y se usa si no se encuentran coincidencias anteriormente en ninguna de las ubicaciones anteriores. No se requiere configuración de usuario.

Hay dos problemas principales al implementar una nube privada:

  1. Las identificaciones de imágenes serán específicas de la nube.
  2. A menudo, el acceso externo a internet está bloqueado

El problema 1 significa que los metadatos de ID de imagen deben generarse y ponerse a disposición.

El problema 2 significa que las herramientas deben reflejarse localmente para que sean accesibles.

Las herramientas de Juju existen para ayudar a generar y validar metadatos de imágenes y herramientas. Para las herramientas, a menudo es más fácil simplemente reflejar https://streams.canonical.com/tools . Sin embargo, los metadatos de imágenes no se pueden reflejar simplemente porque las identificaciones de imágenes se toman del proveedor de almacenamiento en la nube, por lo que es necesario generarlas y validarlas con los comandos que se describen a continuación.

Las herramientas de metadatos Juju disponibles se pueden ver usando el comando de ayuda:

 juju help metadata 

El flujo de trabajo general es:

  • Generar metadatos de imagen.
  • Copie los metadatos de la imagen en algún lugar de la ruta de búsqueda de metadatos
  • Opcionalmente, refleje las herramientas en algún lugar de la ruta de búsqueda de metadatos.
  • Opcionalmente, configure tools-metadata-url y /-image-metadata-url

Metadatos de imagen

Generar metadatos de imágenes usando

 juju metadata generate-image -d  

Como mínimo, el comando anterior necesita conocer la identificación de imagen que se debe usar y un directorio en el que se escriben los archivos.

Otros parámetros requeridos, como la región, la serie, la architecture, etc., se toman del entorno Juju actual (o un entorno especificado con la opción -e). Estos parámetros también se pueden anular en la línea de comando.

El comando de metadatos de imagen se puede ejecutar varias veces con diferentes regiones, series, architecture, y se seguirá agregando a los archivos de metadatos. Una vez que se han agregado todas las identificaciones de imagen necesarias, los archivos de índice y producto json se pueden cargar en una ubicación en la ruta de búsqueda de metadatos de Juju. Según la sección de Configuración, esto puede estar en algún lugar especificado por la configuración de image-metadata-url o el almacenamiento de la nube, etc.

Ejemplos:

  1. imagen-metadatos-url

    • subir contenidos a http://somelocation
    • establece image-metadata-url en http://somelocation/images
  2. Almacenamiento en la nube

Si se ejecuta sin parámetros, el comando de validación tomará todos los detalles requeridos del entorno Juju actual (o según lo especificado por -e) y generará la identificación de la imagen que usaría para activar una instancia. Alternativamente, se pueden especificar series, regiones, architecture, etc. en la línea de comandos para anular los valores en la configuración del entorno.

Herramientas de metadatos

En general, las herramientas y los metadatos relacionados se reflejan desde https://streams.canonical.com/tools . Sin embargo, es posible generar manualmente metadatos para un tarball de herramientas personalizado.

Primero, cree un tarball de las herramientas relevantes y colóquelo en un directorio estructurado como este:

 /tools/releases/ 

Ahora genere metadatos relevantes para las herramientas ejecutando el comando:

 juju generate-tools -d  

Finalmente, el contenido de puede cargarse en una ubicación en la ruta de búsqueda de metadatos de Juju. Según la sección de Configuración, esto puede estar en algún lugar especificado por la configuración url-metadatos-herramientas o la configuración de la ruta de almacenamiento de la nube, etc.

Ejemplos:

  1. herramientas-metadatos-url

    • subir contenido de las herramientas dir a http://somelocation
    • establezca tools-metadata-url en http://somelocation/tools
  2. Almacenamiento en la nube

subir contenido de directamente al almacenamiento en la nube del entorno

Al igual que con los metadatos de imagen, el comando de validación se usa para asegurar que las herramientas estén disponibles para que Juju use:

 juju metadata validate-tools 

Se aplican los mismos comentarios. Ejecute la herramienta de validación sin parámetros para usar los detalles del entorno Juju, o invalide los valores según sea necesario en la línea de comandos. Ver juju help metadata validate-tools para más detalles.

Próximo paso:

  • ¿Cómo implemento una nube OpenStack con Juju?