Reynaldo R. Martinez P. E-Mail: [email protected] Caracas, Venezuela.
Este instalador fue realizado para automatizar las tareas de creación de una infraestructura de virtualización basada en OpenStack. Hasta el momento, existen dos "sabores" del instalador, uno para Debian 7 y otra para Centos 6.
Ambos sabores producen esencialmente lo mismo: Un OpenStack completamente utilizable para producción.
LEA, LEA, LEA y luego de descansar de leer, LEA DE NUEVO !!.
Lea todo lo que puede de OpenStack si desea incursionar en el área de
virtualización en la nube. Si no le gusta leer, entonces apóyese en alguien
que si tenga la disposición para hacerlo, pero no trate de usar este
instalador sin tener algún tipo de conocimientos a la mano. Vea el archivo
NOTAS.txt
para entender un poco mas de cuales conocimientos usted debería
tener.
El sub-mundo de OpenStack engloba varias tecnologías del mundo de Software Libre y del mundo de Redes que deben ser comprendidas muy bien antes de siquiera intentar hacer cualquier instalación de openstack ya sea con esta herramienta de instalación o con cualquier otra. En resumen, si usted no tiene los conocimientos, no lo intente. Adquiera los conocimientos primero, y luego proceda !.
Antes de usar el instalador, debe preparar su o sus servidores. De nuevo, en
el archivo NOTAS.txt
hay puntos importantes que deben ser cubiertos antes de
iniciar una instalación usando estas herramientas. El instalador hará una
serie de validaciones que, en caso de arrojar resultados negativos, hará que
aborte el proceso.
El instalador tiene un archivo central de configuración:
./configs/main-config.rc
. Dicho archivo está bastante documentado, de manera
que si usted hizo su tarea y estudió de OpenStack, sabrá que debe modificar
en el mismo. Hay cosas muy obvias como contraseñas, direcciones IP,
módulos a instalar y dominios de dns.
En su versión por defecto, el archivo de configuración tiene las selecciones de módulos para instalar lo que se conoce como un "all-in-one" (un servidor monolítico de OpenStack con todos los servicios).
Adicionalmente, existen tres módulos que por defecto están en "no":
Ceilometer, Swift y SNMP. En la versión de OpenStack usada por este
instalador (Grizzly) Ceilometer está aun en prueba de concepto. El módulo de
swift se puede instalar "si usted realmente va a usarlo". Swift por si solo ya
es casi tan extenso como todo OpenStack. Úselo si REALMENTE sabe lo que está
haciendo y si REALMENTE lo va a utilizar. El módulo de SNMP instala variables
de monitoreo útiles si usted va a monitorear OpenStack vía SNMP pero no
instala ningún tipo de aplicación de monitoreo. Las variables están descritas
(si usted instala el soporte) en el archivo /etc/snmp/snmpd.conf
.
Si usted desea instalar un "all-in-one", sólo modifique las contraseñas, direcciones IP y dominios de correo y de dhcp/dnsmasq que aparecen en el archivo de configuración.
Luego de actualizar su archivo de configuración, ejecute en la raíz del directorio del script el comando siguiente:
# ./main-installer.sh install
El instalador le preguntará si quiere proceder (y/n).
Si ejecuta el instalador con el parámetro adicional auto, el mismo seguirá de manera automática sin preguntar. Ejemplo:
# ./main-installer.sh install auto
Usted puede guardar todas las salidas del instalador usando la herramienta
tee
. Ejemplo:
Si su nodo de controller va a incluir un servicio de compute (controller + compute), la siguiente variable del archivo de configuración debe estar en "no":
nova_without_compute="no"
En cambio, si va a instalar un controlador "puro" (sin servicio de compute) coloque la variable en "yes":
nova_without_compute="yes"
Nodos de compute: Para los nodos de compute, debe dejar en "yes" sólo las variables de instalación de los módulos de nova y quantum. El resto de los módulos (glance, cinder, horizon, etc.) deben estar en "no". Adicionalmente, las siguiente variables en las secciones de nova y quantum deben estar en "yes":
nova_in_compute_node="yes"
quantum_in_compute_node="yes"
Debe colocar las IP's de los servicios de quantum, keystone, glance y cinder según la que tiene el controlador (incluyendo las Ip's del backend de Base de Datos). En cambio, las siguientes variables deben ser colocadas a la IP del nodo de compute:
novahost="IP del Nova Compute Host"
glancehost="IP del Controlador"
cinderhost="IP del controlador"
quantumhost="IP del controlador"
keystonehost="IP del controlador"
messagebrokerhost="IP del controlador"
dbbackendhost="IP del controlador o del backend de base de datos"
vncserver_controller_address | spiceserver_controller_address = "IP del controlador"
El instalador tiene la posibilidad de instalar y configurar el backend de base de datos, y de crear las bases de datos. Esto es completamente controlable por el archivo de configuración a través de las siguientes variables:
dbcreate="yes"
dbinstall="yes"
dbpopulate="yes"
Con estas tres opciones en "yes", se instalará el software de base de datos, se configurará y se crearán las bases de datos, todo con la información contenida en el archivo de configuración.
ALERTA: Si usted elige estas opciones, se debe asegurar que no exista previamente software de base de datos instalado o el proceso fallará.
Si usted desea "no instalar el software" pero si tiene acceso administrativo completo al backend de base de datos, coloque las siguiente combinación:
dbcreate="yes"
dbinstall="no"
dbpopulate="yes"
Con esto, el software de base de datos no será instalado, pero queda de parte de usted (o su DBA) asegurarse que tiene acceso administrativo completo para crear y modificar bases de datos en el backend seleccionado.
Si no desea ni instalar ni crear bases de datos (asumimos que ya las tiene previamente creadas) coloque los tres valores en "no":
dbcreate="no"
dbinstall="no"
dbpopulate="no"
Como parte de los componentes a instalar y configurar, este instalador instala y configura el software para AMQP (el Message Broker). Esto es un paso mandatorio para un controlador o un all-in-one. Si su o sus servidores ya tienen un messaje broker instalado, pueden ocurrir conflictos que prevengan el correcto funcionamiento de la instalación.
Este instalador colocará en /usr/local/bin un script de ayuda para poder levantar, bajar, desactivar, activar los servicios de openstack:
openstack-control.sh OPCIÓN
El script utiliza las siguientes opciones:
-
enable: activa los servicios para autoarranque en el boot del servidor.
-
disable: desactiva los servicios para autoarranque en el boot del servidor.
-
start: arranca todos los servicios.
-
stop: detiene todos los servicios.
-
restart: reinicia todos los servicios.
-
status: muestra el estado de todos los servicios.
IMPORTANTE: El script "openstack-control.sh" tiene la gran ventaja de subir (o bajar) todos los servicios de openstack en el orden correcto. Tanto los paquetes de debian como los de centos colocan el orden no precisamente "óptimo". Recomendación: colocar lo siguiente en el /etc/rc.d/rc.local del servidor para forzar a que los servicios de OpenStack arranquen en el orden correcto:
/usr/local/bin/openstack-control.sh restart
NOTA: El script detecta que servicios de OpenStack fueron instalados y configurados por el instalador para iniciar/detener/reiniciar/habilitar/deshabilitar/verificar los servicios correctos en el orden correcto.
Adicional a openstack-control.sh
, el instalador copia a /usr/local/bin
el
script openstack-log-cleaner.sh
. Este script tiene como función limpiar
todos los logs de todos los componentes de OpenStack instalados por esta
herramienta de instalación.
El script es llamado durante la fase final de instalación para limpiar los logs antes de dejar el servidor instalado, pero puede ser utilizado también para limpiar los logs en caso de ser necesario.
El instalador crea una configuración personalizada del componente dnsmasq
usado por el agente DHCP de Quantum (quantum-dhcp-agent
). Dicha configuración
incluye un archivo donde usted puede colocar opciones especiales:
/etc/dnsmasq-quantum.d/quantum-dnsmasq-extra.conf
Hay ejemplos comentados en el archivo. Use esos ejemplos para pasar opciones a las distintas instancias de dnsmasq creadas para cada subred donde usted active la opción de usar dhcp.
Recomendación: Trate de tener una buena estructura de "DNS" para sus máquinas virtuales de manera que las pueda identificar de manera apropiada y utilice las opciones de dnsmasq para agregar o separar subdominios para cada rango de IP's.
Si bien el proceso de instalación principal "main-installer" se encarga de llamar a cada módulo de cada componente del instalador, dichos módulos son realmente independientes entre si, al punto de que pueden ser llamados de manera secuencial. No es el caso común, pero puede hacerse. El orden normal de ejecución de cada módulo es el siguiente (asumiendo que todos los componentes serán instalados):
- requeriments.sh
- messagebrokerinstall.sh
- databaseinstall.sh
- requeriments-extras.sh (sólo presente en el "sabor" de debian 7)
- keystoneinstall.sh
- swiftinstall.sh
- glanceinstall.sh
- cinderinstall.sh
- quantuminstall.sh
- novainstall.sh
- ceilometerinstall.sh
- snmpinstall.sh
- horizoninstall.sh
- postinstall.sh
Si desea ejecutar los módulos en orden sin usar el instalador principal, debe ejecutarlos desde el directorio donde se encuentra el instalador, de la siguiente manera:
# ./modules/Modulo-a-ejecutar.sh
Todos los módulos leen el archivo de configuración
(./configs/main-config.rc
) y tomarán las opciones de configuración desde
dicho archivo.
Cada módulo que se ejecuta de manera exitosa dejará una serie de archivos de control en el directorio siguiente:
/etc/openstack-control-script-config
Dichos archivos de control son utilizados por los módulos para evitar una re-ejecución de los mismos que pueda causar problemas en la instalación de OpenStack, y también son utilizados por el script "openstack-control.sh" para saber que componentes de OpenStack fueron instalados de manera exitosa y que servicios están instalados para iniciar/detener/reiniciar/etc.
-
Instale centos con la selección de paquetes para "Basic Server" (servidor básico). Asegúrese de tener correctamente instalado, configurado y operativo el servicio ntpd. Se recomienda también usar ntpdate.
-
Agregue los repositorios EPEL y RDO (ver "NOTAS.txt").
-
Instale y configure OpenVSWitch (de nuevo, ver "NOTAS.txt").
-
Instale debian con la selección de paquetes "Standard System Utilities" (utilitarios de sistema estandard) y con SSH Server (servidor ssh). Asegúrese de tener correctamente instalado, configurado y operativo el servicio ntpd. Se recomienda también usar ntpdate.
-
Agregue el repositorio de OpenStack para Debian y asegúrese de tener las ramas completas para sus repos de debian (ver "NOTAS.txt").
-
Instale y configure OpenVSWitch (de nuevo, ver "NOTAS.txt").
Si va a usar CINDER con lvm-iscsi, asegúrese de tener una partición o disco libre para crear un LVM llamado "cinder-volumes". Ejemplo (disco libre /dev/sdc):
pvcreate /dev/sdc
vgcreate cinder-volumes /dev/sdc
Otro ejemplo con una partición libre /dev/sda3:
pvcreate /dev/sda3
vgcreate cinder-volumes /dev/sda3
Si va a usar swift, recuerde que debe tener el disco/partición de swift montado sobre un directorio específico y este debe ser indicado en la configuración del instalador (main-config.rc).
Ejemplo:
Variable swiftdevice="d1"
En el fstab "d1" debe estar montado así:
/dev/sdc1 /srv/node/d1 ext4 acl,user_xattr 0 0
En este ejemplo, se asume que existe ya una partición "/dev/sdc1" previamente formateada en ext4 o cualquier otro sistema de archivos soportado por Linux.
También puede usar un recurso NFS. Ejemplo:
192.168.56.1:/exports/nfs_for_swift /srv/node/d1 nfs rw,auto,vers=3,proto=tcp,acl,user_xattr 0 0
Tanto en debian como en centos, debe elegir utilizar 64 bits (amd64/x86_64). No trate de instalar OpenStack en 32 bits.
Es VITAL que sus servidores de OpenStack tengan una correcta sincronización de tiempo o habrá serios problemas entre el controller y los nodos de compute. Lea la documentación de OpenStack para saber mas al respecto.
Usted puede usar este instalador en una VM de VirtualBox si no desea usar un servidor "real" para practicar y aprender OpenStack. Debería tener un "mínimo absoluto" de 2GB's de RAM en su equipo "real" y asignar al menos 900 Mb's de RAM a la VM de VirtualBox, pero si quiere hacer una prueba mas extensa, trate de tener una VM con al menos 4 GB's.
Discos Duros: Uno para el sistema operativo (16 Gb's mínimo), uno para Cinder-Volumes y otro para swift - espacio variable... mínimo 8GB's para cada disco (switf y cinder-volumes). Red: tres interfaces:
- Interfaz 1 en modo NAT para salida a Internet.
- Interfaz 2 en modo "host only adapter, promisc: todos", para poder administrar el Servidor OpenStack - sugerencia: Usar vboxnet0 con la red 192.168.56.0/24 (desactivar el dhcp de virtualbox) y asignarle la IP 192.168.56.2 a la interfaz (la .1 estará en la máquina real).
- Interfaz 3 en modo "host only adapter, promiscq:q: todos", para poder asignar a las VM's de OpenStack la red en la interfaz eth2 y el rango IP 192.168.57.0/24 (la IP 192.168.57.1 estará en la máquina real).
Hacer la instalación del S/O de 64 bits de su preferencia. Agregar los repositorios y soporte ntp según las recomendaciones en este documento, crear el switch de OpenVSWITCH br-int, crear el switch de OpenVSWITCH br-eth2 y agregarle el puerto eth2 (la interfaz 3 en la VM de VirtualBox).
Crear el volumen de cinder contra el segundo disco duro de la VM de virtualbox:
pvcreate /dev/sdb
vgcreate cinder-volumes /dev/sdb
Si va a usar swift, crear la partición en el tercer disco (/dev/sdc1) y montarla según las notas en este documento.
Hacer la instalación indicando que el Mapping de bridge (dentro de main-config.rc) es:
bridge_mappings="publica:br-eth2"
Cambiar la IP en el main-config.rc
a la IP asignada a la VM en la red
192.168.57.0/24.
Ejecutar el instalador.
Disfrutar de OpenStack :-)
Usted podrá entrar al servidor vía web por la interfaz 192.168.56.x para ejecutar las tareas de administración de OpenStack. Creé su subred en el rango de eth2 (192.168.57.0/24) y podrá entrar a las VM's de OpenStack desde su máquina real que tendrá la interfaz 192.168.57.1.
El script principal tiene también un parámetro que llama al módulo de desinstalación:
# ./main-installer.sh uninstall
o
# ./main-installer.sh uninstall auto
La primera forma de llama al proceso de desinstalación, preguntará "y/n" para proseguir o abortar, pero al ser llamado con el parámetro extra "auto", no habrá preguntas y todo lo que el instalador instaló será eliminado del servidor.
Es importante tener en cuenta que si se utilizó la opción dbinstall="yes", el desinstalador eliminará no solamente el manejador de base de datos sino también las bases de datos creadas.
Si usted desea NO ELIMINAR las bases de datos creadas, modifique el "main-config.rc" y coloque la opción dbinstall="no". Esto hará que el desinstalador no elimine ni el manejador de base de datos ni las bases de datos creadas.
Esto es muy conveniente para una reinstalación. Si por alguna razón su instalación de OpenStack requiere ser reconstruida sin tocar las bases de datos o el manejador, desinstale usando dbinstall="no", y cuando vaya a reinstalar, coloque todas las opciones de base de datos en "no" para conservar tanto el manejador como las bases de datos y data creada:
dbcreate="no"
dbinstall="no"
dbpopulate="no"
Si su instalación tiene múltiples nodos (controller / compute) use los
archivos main-config.rc
con los que instaló cada nodo para la desinstalación
del nodo correspondiente.
En el directorio Goodies usted podrá encontrar algunos scripts (cada uno con su respectivo readme) que puede utilizar con su instalación de OpenStack. Vea los scripts y sus respectivos "readmes" para entender mejor como usarlos !.
Este instalador fue orientado inicialmente al modelo de red flat/vlan's con router externos donde el módulo de red (Quantum) no canalizará tráfico (sólo manejará los recursos de puertos de ovs y lbaas y levantará las configuraciones necesarias). En este modelo, quantum "no se convierte" en un posible cuello de botella para el tráfico de red. Sin embargo, usted "si tiene los conocimientos de configuración de openstack" puede adaptar la configuración y/o los módulos a sus necesidades en caso de querer utilizar el modelo de tunneling o cualquier otra configuración de Quantum que requiera.