Configuração de Um Ambiente de Testes para o OpenStack – Parte 2 – Controller

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.

Instalação e Configuração do OpenStack

Com as máquinas virtuais configuradas no post anterior, vamos partir para a configuração dos serviços do OpenStack. Em teoria, se você está usando máquinas reais, seria possível começar o tutoria a partir deste ponto.

Controlador

Com as máquinas criadas e configuradas, vamos para o OpenStack. Primeiro passo, vamos logar no Controller e configurar os repositórios do Ubuntu para utilizar a versão mais nova do OpenStack:

openstack@controller:~$ sudo apt-get install ubuntu-cloud-keyring
openstack@controller:~$ cat /etc/apt/sources.list.d/cloud-archive.list
deb http://ubuntu-cloud.archive.canonical.com/ubuntu precise-updates/folsom main 
openstack@controller:~$ sudo apt-get update && sudo apt-get upgrade

Em seguida, edite o arquivo /etc/sysctl.conf com as seguintes opções:

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

O arquivo /etc/hosts deve conter os endereços das máquinas da nuvem:

127.0.0.1       localhost
#127.0.1.1      controller
192.168.0.2     controller
192.168.0.3     network
192.168.0.4     compute

NTP

O NTP é um programa que sincroniza o tempo da máquina com um servidor da rede. Precisamos instalá-lo para garantir sincronização entre as máquinas da nuvem:

openstack@controller:~$ sudo apt-get install -y ntp
openstack@controller:~$ sudo cp /etc/ntp.conf /etc/ntp.conf.old
openstack@controller:~$ cat /etc/ntp.conf
server ntp.ubuntu.com iburst
server 127.127.1.0
fudge 127.127.1.0 stratum 10
openstack@controller:~$ sudo service ntp restart
 * Stopping NTP server ntpd                                                                                                                                                                                  
 * Starting NTP server ntpd       

MySQL

Instale o MySQL-Server, colocando a senha do banco como openstack. Configure o banco com os comandos abaixo.

openstack@controller:~$ sudo apt-get install mysql-server python-mysqldb
openstack@controller:~$ sudo sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/my.cnf
openstack@controller:~$ sudo service mysql restart
mysql stop/waiting
mysql start/running, process 4219
openstack@controller:~$ mysql -u root -p <<EOF
CREATE DATABASE nova; 
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'localhost' IDENTIFIED BY 'openstack'; 
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'192.168.0.1' IDENTIFIED BY 'openstack'; 
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'192.168.0.2' IDENTIFIED BY 'openstack'; 
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'192.168.0.3' IDENTIFIED BY 'openstack'; 
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'controller' IDENTIFIED BY 'openstack'; 
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'compute' IDENTIFIED BY 'openstack'; 
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'network' IDENTIFIED BY 'openstack'; 
CREATE DATABASE cinder; 
GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'localhost' IDENTIFIED BY 'openstack';
CREATE DATABASE glance;
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'localhost' IDENTIFIED BY 'openstack';
CREATE DATABASE keystone;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'localhost' IDENTIFIED BY 'openstack';
CREATE DATABASE quantum;
GRANT ALL PRIVILEGES ON quantum.* TO 'quantum'@'localhost' IDENTIFIED BY 'openstack';
GRANT ALL PRIVILEGES ON quantum.* TO 'quantum'@'192.168.0.2' IDENTIFIED BY 'openstack';
GRANT ALL PRIVILEGES ON quantum.* TO 'quantum'@'192.168.0.3' IDENTIFIED BY 'openstack';
GRANT ALL PRIVILEGES ON quantum.* TO 'quantum'@'controller' IDENTIFIED BY 'openstack'; 
GRANT ALL PRIVILEGES ON quantum.* TO 'quantum'@'network' IDENTIFIED BY 'openstack'; 
FLUSH PRIVILEGES;
EOF

RabbitMQ

O RabbitMQ é um sistema de mensagens:

openstack@controller:~$ sudo apt-get install rabbitmq-server
openstack@controller:~$ sudo rabbitmqctl change_password guest openstack
Changing password for user "guest" ...
...done.

Keystone

O Keystone é o serviço de identidade do OpenStack. Vamos primeiro configurar o banco de dados do Keystone:

openstack@controller:~$ sudo apt-get install keystone python-keystone python-keystoneclient
openstack@controller:~$ sudo mv /etc/keystone/keystone.conf /etc/keystone/keystone.conf.old
openstack@controller:~$ sudo cat /etc/keystone/keystone.conf
[DEFAULT]
admin_token = openstack
bind_host = 0.0.0.0
public_port = 5000
admin_port = 35357
compute_port = 8774
verbose = True 
debug = True 
log_file = keystone.log
log_dir = /var/log/keystone
log_config = /etc/keystone/logging.conf

[sql]
connection = mysql://keystone:openstack@localhost:3306/keystone
idle_timeout = 200
(resto igual ao arquivo original)
openstack@controller:~$ sudo service keystone restart
keystone stop/waiting
keystone start/running, process 6271
openstack@controller:~$ sudo keystone-manage db_sync

Vamos em seguida criar um arquivo com as variáveis de ambiente necessárias para interagir com o OpenStack:

openstack@controller:~$ cat novarc 
export OS_TENANT_NAME=admin
export OS_USERNAME=admin
export OS_PASSWORD=openstack
export OS_AUTH_URL="http://localhost:5000/v2.0/"
export SERVICE_ENDPOINT="http://localhost:35357/v2.0"
export SERVICE_TOKEN=openstack
openstack@controller:~$ source novarc 
openstack@controller:~$ echo "source novarc">>.bashrc

O próximo passo é povoar o banco de dados do Keystone. Para isso, vamos fazer uso dos scripts keystone-data.sh e keystone-endpoints.sh . Baixe-os na máquina Controller. No keystone-data.sh, deixe o começo do script da seguinte forma:

ADMIN_PASSWORD="openstack"
SERVICE_PASSWORD="openstack"
SERVICE_TOKEN="openstack"
export SERVICE_ENDPOINT="http://localhost:35357/v2.0"
SERVICE_TENANT_NAME=${SERVICE_TENANT_NAME:-service}

Em seguida, torne o script executável e o invoque:

openstack@controller:~$ chmod +x keystone-data.sh 
openstack@controller:~$ ./keystone-data.sh 

No keystone-endpoints.sh, deixe o começo do script da seguinte forma:

# MySQL definitions
MYSQL_USER=keystone
MYSQL_DATABASE=keystone
MYSQL_HOST=localhost
MYSQL_PASSWORD=openstack
# Keystone definitions
KEYSTONE_REGION=RegionOne
SERVICE_TOKEN=openstack
SERVICE_ENDPOINT="http://localhost:35357/v2.0"
# other definitions
MASTER="192.168.0.2"

Em seguida, torne o script executável e o invoque:

openstack@controller:~$ chmod +x keystone-endpoints.sh 
openstack@controller:~$ ./keystone-endpoints.sh 
+-------------+----------------------------------+
|   Property  |              Value               |
+-------------+----------------------------------+
| description |    OpenStack Compute Service     |
|      id     | 7e658862c9244b0da03b0c7497681b9a |
|     name    |               nova               |
|     type    |             compute              |
+-------------+----------------------------------+
(...)

Com isso, temos o Keystone configurado.

Glance

Glance é o serviço de controle de imagens do OpenStack. Vamos instalar os pacotes:

openstack@controller:~$ sudo apt-get install glance glance-api glance-registry python-glanceclient glance-common

Configure as seguintes opções em ambos os arquivos /etc/glance/glance-api.conf e /etc/glance/glance-registry.conf:

sql_connection = mysql://glance:openstack@localhost/glance
admin_tenant_name = service
admin_user = glance
admin_password = password

Os arquivos possuem outras opções, deixe-as como estão. Apenas para o glance-api.conf, configure estas opções:

notifier_strategy = rabbit
rabbit_password = openstack

Agora é questão de reiniciar os serviços e carregar os dados do Glance no MySQL:

openstack@controller:~$ sudo  service glance-api restart
openstack@controller:~$ sudo  service glance-registry restart
openstack@controller:~$ sudo glance-manage db_sync

Em seguida, baixar uma imagem do Ubuntu pronta para a nuvem e registrá-la no Glance. Observe como o serviço é flexível: você pode informar a URL, não precisa baixar a imagem previamente.

openstack@controller:~$ glance image-create \
> --location http://uec-images.ubuntu.com/releases/12.04/release/ubuntu-12.04-server-cloudimg-amd64-disk1.img \
> --is-public true --disk-format qcow2 --container-format bare --name "Ubuntu"
+------------------+--------------------------------------+
| Property         | Value                                |
+------------------+--------------------------------------+
| checksum         | None                                 |
| container_format | bare                                 |
| created_at       | 2013-04-23T16:43:17                  |
| deleted          | False                                |
| deleted_at       | None                                 |
| disk_format      | qcow2                                |
| id               | 6aa23a63-f2eb-45cc-98bf-7e3d8becc6a4 |
| is_public        | True                                 |
| min_disk         | 0                                    |
| min_ram          | 0                                    |
| name             | Ubuntu                               |
| owner            | None                                 |
| protected        | False                                |
| size             | 251789312                            |
| status           | active                               |
| updated_at       | 2013-04-23T16:43:17                  |
+------------------+--------------------------------------+
openstack@controller:~$ glance image-list
+--------------------------------------+--------+-------------+------------------+-----------+--------+
| ID                                   | Name   | Disk Format | Container Format | Size      | Status |
+--------------------------------------+--------+-------------+------------------+-----------+--------+
| 6aa23a63-f2eb-45cc-98bf-7e3d8becc6a4 | Ubuntu | qcow2       | bare             | 251789312 | active |
+--------------------------------------+--------+-------------+------------------+-----------+--------+

Nova

O Nova é o serviço de computação, que trata da criação das máquinas virtuais. Apesar do controlador cuidar da gerência, também vamos instalar o Nova, para manter a uniformidade na nuvem e facilitar a configuração. Partimos para a instalação de pacotes:

openstack@controller:~$ sudo apt-get install nova-api nova-cert nova-common \
> nova-scheduler python-nova python-novaclient nova-consoleauth novnc \
> nova-novncproxy

O arquivo /etc/nova/api-paste.ini deve ser alterado nos seguintes campos:

admin_tenant_name = service
admin_user = nova
admin_password = password

Os campos abaixo deve ser removidos porque instalaremos o serviço Cinder nas próximas etapas, que trata de gerenciar os volumes, eliminando a necessidade do Nova fazer o mesmo. Comente as linhas abaixo no mesmo arquivo.

============================================================
[composite:osapi_volume]
use = call:nova.api.openstack.urlmap:urlmap_factory
/: osvolumeversions
/v1: openstack_volume_api_v1
============================================================

============================================================
[composite:openstack_volume_api_v1]
use = call:nova.api.auth:pipeline_factory
noauth = faultwrap sizelimit noauth ratelimit osapi_volume_app_v1
keystone = faultwrap sizelimit authtoken keystonecontext ratelimit osapi_volume_app_v1
keystone_nolimit = faultwrap sizelimit authtoken keystonecontext osapi_volume_app_v1
============================================================

============================================================
[app:osapi_volume_app_v1]
paste.app_factory = nova.api.openstack.volume:APIRouter.factory
============================================================

============================================================
[pipeline:osvolumeversions]
pipeline = faultwrap osvolumeversionapp

[app:osvolumeversionapp]
paste.app_factory = nova.api.openstack.volume.versions:Versions.factory
============================================================

Vamos agora editar o arquivo /etc/nova/nova.conf com as seguintes modificações:

[DEFAULT]

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

# nova-scheduler #
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=ec2,osapi_compute,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

# 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.2
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

O comando abaixo serve para popular o banco de dados ‘nova’ com as tabelas necessárias. É recomendável executá-lo como root, em alguns instalações houve erros quando executado como usuário comum.

root@controller:~# nova-manage db sync
2013-04-25 10:43:28 11425 DEBUG nova.utils [-] backend <module 'nova.db.sqlalchemy.migration' from '/usr/lib/python2.7/dist-packages/nova/db/sqlalchemy/migration.pyc'> __get_backend /usr/lib/python2.7/dist-packages/nova/utils.py:506

A mensagem de DEBUG parece ser um problema da versão, mas não impede que o Nova funcione corretamente. Para finalizar, reiniciamos todos os serviços do Nova:

openstack@controller:/etc$ sudo service nova-api restart
openstack@controller:/etc$ sudo service nova-cert restart
openstack@controller:/etc$ sudo service nova-consoleauth restart
openstack@controller:/etc$ sudo service nova-scheduler restart
openstack@controller:/etc$ sudo service nova-novncproxy restart

Com isso, finalizamos o Nova.

Cinder

O Cinder possui uma funcionalidade que já existe no Nova, a gerência de blocos. Porém, essa funcionalidade está sendo separada em novo componente para facilitar a manutenção do Nova. Vamos instalar os pacotes do Cinder:

openstack@controller:~$ sudo apt-get install -y cinder-api cinder-scheduler cinder-volume iscsitarget open-iscsi iscsitarget-dkms python-cinderclient linux-headers-`uname -r`

Em seguida, inicializar os serviços iSCSI:

openstack@controller:~$ sudo sed -i 's/false/true/g' /etc/default/iscsitarget
openstack@controller:~$ sudo modprobe iscsi_trgt
openstack@controller:~$ service iscsitarget start
openstack@controller:~$ sudo service open-iscsi start

Coloque as seguintes opções no /etc/cinder/cinder.conf:

[DEFAULT]
sql_connection = mysql://cinder:openstack@localhost:3306/cinder
rabbit_password = openstack
rootwrap_config = /etc/cinder/rootwrap.conf
api_paste_confg = /etc/cinder/api-paste.ini
iscsi_helper = tgtadm
volume_name_template = volume-%s
volume_group = cinder-volumes
verbose = True
auth_strategy = keystone
state_path = /var/lib/cinder
volumes_dir = /var/lib/cinder/volumes

Altere as seguintes opções no /etc/cinder/api-paste.ini

admin_tenant_name = service
admin_user = cinder
admin_password = openstack

Precisamos utilizar agora o segundo disco da máquina controller. Se você executou a primeira seção deste tutorial sem problemas, deve haver um disco em /dev/sdb ou e /dev/vdb de 5Gb pronto para ser usado. Crie uma partição no dispositivo e depois execute os seguintes comandos:

openstack@controller:~$ sudo pvcreate /dev/sdb1
openstack@controller:~$ sudo vgcreate cinder-volumes /dev/sdb1

Com isso, configuramos um volume LVM para o Cinder. O sistema LVM é interessante pois permite adicionar mais espaço a partições sem a necessidade de reiniciar o servidor. Com isso feito, basta carregar o banco de dados do Cinder e reiniciar os serviços. Novamente, pode ocorrer uma mensagem de DEBUG na sincronização do banco. Ignore-a.

openstack@controller:~$ sudo service cinder-api restart
openstack@controller:~$ sudo service cinder-scheduler restart
openstack@controller:~$ sudo service cinder-volume restart

Com isso, finalizamos o Cinder.

Quantum

O Quantum é o serviço de configuração de redes da nossa nuvem. Vamos instalá-lo:

[soucecode language=”bash”]
openstack@controller:~$ sudo apt-get install quantum-server
[/sourcecode]

Deixe o arquivo /etc/quantum/quantum.conf com as opções da seguinte forma:

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

Deixe o arquivo /etc/quantum/plugins/openvswitch/ovs_quantum_plugin.ini com as opções da seguinte forma:

sql_connection = mysql://quantum:openstack@localhost:3306/quantum
tenant_network_type = gre
tunnel_id_ranges = 1:1000
enable_tunneling = True

Deixe o arquivo /etc/quantum/api-paste.ini com as opções da seguinte forma:

admin_tenant_name = service
admin_user = quantum
admin_password = openstack

Inicialize o serviço:

openstack@controller:~$ sudo service quantum-server restart

Dashboard

O Dashboard é a interface web do OpenStack. Sua configuração é fácil, basta instalar os pacotes:

openstack@controller:~$ sudo apt-get install apache2 libapache2-mod-wsgi openstack-dashboard memcached python-memcache

Terminamos o Controller! Agora acesse http://192.168.122.2/horizon e entre com o usuário ‘admin’ e a senha ‘openstack’. Se por acaso tiver algum problema, verifique se todos os serviços estão ativados na opção “Serviços” do DashBoard. O Rabbit não está lá, mas você pode ativá-lo com:

openstack@controller:/etc/init$ sudo update-rc.d rabbitmq-server enable
openstack@controller:/etc/init$ sudo service rabbitmq-server start
Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: