Arquivo mensal: maio 2013

Configuração de Um Ambiente de Testes para o OpenStack – Parte 4 – Compute

Aviso: este tutorial não funciona. Ele foi baseado em um guia que está no site oficial do projeto OpenStack (veja a parte 1). Entretanto, nos próprios comentários da página do tutorial, vários usuários relatam que as máquinas virtuais criadas não conseguem capturar um IP do DHCP. A razão do problema está relacionada com o serviço Quantum, cuja utilização no OpenStack é recente. Caso você deseje ter uma visão geral de virtualização e OpenStack, aconselho a seguir o tutorial mesmo assim. Na hora de aprender, um erro pode valer mais do que mil acertos.

Introdução

Vamos agora para a parte final do tutorial, a máquina Compute. Se você observar na tabela no post parte 1, verá que o nó Compute não foi configurado com uma interface com a Rede Externa (Host NAT). A configuração está correta, porém sem conexão com a Internet, fica difícil instalar os pacotes necessários. E quais são os pacotes? Por mais estranho que possa parece, a máquina Compute, que é virtual, precisará do KVM. Ou seja, uma máquina virtual que hospedará máquinas virtuais. Não posso deixar de lembrar que esta configuração é apenas para testes, o desempenho apresentado não será bom.

Configuração do Ubuntu

Primeiro, vamos aos pacotes. Execute ‘sudo apt-get install ubuntu-cloud-keyring’. Crie o arquivo /etc/apt/sources.list.d/cloud-archive.list com apenas a seguinte linha:

deb http://ubuntu-cloud.archive.canonical.com/ubuntu precise-updates/folsom main 

Depois, atualize a distribuição com os comandos ‘sudo apt-get update && sudo apt-get upgrade’. Instale os pacotes com o comando abaixo:

openstack@compute:~$ sudo apt-get install ntp kvm libvirt-bin pm-utils nova-compute-kvm openvswitch-switch quantum-plugin-openvswitch-agent

Com isso todos os pacotes estarão instalado e podemos partir para a configuração individual de cada um. Mas antes vamos terminar que configurar o Ubuntu.

Configuração de Rede

Você deve deixar seu arquivo /etc/network/interfaces parecido com o exemplo abaixo:

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
# auto eth0
# iface eth0 inet static
#        address 192.168.122.4
#        netmask 255.255.255.0
#        network 192.168.122.0
#        broadcast 192.168.122.255
#        gateway 192.168.122.1
#        dns-nameservers 192.168.122.1

auto eth1
iface eth1 inet static
        address 192.168.0.4
        netmastk 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
	### static routing ###
	post-up route add -net 192.168.0.0 netmask 255.255.255.0 dev eth1
	pre-down route del -net 192.168.0.0 netmask 255.255.255.0 dev eth1

auto eth2
iface eth2 inet static
        address 10.10.10.3
        netmastk 255.255.255.0
        network 10.10.10.0
        broadcast 10.10.10.255
	### static routing ###
	post-up route add -net 10.10.10.0 netmask 255.255.255.0 dev eth2
	pre-down route del -net 10.10.10.0 netmask 255.255.255.0 dev eth2

A configuração do eth0 é opcional, já que instalamos o pacote. Se você encontrar algum problema, pode deixar essa configuração fora de comentários. Atualize os seguintes campos no arquivo /etc/sysctl.conf:

net.ipv4.conf.all.rp_filter = 0
net.ipv4.conf.default.rp_filter = 0  

Agora, reinicie a rede com ‘openstack@compute:~$ sudo service networking restart’.

NTP

Coloque apenas a linha ‘server 192.168.0.2’ no arquivo /etc/ntp.conf e reinicie o serviço com ‘sudo service ntp restart’.

KVM

Vamos agora configurar o KVM. Edite o arquivo /etc/libvirt/qemu.conf e adicione o seguinte:

cgroup_device_acl = [
    "/dev/null", "/dev/full", "/dev/zero",
    "/dev/random", "/dev/urandom",
    "/dev/ptmx", "/dev/kvm", "/dev/kqemu",
    "/dev/rtc", "/dev/hpet", "/dev/net/tun"]

É necessário desabilitar a bridge padrão do KVM, para evitar conflitos na rede:

openstack@compute:~$ virsh net-destroy default
openstack@compute:~$ virsh net-undefine default

Temos que habilitar a migração “quente”, configurando as seguintes opções no arquivo /etc/libvirt/libvirtd.conf:

listen_tls = 0
listen_tcp = 1
auth_tcp = "none"

Em seguida, a variável libvirtd_opts deve ser alterada no arquivo /etc/init/libvirt-bin.conf:

env libvirtd_opts="-d -l" 

Temos que alterar a mesma variável no arquivo /etc/default/libvirt-bin para ficar com o mesmo valores. Para finalizar, reiniciamos o KVM/Libvirt:

openstack@compute:~$ sudo service libvirt-bin restart
libvirt-bin stop/waiting
libvirt-bin start/running, process 3110

Nova

Edite o arquivo /etc/nova/api-paste.ini:

admin_tenant_name = service
admin_user = nova
admin_password = openstack

Edite o arquivo /etc/nova/nova-compute.conf:

[DEFAULT]
libvirt_type=qemu
libvirt_ovs_bridge=br-int
libvirt_vif_type=ethernet
libvirt_vif_driver=nova.virt.libvirt.vif.LibvirtHybridOVSBridgeDriver
libvirt_use_virtio_for_bridges=True

O campo libvirt_type está como qemu porque compute é uma máguina virtual. Fosse uma máquina real, o valor deveria ser kvm. Perceba que os dois primeiros arquivos editados não trazem nenhuma indicação que esta instalação do nova faz parte de uma nuvem. No próximo arquivo iremos adicionar os endereços IPs dos outros serviços da nuvem. Edite o arquivo /etc/nova/nova.conf :

[DEFAULT]

# MySQL Connection #
sql_connection=mysql://nova:openstack@192.168.0.2/nova

# nova-scheduler #
rabbit_host=192.168.0.2
rabbit_password=openstack
scheduler_driver=nova.scheduler.simple.SimpleScheduler

# nova-api #
cc_host=192.168.0.2
auth_strategy=keystone
s3_host=192.168.0.2
ec2_host=192.168.0.2
nova_url=http://192.168.0.2:8774/v1.1/
ec2_url=http://192.168.0.2:8773/services/Cloud
keystone_ec2_url=http://192.168.0.2:5000/v2.0/ec2tokens
api_paste_config=/etc/nova/api-paste.ini
allow_admin_api=true
use_deprecated_auth=false
ec2_private_dns_show_ip=True
dmz_cidr=169.254.169.254/32
ec2_dmz_host=192.168.0.2
metadata_host=192.168.0.2
metadata_listen=0.0.0.0
enabled_apis=metadata

# Networking #
network_api_class=nova.network.quantumv2.api.API
quantum_url=http://192.168.0.2:9696
quantum_auth_strategy=keystone
quantum_admin_tenant_name=service
quantum_admin_username=quantum
quantum_admin_password=openstack
quantum_admin_auth_url=http://192.168.0.2:35357/v2.0
libvirt_vif_driver=nova.virt.libvirt.vif.LibvirtHybridOVSBridgeDriver
linuxnet_interface_driver=nova.network.linux_net.LinuxOVSInterfaceDriver
firewall_driver=nova.virt.libvirt.firewall.IptablesFirewallDriver

# Compute #
compute_driver=libvirt.LibvirtDriver
connection_type=libvirt

# Cinder #
volume_api_class=nova.volume.cinder.API

# Glance #
glance_api_servers=192.168.0.2:9292
image_service=nova.image.glance.GlanceImageService

# novnc #
novnc_enable=true
novncproxy_base_url=http://192.168.122.2:6080/vnc_auto.html
vncserver_proxyclient_address=192.168.0.4
vncserver_listen=0.0.0.0

# Misc #
logdir=/var/log/nova
state_path=/var/lib/nova
lock_path=/var/lock/nova
root_helper=sudo nova-rootwrap /etc/nova/rootwrap.conf
verbose=true

Quantum

Vamos configurar o Open vSwitch, que nos dará acesso às bridges virtuais, e o próprio Quantum.

Open vSwitch

No caso do Open vSwitch, precisamos iniciar o serviço e adicionar as bridges:

openstack@compute:~$ sudo service openvswitch-switch start
 * Inserting openvswitch module
 * /etc/openvswitch/conf.db does not exist
 * Creating empty database /etc/openvswitch/conf.db
 * Starting ovsdb-server
 * Configuring Open vSwitch system IDs
 * Starting ovs-vswitchd
 * Enabling gre with iptables
openstack@compute:~$ sudo ovs-vsctl add-br br-int

Quantum

Para o Quantum, temos que configurar os dois arquivos com os IPs do Controller.

Edite o arquivo /etc/quantum/quantum.conf:

core_plugin = quantum.plugins.openvswitch.ovs_quantum_plugin.OVSQuantumPluginV2
auth_strategy = keystone
fake_rabbit = False
rabbit_host = 192.168.0.2
rabbit_password = openstack

Edite o arquivo /etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini:

sql_connection = mysql://quantum:openstack@192.168.0.2:3306/quantum
tenant_network_type = gre
tunnel_id_ranges = 1:1000
integration_bridge = br-int
tunnel_bridge = br-tun
local_ip = 10.10.10.3
enable_tunneling = True

E vamos iniciar o serviço:

openstack@compute:~$ sudo service quantum-plugin-openvswitch-agent start
quantum-plugin-openvswitch-agent start/running, process 3510

Toques finais

Para finalizar alguns toques finais. Irá facilitar muito nossa vida sincronizar o conteúdo dos arquivos /etc/hosts em cada máquina. Lembre de comentar a linha que atribui o loopback (127.0.0.1) para o hostname da máquina. Os arquivos devem ter as seguintes linhas:

192.168.0.2	controller
192.168.0.3	network
192.168.0.4	compute
Anúncios

Configuração de Um Ambiente de Testes para o OpenStack – Parte 3 – Network

Aviso: este tutorial não funciona. Ele foi baseado em um guia que está no site oficial do projeto OpenStack (veja a parte 1). Entretanto, nos próprios comentários da página do tutorial, vários usuários relatam que as máquinas virtuais criadas não conseguem capturar um IP do DHCP. A razão do problema está relacionada com o serviço Quantum, cuja utilização no OpenStack é recente. Caso você deseje ter uma visão geral de virtualização e OpenStack, aconselho a seguir o tutorial mesmo assim. Na hora de aprender, um erro pode valer mais do que mil acertos.

Introdução

Com a configuração feita no post anterior, podemos partir para configurar o segundo host com os serviços de rede. A princípio, já poderíamos instanciar máquinas apenas com o Controller configurado. Mas a adição do Network torna o cenário, ainda controlado, um pouco mais realista.

Configurações no Ubuntu

Assim como na configuração do Controller, vamos atualizar a sources.list para adicionar o repositório com a versão mais recente do OpenStack.

openstack@network:~$ sudo apt-get install ubuntu-cloud-keyring 

Coloque a linha abaixo no arquivo /etc/apt/sources.list.d/cloud-archive.list:

deb http://ubuntu-cloud.archive.canonical.com/ubuntu precise-updates/folsom main 

Em seguida, atualize o sistema:

openstack@network:~$ sudo apt-get update && sudo apt-get dist-upgrade

Vamos configurar a rede. Aqui temos que prestar atenção em detalhe. A interface da rede externa (endereço 192.168.122.3/24) será alterada. Nós vamos criar uma bridge pública. Se você logou na máquina pela interface da rede externa, sai e comece a sessão SSH por outro endereço. O arquivo /etc/network/interfaces deve ficar assim:

# The loopback network interface
auto lo
iface lo inet loopback

# Bridge Pública
auto eth0
iface eth0 inet manual
        up ifconfig $IFACE 0.0.0.0 up
        up ip link set $IFACE promisc on   
        down ifconfig $IFACE down

# Rede de Gerência
auto eth1
iface eth1 inet static
        address 192.168.0.3
        netmastk 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
        ### static routing ###
        post-up route add -net 192.168.0.0 netmask 255.255.255.0 dev eth1
        pre-down route del -net 192.168.0.0 netmask 255.255.255.0 dev eth1

# Rede de Dados
auto eth2
iface eth2 inet static
        address 10.10.10.2
        netmastk 255.255.255.0
        network 10.10.10.0
        broadcast 10.10.10.255
        ### static routing ###
        post-up route add -net 10.10.10.0 netmask 255.255.255.0 dev eth2
        pre-down route del -net 10.10.10.0 netmask 255.255.255.0 dev eth2

Antes de reiniciar, instale todos os pacotes necessários. Com a interface pública como bridge, não teremos acesso aos repositórios do Ubuntu no primeiro momento.

openstack@network:~$ sudo apt-get install ntp quantum-plugin-openvswitch-agent quantum-dhcp-agent quantum-l3-agent

Devemos ativar o roteamento de pacotes no kernel. Coloque as opções a seguir no arquivo /etc/sysctl.conf:


Coloque também as mesmas informações do /etc/hosts do Controller no Network. Configura o NTP:

openstack@network:~$ sudo cat /etc/ntp.conf
server 192.168.0.2
openstack@network:~$ sudo service ntp restart
 * Stopping NTP server ntpd                                                                                                           [ OK ] 
 * Starting NTP server ntpd                                                                                                           [ OK ]

Por via das dúvidas, reinicie a máquina.

Serviços de Rede

Vamos agora configurar os serviços de rede.

Open-vSwitch

O Open-vSwitch é uma ferramenta de criação de switchs virtuais. Nós já instalamos o pacote acima, vamos iniciar o daemon:

openstack@network:~$ service openvswitch-switch start

Os comandos abaixo criam uma bridge virtual:

openstack@network:~$ sudo ovs-vsctl add-br br-int
openstack@network:~$ sudo ovs-vsctl add-br br-ex
openstack@network:~$ sudo ovs-vsctl add-port br-ex eth0
openstack@network:~$ sudo ip link set up br-ex 

Com isso, criamos uma bridge interna (br-int) e uma externa (br-ex). Devemos adicionar no /etc/network/interfaces a configuração abaixo para garantir conectividade pela rede externa:

Quantum

Vamos agora integrar o Quantum do network com o controller. Configure as seguintes opções no arquivo /etc/quantum/l3_agent.ini:

auth_url = http://192.168.0.2:35357/v2.0
admin_tenant_name = service
admin_user = quantum
admin_password = openstack
metadata_ip = 192.168.0.2
use_namespaces = False

Configure as seguintes opções no arquivo /etc/quantum/api-paste.ini:

auth_host = 192.168.0.2
admin_tenant_name = service
admin_user = quantum
admin_password = openstack

Configure as seguintes opções no arquivo /etc/quantum/quantum.conf:

core_plugin = quantum.plugins.openvswitch.ovs_quantum_plugin.OVSQuantumPluginV2
auth_strategy = keystone
fake_rabbit = False
rabbit_host = 192.168.0.2
rabbit_password = openstack

Configure as seguintes opções no arquivo /etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini:

sql_connection = mysql://quantum:openstack@192.168.0.2:3306/quantum
tenant_network_type = gre
tunnel_id_ranges = 1:1000
enable_tunneling = True
integration_bridge = br-int
tunnel_bridge = br-tun
local_ip = 10.10.10.2

Configure a seguinte opções no arquivo /etc/quantum/dhcp_agent.ini:

use_namespaces = False

Agora, vamos reiniciar todos os serviços:

openstack@network:~$ sudo service quantum-plugin-openvswitch-agent restart
openstack@network:~$ sudo service quantum-dhcp-agent restart
openstack@network:~$ sudo service quantum-l3-agent restart

Redes Virtuais

Criação de Redes Virtuais

Vamos agora configurar o necessário para criação de redes virtuais. O primeiro passo é criar um arquivo com as variáveis de ambiente, para facilitar a execução dos comandos no prompt. O arquivo deve ser nomeado novarc:

export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=openstack
export OS_AUTH_URL="http://192.168.0.2:5000/v2.0/"
export SERVICE_ENDPOINT="http://192.168.0.2:35357/v2.0"
export SERVICE_TOKEN=openstack

Vamos carregar essas variáveis e garantir que as mesmas são carregadas toda vez que entrarmos no sistema com o usuário ‘openstack’.

source novarc
echo "source novarc">>.bashrc

Vamos baixar o script de automação do site oficial do projeto. O script se chamada quantum-networking.sh. Nós temos que alterar os endereços IPs no script. A alteração será feita de acordo com a tabela na Parte 1 desse tutorial. A primeira coisa que temos que notar é que a nossa rede externa não é 7.7.7.0/24, mas sim 192.168.122.0/24. Portanto, altere os seguintes campos no script:

EXT_NET_CIDR="192.168.122.0/24"
EXT_GW_IP="192.168.122.3"
EXT_NET_GATEWAY="192.168.122.1"
POOL_FLOATING_START="192.168.122.130"   
POOL_FLOATING_END="192.168.122.150"     

Também aproveite para corrigir as últimas linhas do script. Elas executam comando que necessitam de privilégios de super-usuário.

sudo ip addr flush dev $EXT_NET_BRIDGE
sudo ip addr add $EXT_GW_IP/$EXT_NET_LEN dev $EXT_NET_BRIDGE
sudo ip link set $EXT_NET_BRIDGE up

Em seguir, execute o script:

openstack@network:~$ ./quantum-networking.sh 
Added interface to router 357a19df-004a-47ef-919b-3a7e4b0c1e53
Created a new subnet:
+------------------+--------------------------------------------------------+
| Field            | Value                                                  |
+------------------+--------------------------------------------------------+
| allocation_pools | {"start": "192.168.122.130", "end": "192.168.122.150"} |
| cidr             | 192.168.122.0/24                                       |
| dns_nameservers  |                                                        |
| enable_dhcp      | False                                                  |
| gateway_ip       | 192.168.122.1                                          |
| host_routes      |                                                        |
| id               | 05f4eb00-c3aa-494f-9b04-08ad8c895749                   |
| ip_version       | 4                                                      |
| name             |                                                        |
| network_id       | 4e7f1f37-b4a8-4111-a1d5-84245fe80500                   |
| tenant_id        | 4630c01242484c2ba63cf6392c78061c                       |
+------------------+--------------------------------------------------------+
Set gateway for router 357a19df-004a-47ef-919b-3a7e4b0c1e53
Configuração Layer3

Vamos configurar as funcionalidades da camada 3. Anote o identificador da rede externa (‘ext_net’) retornado pelo comando ‘quantum net-list’. Coloque no arquivo /etc/quantum/l3_agent.ini o campo ‘gateway_external_network_id = ID’, onde ID é o identificador da rede externa. Anote também o identificador do roteador ‘provider-router” retornado por ‘quantum router-list’ e atualize o campo ‘router_id = ID’ no mesmo arquivo. Para finalizar, reinicie o serviço:

openstack@network:~$ sudo service quantum-l3-agent restart
quantum-l3-agent stop/waiting
quantum-l3-agent start/running, process 32735

Com isso, finalizamos a configuração do nó Network.