Como preparo o MAAS para exibir imagens no OpenStack?

5

Eu tenho Openstack pronto com MAAS , como eu preparo a nuvem com imagens do Ubuntu para que eu possa implantá-lo com o Juju?

    
por Jorge Castro 03.06.2014 / 21:23

1 resposta

9

Preparando MAAS para Juju e OpenStack usando Simplestreams

Quando o Juju cria uma nuvem, ele precisa de duas informações críticas:

  1. O uuid da imagem a ser usada ao iniciar novas instâncias de computação.
  2. O URL do qual fazer o download da versão correta de um tarball de ferramentas.

Esta informação necessária é armazenada em um formato de metadados json chamado "simplestreams". Para serviços de nuvem pública suportados, como o Amazon Web Services, o HP Cloud, o Azure, etc., nenhuma ação é necessária pelo usuário final. No entanto, aqueles que configuram uma nuvem privada, ou que querem mudar a maneira como as coisas funcionam (por exemplo, usar uma imagem diferente do Ubuntu), podem criar seus próprios metadados, depois de entender um pouco sobre como funciona.

O formato simplestreams é usado para descrever itens relacionados de maneira estrutural. Veja o projeto do Launchpad lp: simplestreams . Abaixo, discutiremos como o Juju determina quais metadados usar, e como criar suas próprias imagens e ferramentas, e fazer com que Juju os use em vez dos padrões.

Fluxo de trabalho básico

Sejam imagens ou ferramentas, o Juju usa um caminho de pesquisa para tentar encontrar metadados. Os componentes do caminho (na ordem da pesquisa) são:

  1. Local fornecido pelo usuário (especificado por tools-metadata-url ou image-metadata-url config settings).
  2. O armazenamento em nuvem do ambiente.
  3. Locais específicos do provedor (por exemplo, ponto de extremidade do keystone se estiver no Openstack).
  4. Um local da web com metadados de nuvens públicas compatíveis - link

Os metadados podem ser assinados em linha ou não assinados. Indicamos que um arquivo de metadados é assinado usando a extensão '.sjson'. Cada localização no caminho é pesquisada em busca de metadados assinados e, se nenhum for encontrado, os metadados não assinados são tentados antes de passar para o próximo local de caminho.

O Juju é fornecido com chaves públicas usadas para validar a integridade dos metadados de imagens e ferramentas obtidos do link . Então, fora da caixa, Juju irá "Just Work" com qualquer nuvem pública suportada, usando metadados assinados. Configurar metadados para uma nuvem privada (por exemplo, Openstack) requer que os metadados sejam gerados usando ferramentas que acompanham o Juju.

Conteúdo dos metadados de imagem

Os metadados de imagem usam um tipo de conteúdo simplestreams de "id de imagem". O ID do produto é formado da seguinte forma:

com.ubuntu.cloud:server:<series_version>:<arch> 

Por exemplo:

com.ubuntu.cloud:server:14.04:amd64 

Imagens não divulgadas (por exemplo, beta, diariamente, etc.) têm IDs de produto como:

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

O índice de metadados e os arquivos do produto precisam estar na seguinte árvore de diretórios (em relação ao URL associado a cada componente do caminho):

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

O arquivo de índice deve ser chamado de "index. (s) json" (sjson para assinado). Os vários arquivos do produto são nomeados de acordo com os valores de Caminho contidos no arquivo de índice.

Metadados de ferramentas usam um tipo de conteúdo simplestreams de "download de conteúdo". O ID do produto é formado da seguinte forma:

"com.ubuntu.juju:<series_version>:<arch>"

Por exemplo:

"com.ubuntu.juju:12.04:amd64"

O índice de metadados e os arquivos do produto precisam estar na seguinte árvore de diretórios (em relação ao URL associado a cada componente do caminho). Além disso, os pacotes de ferramentas que o Juju precisa fazer o download também são esperados.

  |-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

O arquivo de índice deve ser chamado de "index. (s) json" (sjson para assinado). O arquivo do produto e o (s) nome (s) do tarball de ferramentas correspondem ao que estiver nos arquivos do índice / produto.

Configuração

Para nuvens públicas suportadas, nenhuma configuração extra é necessária; as coisas funcionam fora da caixa. No entanto, para fins de teste ou para implementações de nuvem não suportadas, o Juju precisa saber onde encontrar as ferramentas e qual imagem executar. Mesmo para nuvens públicas suportadas em que todos os metadados necessários estão disponíveis, o usuário pode colocar seus próprios metadados no caminho de pesquisa para substituir o que é fornecido pela nuvem.

URLs especificados pelo usuário

Estes são inicialmente especificados no arquivo .juju/environments.yaml (e depois copiados para o arquivo jenv quando o ambiente é inicializado). Para imagens, use image-metadata-url ; para ferramentas, use tools-metadata-url . As URLs podem apontar para um contêiner / bloco legível na nuvem, um endereço servido por um servidor http ou até mesmo um diretório compartilhado que seja acessível por todas as instâncias do nó em execução na nuvem.

Assume um servidor http Apache com o URL base https://juju-metadata , fornecendo acesso a informações em <base>/images e <base>/tools . O arquivo yaml do ambiente Juju pode ter as seguintes entradas (uma ou ambas):

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

Os arquivos necessários em cada local são conforme o layout do diretório descrito mais cedo. Para um diretório compartilhado, use um URL no formato file:///sharedpath .

Armazenamento na núvem

Se nenhum metadado correspondente for encontrado no URL especificado pelo usuário, o armazenamento na nuvem do ambiente será pesquisado. Nenhuma configuração de usuário é necessária aqui - todos os ambientes Juju são configurados com armazenamento em nuvem, que é usado para armazenar informações de estado, encantos etc.A configuração do armazenamento em nuvem depende do provedor; para nuvens Amazon e Openstack, o armazenamento é definido pelo valor "control-bucket", para o Azure, o valor "storage-account-name" é relevante.

A estrutura de diretórios (opcional) dentro do armazenamento em nuvem é a seguinte:

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

É claro que, se apenas forem necessários metadados de imagem personalizados, o diretório de ferramentas não será necessário e vice-versa.

Observe que, se o bootstrap do juju for executado com a opção --upload-tools , as ferramentas e os metadados serão colocados de acordo com a estrutura acima. É por isso que as ferramentas estão disponíveis para o Juju usar.

Armazenamento específico do provedor

Os provedores podem permitir que locais adicionais pesquisem metadados e ferramentas. Para o OpenStack, os pontos de extremidade do Keystone podem ser criados pelo administrador da nuvem. Estes são definidos da seguinte forma:

juju-tools O valor, conforme descrito acima em Ferramentas Metadata Contentsproduct, transmite o & lt; path_url & GT; valor conforme descrito acima em Image Metadata Contents

Outros provedores também podem especificar locais, embora a implementação varie.

Esse é o local padrão usado para pesquisar metadados de imagens e ferramentas e é usado se nenhuma correspondência for encontrada anteriormente em nenhum dos locais acima. Nenhuma configuração de usuário é necessária.

Existem dois problemas principais ao implantar uma nuvem privada:

  1. Os IDs de imagem serão específicos para a nuvem.
  2. Frequentemente, o acesso externo à internet é bloqueado

O problema 1 significa que os metadados do ID da imagem precisam ser gerados e disponibilizados.

O problema 2 significa que as ferramentas precisam ser espelhadas localmente para torná-las acessíveis.

As ferramentas Juju existem para ajudar na geração e validação de metadados de imagens e ferramentas. Para ferramentas, geralmente é mais fácil espelhar apenas https://streams.canonical.com/tools . No entanto, os metadados de imagem não podem ser simplesmente espelhados porque os IDs de imagem são obtidos do provedor de armazenamento em nuvem, portanto, isso precisa ser gerado e validado usando os comandos descritos abaixo.

As ferramentas de metadados Juju disponíveis podem ser vistas usando o comando help:

juju help metadata

O fluxo de trabalho geral é:

  • Gerar metadados de imagem
  • Copie os metadados da imagem para algum lugar no caminho de pesquisa de metadados
  • Opcionalmente, espelhe ferramentas para algum lugar no caminho de pesquisa de metadados
  • Opcionalmente, configure as ferramentas-metadata-url e / ou image-metadata-url
Metadados de imagem

Gerar metadados de imagem usando

juju metadata generate-image -d <metadata_dir>

No mínimo, o comando acima precisa saber o ID da imagem a ser usado e um diretório no qual gravar os arquivos.

Outros parâmetros obrigatórios, como região, série, arquitetura, etc., são obtidos do ambiente Juju atual (ou de um ambiente especificado com a opção -e). Esses parâmetros também podem ser substituídos na linha de comando.

O comando de metadados de imagem pode ser executado várias vezes com diferentes regiões, séries, arquitetura e continuará sendo adicionado aos arquivos de metadados. Depois que todos os IDs de imagem necessários forem adicionados, os arquivos json index e product podem ser carregados em um local no caminho de pesquisa de metadados do Juju. De acordo com a seção Configuração, isso pode estar em algum lugar especificado pela configuração image-metadata-url ou o armazenamento da nuvem, etc.

Exemplos:

  1. image-metadata-url

    • carregar conteúdo de para http://somelocation
    • defina image-metadata-url como http://somelocation/images
  2. Armazenamento em nuvem

Se executado sem parâmetros, o comando de validação obterá todos os detalhes necessários do ambiente Juju atual (ou conforme especificado por -e) e exibirá o ID da imagem que usaria para ativar uma instância. Alternativamente, séries, regiões, arquiteturas etc. podem ser especificadas na linha de comando para substituir os valores na configuração do ambiente.

Metadados de ferramentas

Geralmente, ferramentas e metadados relacionados são espelhados de https://streams.canonical.com/tools . No entanto, é possível gerar manualmente metadados para um tarball de ferramentas personalizadas.

Primeiro, crie um tarball das ferramentas relevantes e coloque em um diretório estruturado assim:

<tools_dir>/tools/releases/

Agora, gere metadados relevantes para as ferramentas executando o comando:

juju generate-tools -d <tools_dir>

Finalmente, o conteúdo pode ser enviado para um local no caminho de pesquisa de metadados do Juju. De acordo com a seção Configuração, isso pode estar em algum lugar especificado pela configuração tools-metadata-url ou pelas configurações do caminho de armazenamento da nuvem, etc.

Exemplos:

  1. tools-metadata-url

    • faça o upload do conteúdo do diretório de ferramentas para http://somelocation
    • defina tools-metadata-url como http://somelocation/tools
  2. Armazenamento em nuvem

carregue o conteúdo diretamente no armazenamento em nuvem do ambiente

Tal como acontece com os metadados da imagem, o comando de validação é usado para garantir que as ferramentas estejam disponíveis para o Juju usar:

juju metadata validate-tools

Os mesmos comentários se aplicam. Execute a ferramenta de validação sem parâmetros para usar detalhes do ambiente Juju ou substitua os valores conforme necessário na linha de comandos. Veja juju help metadata validate-tools para mais detalhes.

Próximo passo:

por Jorge Castro 03.06.2014 / 21:23