Blog

Deploy do OpenStack no Ubuntu Server

Após instalar o Mirantis Fuel em um ambiente virtualizado hospedado no Ubuntu Server, chegou a hora de instalar o OpenStack (novamente). O procedimento não é diferente do anterior, hospedado em ambiente Windows. Esperei bastante tempo para que o processo terminasse.

No meio do caminho surgiu um problema: a instalação do Ubuntu no slave que estava destinado ao Cinder deu erro. Não consegui descobrir que tipo de erro foi, apesar de existir um sistema de log bem completo. Parti logo para a solução. Como a instalação nos outros dois nós foi tranquila e não tinha nenhuma opção de instalar somente no nó defeituoso, cliquei em “Deploy” (aba “Dashboard“) novamente. Achei que ia refazer tudo, mas ele teve a decência de instalar somente o nó que deu erro, sem mexer nos outros dois.

Após o Ubuntu ter sido “instalado com sucesso” nos 3 nós, o instalador iniciou o deploy do OpenStack. Nesse ponto você pode ir visitar seu tio na Noruega, porque vai demorar (pelo menos na minha máquina demorou).

Após o deploy, o link para o Horizon foi exibido. Mesmo problema de acesso para o painel do Fuel: o endereço do Horizon não é exposto para a minha rede local, então preciso redirecionar portas novamente. Nesse caso, como eu tenho um Apache instalado na máquina host ( O PHPVirtualBox lembra? ) preciso colocar o host para escutar em outra porta, mas enviar para a porta 80 da máquina onde está o Horizon.

Redirecionando Portas

Vou aplicar a mesma regra iptables da outra vez, mas trocando as portas. Para ser sincero, não lembro agora se é a mesma máquina que está usando os dois endereços (10.20.0.2 e 172.16.0.3 ). Vou verificar e edito o post depois. O certo é que a rede 10.20.0.x é a rede administrativa do Fuel (PXE). A 172.16.0.x é a pública e floating do OpenStack. Como estamos em um ambiente VirtualBox , é necessário criar esta ponte da rede externa da máquina host para a rede pública/floating do OpenStack. sempre que se desejar um acesso de fora para dentro ( de dentro para fora ele já se resolve, pois já vi que os nós são capazes de acessar a internet pela minha rede doméstica).

iptables -I FORWARD -d 172.16.0.3 -m comment --comment "Accept to forward Horizon DashBoard traffic" -m tcp -p tcp --dport 8066 -j ACCEPT

iptables -I FORWARD -m comment --comment "Accept to forrward Horizon DashBoard return traffic" -s 172.16.0.3 -m tcp -p tcp --sport 80 -j ACCEPT

iptables -t nat -I PREROUTING -m tcp -p tcp --dport 8066 -m comment --comment "redirect pkts to Horizon Dashboard" -j DNAT --to-destination 172.16.0.3:80 

iptables -t nat -I POSTROUTING -m comment --comment "NAT the src ip" -d 172.16.0.3 -o vboxnet1 -j MASQUERADE

Atualizei minha cópia do iptables para que isso não se perca ao reiniciar o servidor:

sudo iptables-save > /etc/iptables.conf

Feito isso, pude acessar o Horizon a partir do meu notebook, assim como faço com o painel de controle do Fuel.

http://192.168.25.25:8066/

No meu caso, tive um problema ao acessar o Horizon:

The server encountered an internal error or misconfiguration and was unable to complete your request.

Eu usei a Conexão de Área de Trabalho Remota do Windows para conectar no nó onde está o Horizon. Se não for a porta 5001 então tente outro. Não lembro se foi um bom palpite ou se eu verifiquei em algum lugar.:

<IP_DO_HOST_VIRTUALBOX>:5001

Uma vez logado como root (senha r00tme) eu simplesmente reiniciei o Apache:

service apache2 restart

e tudo funcionou como deveria.

Só por curiosidade eu acessei cada máquina e executei o aplicativo htop do Ubuntu para monitorar a utilização de recursos.  Percebi que o Controller estava com 1.3 GB de RAM (assim como todos os outros) mas estava paginando demais e consumindo toda a memória disponível. Apesar de não estar nos manuais, resolvi disponibilizar mais um processador para esta VM e também resolvi aumentar a memória para 3.5 GB de RAM. Após isso, reiniciei a VM do Controller e percebi que o acesso ao Horizon ficou mais fuido e que não estava paginando tanto. Monitorei também a memória disponível na máquina host para ver o impacto da minha modificação. Tudo dentro do normal, pelo menos sem executar nada no OpenStack.

Cinder

Cinder

 

Compute

Compute

 

Controller

Controller

Após tudo isso, tentei executar uma instância. Escolhi a imagem “TestVM” que veio na instalação, tamanho m1.tiny.

Quando eu seleciono a rede “admin_internal_net” tudo vai bem. A máquina sobe, mas não consigo acessá-la de nenhum lugar (o IP da rede interna não é exposto ). Quando eu escolho a rede “admin_floating_net” ocorre um erro:

No valid host was found. There are not enough hosts available.

Não sei bem o que é isso. Procurei pela internet, mas cada lugar dá uma solução diferente e nenhuma resolveu o problema. Aloquei alguns endereços IP flutuantes e criei uma chave, mas também não resolveu. Quando descobrir o que houve eu posto aqui.

No valid host was found. There are not enough hosts available.

File "/usr/lib/python2.7/dist-packages/nova/conductor/manager.py", line 739, in build_instances request_spec, filter_properties) File "/usr/lib/python2.7/dist-packages/nova/scheduler/utils.py", line 343, in wrapped return func(*args, **kwargs) File "/usr/lib/python2.7/dist-packages/nova/scheduler/client/__init__.py", line 52, in select_destinations context, request_spec, filter_properties) File "/usr/lib/python2.7/dist-packages/nova/scheduler/client/__init__.py", line 37, in __run_method return getattr(self.instance, __name)(*args, **kwargs) File "/usr/lib/python2.7/dist-packages/nova/scheduler/client/query.py", line 34, in select_destinations context, request_spec, filter_properties) File "/usr/lib/python2.7/dist-packages/nova/scheduler/rpcapi.py", line 120, in select_destinations request_spec=request_spec, filter_properties=filter_properties) File "/usr/lib/python2.7/dist-packages/oslo_messaging/rpc/client.py", line 158, in call retry=self.retry) File "/usr/lib/python2.7/dist-packages/oslo_messaging/transport.py", line 90, in _send timeout=timeout, retry=retry) File "/usr/lib/python2.7/dist-packages/oslo_messaging/_drivers/amqpdriver.py", line 533, in send retry=retry) File "/usr/lib/python2.7/dist-packages/oslo_messaging/_drivers/amqpdriver.py", line 524, in _send raise result

Edit:

A solução para este erro é a seguinte: eu estava designando a instância para uma rede externa sem que ela tenha um IP válido na rede fixa (por desconhecimento meu na infraestrutura de rede do Neutron). Toda instância DEVE possuir um IP fixo na rede interna designado pelo Nova e só então receber um IP flutuante externo. A expressão “not enough hosts available” significa que ele não encontrou um IP fixo (host) disponível (available) da rede interna designado para a instância que possa ser mapeado para o IP da rede externa.

 

0

About the Author:

Java EE developer and OSM Mapper.
  Related Posts
  • No related posts found.

You must be logged in to post a comment.