Nube privada con OpenStack. Grupo OpenStack EOL

Bienvenid@s a tod@s a este hilo.

Aquí intentaremos mostrar como crear varios escenarios de nube privada usando OpenStack.
Principalmente destinado a usuarios Linux medio, medio-alto,Sysadmin y usuarios que les gustes "cacharrear".

Aviso que este hilo puede hacerse largo, complejo y "feo", pero creo que merece la pena intentarlo, ¿no? [chiu]
Intentaré usar muchos spoiler intentando que la vista principal del hilo sea lo más corta y limpia posible.

¿Qué es una nube privada?
Una nube privada es cuando las posibilidades y servicios que está ofrece son usados en exclusiva por los miembros internos que la han creado. Tambien es común que empresas tengan una nube privada para uso exclusivo interno.

¿Qué es OpenStack?
OpenStack actualmente es la solución con mayor apoyo, tanto de la comunidad como de empresas.
Es software libre, concretamente con licencia permisiva.

OpenStack es totalmente modular, pudiendo usar solo los módulos que necesitemos(hay unos mínimos que necesitaremos) para solucionar la problemática que tengamos.

¿Por qué un grupo OpenStack en EOL?
Es una tecnología en auge. Somos muchos los apasionados en las tecnologías en este foro.
Aunque realmente el proyecto OpenStack tiene unos años, estamos en una edad temprana, el mejor momento para involucrarse en un proyecto/tecnología y dominarla.


Miembros OpenStack EOL
· Iverson88

Imagen
Instalación básica de OpenStack "mono-nodo. Versión OpenStack IceHouse
Módulos que formarán parte de la solución OpenStack (explicados en la parte de instalación de cada uno):
· Keystone
· MySQL (los componentes usan su propia BBDD dentro del gestor de base de datos)
· RabbitMQ
· Horizon
· Neutron
· Cinder
· Glance
· Nova


Una vez tengamos una VM con Ubuntu Server 14.04 LTS 64 bits hacemos:
Actualización paquetes del SO Ubuntu Server
#aptitude update
#aptitude upgrade
#reboot (no obligatorio, ¿manías mías? :D )


Instalación RabbitMQ
RabbitMQ es un software de negociación de mensajes de código abierto. Podemos clasificarlo como middleware de mensajería. En OpenStack es el encargado de los "mensajes" entre los distintos módulos/componentes.
Enlace Wikipedia: http://es.wikipedia.org/wiki/RabbitMQ

Ejecutamos en consola:
$aptitude search rabbitmq
#aptitude install rabbitmq-server
Imagen
#aptitude install mysql-server (nos pedirá una contraseña para el root del MySQL)
#aptitude install python-mysqldb

Editamos el archivo de configuración de MySQL:
#nano /etc/mysql/my.cnf
Buscamos el parámetro bind-address y cambiamos 127.0.0.1 por la ip que tenga la interfaz de red.

Debajo de la etiqueta [mysqld] buscamos y editamos (o añadimos si no están los parámetros:
collation-server = utf8_general_ci
init-connect = 'SET NAMES utf8'
character-set-server = utf8

Reiniciamos el servicio MySQL:
#service mysql restart
Imagen

Además instalamos NTP (protocolo de Internet para la sincronización horaria), VLAN (habilita la configuración de VLANs en interfaces de red) y Bridge-utils (es un paquete que se encarga de acceder al núcleo bridges virtuales):
#aptitude install ntp
#aptitude install vlan
#aptitude install bridge-utils

Editamos el fichero /etc/sysctl.conf
Con este fichero pasamos parámetros de configuración en tiempo de ejecución al kernel de Linux. Es "lo mismo" que hacer modificaciones en el contenido de /proc/sys.
#nano /etc/sysctl.conf
et.ipv4.ip_forward=1
net.ipv4.conf.all.rp_filter=0
net.ipv4.conf.default.rp_filter=0

Los parámetros vienen ya en el archivo, debemos descomentarlos y asignar el valor adecuado.

Cargamos los valores del sysctl (así mandamos los nuevos valores tambien):
#sysctl -p
Imagen


Instalación Keystone
#aptitude install keystone
Imagen
Creamos una base de datos para keystone:
· Nos logueamos en el MySQL: $mysql -u root -p
· Creamos la BBDD: create database keystone;
· Creamos el usuario keystone y le damos permisos: grant all privileges on keystone.* to 'keystone'@'%' identified by 'laclavequequierasponerle' ( en 'keystone'@'%' le estamos dando los permisos para cualquier localización desde la que se conecte, esto en producción no es buena idea [noop] )
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'keystone_dbpass';
· Salimos del MySQL: exit
Imagen

Configuramos Keystone (Para acceder al directorio puede que os sea necesario estar como root [sudo su]):
· Editamos el archivo de configuración /etc/keystone/keystone.conf:
Comentamos la línea "connection = sqlite:////var/lib/keystone/keystone.db"
Añadimos la línea "connection = mysql://keystone:keystonepassword@192.1 ... 5/keystone

Exportarmos las variables de keystone que usaremos en la terminal:
#export OS_SERVICE_TOKEN=ADMIN
#export OS_SERVICE_ENDPOINT=http://192.168.1.135:35357/v2.0

Ejecutamos los siguientes comandos para crear el usuario admin, el role,etc...:
#keystone tenant-create --name=admin --description="Admin Tenant"
Imagen
#keystone tenant-create --name=service --description="Service Tenant"
Imagen
#keystone user-create --name=admin --pass=ADMIN --email=uncorreo@cualquiera.com
#keystone role-create --name=admin
#keystone user-role-add --user=admin --tenant=admin --role=admin

Creamos el servicio de Keystone:
#keystone service-create --name=keystone --type=identity --description="Keystone Identity Service"

Creamos el endpoint de Keystone:
#keystone endpoint-create --service=keystone --publicurl=http://192.168.1.135:5000/v2.0 --internalurl=http://192.168.1.135:5000/v2.0 --adminurl=http://192.168.1.135:35357/v2.0

"Desasignamos" los valores antes exportados:
#unset OS_SERVICE_TOKEN
#unset OS_SERVICE_ENDPOINT

Creamos un fichero llamado "creds" y añadimos:
export OS_USERNAME=admin
export OS_PASSWORD=ADMIN
export OS_TENANT_NAME=admin
export OS_AUTH_URL=http://192.168.1.135:35357/v2.0

Ejecutamos el siguiente comando:
$source creds

Probamos que todo ha ido bien:
keystone token-get
keystone user-list


Instalación Glance
Glance es el encargado del almacén de volúmenes.

· Instalamos el paquete glance: #aptitude install glance python-glanceclient
· Creamos la BBDD para Glance y su usuario:
create database glance;
grant all on glance.* to 'glance'@'%' identified by 'glancepassword';

· Editamos el fichero /etc/glance/glance-api.conf y /etc/glance/glance-registry.conf con la siguiente información
[database]
connection = mysql://glance:GLANCE_DBPASS@controller/glance

[keystone_authtoken]
auth_uri = http://controller:5000
auth_host = IP_O_NombreDNS_del_nodo
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = glance
admin_password = GLANCE_PASS

[paste_deploy]
...
flavor = keystone

· Creamos las relaciones de Glance con Keystone [amor]

keystone user-create --name=glance --pass=glance_pass --email=glance@example.com
keystone user-role-add --user=glance --tenant=service --role=admin
keystone service-create --name=glance --type=image --description="Glance Image Service"
keystone endpoint-create --service=glance --publicurl=http://192.168.1.135:9292 --internalurl=http://192.168.1.135:9292 --adminurl=http://192.168.1.135:9292

· Reiniciamos los servicios:
#service glance-registry restart
#service glance-api restart

· Probamos que todo ha ido bien:
$mkdir /tmp/images
$cd /tmp/images/
$wget http://download.cirros-cloud.net/0.3.2/ ... 4-disk.img

Subimos la imagen (.img) descargada al servicio:
$ glance image-create --name=nombreQueQueramosDarleALaImagen --disk-format=(qcow2, raw, vhd, vmdk, vdi, iso, aki, ari, and ami) --container-format=(bare, ovf, aki, ari and ami) --is-public=True(todos) o False(solo administradores) < cirros-0.3.2-x86_64-disk.img
Para conocer el formato del disco:
$file cirros-0.3.2-x86_64-disk.img
Imagen


Instalación Nova
Nova es el módulo encargado de la computación. Está formado por un conjunto de servicios capaz de lanzar instancias de máquinas virtuales.

· Instalamos los siguientes paquetes:
#aptitude install nova-api nova-cert nova-conductor nova-consoleauth nova-novncproxy nova-scheduler python-novaclient nova-compute nova-console

· Creamos la BBDD para Nova:
create database nova;
· Creamos el usuario nova en MySQL:
grant all privileges on nova.* to 'nova'@'%' identified by 'novapassword';

· Poblamos la BBDD:
#su -s /bin/sh -c "nova-manage db sync" nova

· Editamos el fichero de configuración /etc/nova/nova.conf:
Modificamos la siguiente sección:
[database]
connection = mysql://nova:NOVA_DBPASS@ipdelaVM/nova

Modificamos la siguiente sección:
[DEFAULT]
rpc_backend = rabbit
rabbit_host = vuestraip
rabbit_password = RABBIT_PASS
my_ip = TU_IP
vncserver_listen = TU_IP
vncserver_proxyclient_address = TU_IP
auth_strategy = keystone

· Editamos el fichero /etc/nova/api-nova.conf de forma que la sección siguiente quede así:
[filter:authtoken]
paste.filter_factory = keystoneclient.middleware.auth_token:filter_factory
auth_host = 192.168.1.135
auth_port = 35357
auth_protocol = http
auth_uri = http://vuestraip:5000/v2.0
admin_tenant_name = service
admin_user = nova
admin_password = novapassword



· Eliminamos el siguiente fichero original de la instalación (puesto que no vamos a usar SQLite):
#rm /var/lib/nova/nova.sqlite

·Añadimos las entradas de Keystone correspondientes para Nova:
$keystone user-create --name=nova --pass=NOVA_PASS --email=tu@email.com
$keystone user-role-add --user=nova --tenant=service --role=admin
$keystone service-create --name=nova --type=compute \ --description="OpenStack Compute"
$keystone endpoint-create --service-id=$(keystone service-list | awk '/ compute / {print $2}') --publicurl=http://tuip:8774/v2/%\(tenant_id\)s --internalurl=http://controller:8774/v2/%\(tenant_id\)s --adminurl=http://tuip:8774/v2/%\(tenant_id\)s

· Reiniciamos los siguientes servicios:
#service nova-api restart
#service nova-cert restart
#service nova-consoleauth restart
#service nova-scheduler restart
#service nova-conductor restart
#service nova-novncproxy restart

· Probamos! Qué poco me ha gustado Nova [+furioso] Me ha dado algún que otro error un rato bueno...
Imagen

Instalación Neutron
Neutron es el encargado de dar servicio a las redes en el entorno OpenStack.

· Instalamos los paquetes necesarios:
aptitude install neutron-server neutron-plugin-openvswitch neutron-plugin-openvswitch-agent neutron-common neutron-dhcp-agent neutron-l3-agent neutron-metadata-agent openvswitch-switch

· Creamos la BBDD para Neutron:
create database neutron;
grant all on neutron.* to 'neutron'@'%' identified by 'neutronpassword';

· Añadimos las entradas de Neutron a Keystone:
keystone user-create --name=neutron --pass=neutronpass --email=tu@email.com
keystone service-create --name=neutron --type=network --description="OpenStack Networking"
keystone user-role-add --user=neutron --tenant=service --role=admin
keystone endpoint-create --service=neutron --publicurl http://tuip:9696 --adminurl=http://tuip:9696 --internalurl=http://tuip:9696

service neutron-server restart; service neutron-plugin-openvswitch-agent restart;service neutron-metadata-agent restart; service neutron-dhcp-agent restart; service neutron-l3-agent restart

Instalación Horizon



¡¡EN CONSTRUCCIÓN!!







Instalación básica de OpenStack con 3 nodos
· Creación de las máquinas que formarán OpenStack. En mi caso he creado una estructura de 3 Nodos virtualizados en Virtualbox (equipo anfitrion es MacBook PRO 13" 2015 16GB RAM 256GB SSD):

#Controlador: Nombre VM Pikachu. Ubuntu Server 14.04 LTS 64 bits. HDD 6GB. RAM 2GB.

#Network: Nombre VM Charmander. Ubuntu Server 14.04 LTS 64 bits. HDD 6GB. RAM 1GB.

#Computación: Nombre VM Bulbasaur. Ubuntu Server 14.04 LTS 64 bits. HDD 20GB. RAM 2.5GB


¡¡¡¡EN CONSTRUCCION!!!!








UNA VEZ TENGA UNA ESTRUCTURA E INFORMACIÓN DECENTE SE PASARÁ A FORMATO WIKI

Contribuyamos entre tod@s los interesados. Podemos crear un centro de información sobre OpenStack bastante interesante.

Saludos.
Me suscribo para intentar aprender algo!
Añado el soporte de máquinas que estoy usando.

3 VMs Ubuntu Server 14.04 LTS 64bits En total unos 32-33GB HDD y unos 6GB RAM.

Yo lo estoy montando sobre un Macbook pro 13" early 2015 2,5Ghz 16GB RAM.
Entiendo que es como un openmosix? O exactamente que se puede hacer con openstack.
Me gusta e interesa bastante el hilo.

En este sistema de 3 nodos se podria instalar hadoop en los 3 nodos? Podria ser interesante ver el rendimiento distribuido y standalone:)

Me suscribo al hilo para estar atento!
Buenos días compañeros.
sodark escribió:Entiendo que es como un openmosix? O exactamente que se puede hacer con openstack.


Openmosix es un software de cluster. Esto es diferente.
OpenStackte permite tener una nube, asignar roles a usuarios de OpenStack, levantar instancias (VMs) mediante plantillas y la posibilidad de que se levanten automáticamente instancias según la carga de trabajo.

Sería un equivalente al cloud de Amazon o a Azure de Microsoft, pero más recomendado para usarlo de forma privada y no para ofrecer ese servicio a clientes (pero si por ejemplo si tenemos instancias con servidores Webs, de aplicaciones,etc... que pueden usar clientes). No se si me explicado bien xDDDD

alienvita2 escribió:Me gusta e interesa bastante el hilo.

En este sistema de 3 nodos se podria instalar hadoop en los 3 nodos? Podria ser interesante ver el rendimiento distribuido y standalone:)

Me suscribo al hilo para estar atento!

Apache Haddop según entiendo es para usar aplicaciones de forma distribuida para aprovechar los recursos de los nodos ,¿no? nunca lo he usado :(

OpenStack está en nodos por que es modular, son componentes independientes que trabajan en "simbiosis" para ofrecer una solución.

Yo en plan "a groso modo y mal" lo defino como un servidor de virtualización (entiendase VMWare ESX, Proxmox,etc...) pero con mecanismos más automáticos y autónomos, capaces de ser usados por usuarios según los roles que tengan.

Saludos.

EDIT: He estado meditando, vamos hacer lo siguiente. Primeramente vamos hacer una instalación mono-nodo (en una sola VM), es más fácil y rápido. Una vez hayamos hecho el mono-nodo, si la peña está interesada pasamos al otro que ya tiene más chicha y nos podemos encontrar con más problemas.
Yo seguí este tutorial http://docs.openstack.org/juno/install-guide/install/apt-debian/content/ y conseguí montar algo básico (Controller + Compute + Network + KVM pa ver si funcionaba) y lo abandoné, espero me sirva este hilo para retomarlo ^^.

No se porqué me suena que para montarlo todo en 1 MV tuve que ponerle ips e interfaces diferentes a cada cosa, lo que no se es si hizo falta o es mi paranoia de hacer las cosas así...

alienvita2 escribió:En este sistema de 3 nodos se podria instalar hadoop en los 3 nodos? Podria ser interesante ver el rendimiento distribuido y standalone:)


Que nos liamos, la idea principal de openstack es hacer de anillo de sauron de los hipervisores (KVM, ESX, Hyperv, etc etc etc), Hadoop es un big data http://es.wikipedia.org/wiki/Big_data, es decir, puedes desplegar Hadoop en MV de hipervisores controlados por openstack que forman una nube.

En cualquier caso, para Hadoop, si alguien se atreve... Otro hilo, ¿no?.
Hola a todos, me parece un proyecto muy interesante asi que me apunto. Estoy dispuesto para cualquier ayuda!

Un saludo!
Como idea podiais ir montandolo con la estructura que se os ocurra e ir anotando el proceso. Podriamos tener una wiki con instalacion de diferentes escenarios y tal.

Como veis me falta Nova, Neutron y Horizon. Sin duda Neutron es bastante mas lioso y complicado. Mañana no se si podre avanzar algo y hoy me pegado 4-5 horas. Ya que voy montando y redactando, me encuentro problemas, soluciono, redacto, etc... Hay recetas y scripts para montarlo mas o menos ligero... Lo suyo es montarlo a pelo no? XDDDDD

Los componentes que ya teneis en el hilo los he ido probando al finalizar cada uno y todo OK. Igualmente os comento que el que le interese debería ir montando y si tiene problemas comentarlo, o si me encuentro yo con problemas que alguno me ayude xD

En la empresa lo estamos montando en 3 nodos (como haremos aqui cuando unos pocos lo hayamos montado en uno). Ya lo tenemos practicamente acabado, todos los componentes instalados y con el dashboard funcionando :D

Ánimo a todo el que se pringe!


EDIT:
Estoy haciendo un curso de uso de OpenStack, Os dejo una captura del panel de control que nos proporciona la plataforma Cirrusflex (es diferente a Horizon, pero es un OpenStack). Y tambien os enseño una instancia creada en la cual me logeo vía ssh mediante certificado de clave publica/privada:
Imagen
Estaba leyendo las instrucciones de la instalación y...me quedo cortísimo de RAM.
Alecs7k escribió:Estaba leyendo las instrucciones de la instalación y...me quedo cortísimo de RAM.

Para la instalación y tal no hace falta gran cosa, pero luego puedes tener problemas al levantar la instancia. Cuanta ram dispones?
Iverson88 escribió:
Alecs7k escribió:Estaba leyendo las instrucciones de la instalación y...me quedo cortísimo de RAM.

Para la instalación y tal no hace falta gran cosa, pero luego puedes tener problemas al levantar la instancia. Cuanta ram dispones?



4GB
Alecs7k escribió:
Iverson88 escribió:
Alecs7k escribió:Estaba leyendo las instrucciones de la instalación y...me quedo cortísimo de RAM.

Para la instalación y tal no hace falta gran cosa, pero luego puedes tener problemas al levantar la instancia. Cuanta ram dispones?



4GB

Puede ser un poco chungo, pero puedes probar a instalar (no se si podrás levantar alguna instancia).

Saludos.
Yo intenté instalar una OpenStack sobre Ubuntu con todo en una máquina de más de 16Gb de RAM y fue imposible. En cuanto empieza a levantar las instancias necesarias (creo que son como 7 u 8) se va al carajo porque se queda sin RAM y empieza a paginar todo.

En el curro al final optamos por desplegar OpenNebula, es más amigable en ambientes pequeños y se puede instalar todo en una máquina para pruebas. Y es una startup española.
14 respuestas