Instalación “manual” de OpenStack – Servicio de Computo (perspectiva operador/implementador)

Es momento de instalar el servicio encargado de proveer maquinas virtuales(instancias), este servicio resulta primordial para aquellas nubes orientadas a ofrecer servicios de computo como lo es High-Performance Computing. Conocido como «Nova», este proyecto (junto con Swift) es de los mas antiguos y su origen se remonta desde Austin release. A lo largo de su historia, Nova ha agregado soporte a multiples hipervisores, como lo son KVM, qemu, Hyper-V, VMware, XenServer, LXC, Docker, etc.

Por otra parte, el proyecto de nova ofrece una variedad de servicios que pueden ser separados en dos categorias: compute y controller. Dependiendo de la distro que se use los nombres de los servicios pueden variar, en la categoria de controller podemos encontrar los siguientes servicios o paquetes: nova-api, nova-cert, nova-consoleauth, nova-scheduler, nova-conductor y nova-novncproxy. Para el caso de la categoria de compute: solo es necesario nova-compute y opcionalmente, nova-network en caso de utilizar una configuración de Legacy Networking.

Nota: Existen algunas variantes de como o donde utilizar el servicio de nopa-api. Estas tres alternativas son resumidas en este articulo.

Comenzaremos con la instalación y configuración de servicios de Compute. Nuevamente es necesario modificar el archivo de Vagrantfile para poder habilitar los puertos necesarios, en este caso el 8774:

Vagrantfile

    config.vm.define :compute_controller do |compute_controller|
      compute_controller.vm.hostname = 'compute-controller'
      compute_controller.vm.network :private_network, ip: '192.168.50.14'
      compute_controller.vm.network :forwarded_port, guest: 8774, host: 8774
      compute_controller.vm.provision "shell", path: "nova-controller.sh"
      compute_controller.vm.provider "virtualbox" do |v|
        v.customize ["modifyvm", :id, "--memory", 2048]
      end
    end

Nota: Los servicios de nova controller utilizan memoria RAM adicional de la que ofrece la configuración por defecto de Vagrant, por lo que es necesario especificar ese cambio explicitamente.

nova-controller.sh

apt-get install -y ubuntu-cloud-keyring
echo "deb http://ubuntu-cloud.archive.canonical.com/ubuntu trusty-updates/juno main" >>  /etc/apt/sources.list.d/juno.list
apt-get update && apt-get dist-upgrade
apt-get install -y nova-api nova-cert nova-conductor nova-consoleauth nova-novncproxy nova-scheduler python-novaclient

Como ya es costumbre, es necesario registrar el repositorio que contiene los paquetes requeridos para el release de OpenStack a instalar. En el caso de los paquetes su instalación sera muy especifica, ya que puede existir variantes que estarán ligadas a la arquitectura deseada.

A continuación describiré las secciones a configurar.

nova-controller.sh

echo "my_ip = 192.168.50.14" >> /etc/nova/nova.conf
echo "novncproxy_host = 0.0.0.0" >> /etc/nova/nova.conf
echo "novncproxy_port = 6080" >> /etc/nova/nova.conf

echo "rpc_backend = rabbit" >> /etc/nova/nova.conf
echo "rabbit_host = message-broker" >> /etc/nova/nova.conf
echo "rabbit_password = secure" >> /etc/nova/nova.conf

echo "auth_strategy = keystone" >> /etc/nova/nova.conf
echo "" >> /etc/nova/nova.conf
echo "[keystone_authtoken]" >> /etc/nova/nova.conf
echo "identity_uri = http://identity:35357" >> /etc/nova/nova.conf
echo "admin_tenant_name = service" >> /etc/nova/nova.conf
echo "admin_user = nova" >> /etc/nova/nova.conf
echo "admin_password = secure" >> /etc/nova/nova.conf

echo "" >> /etc/nova/nova.conf
echo "[glance]" >> /etc/nova/nova.conf
echo "host = image" >> /etc/nova/nova.conf

El primer grupo de instrucciones pretende configurar valores básicos del servicio de nova, como la ip del nodo de controller, y los valores para el servicio de VNC por el cual los clientes se conectaran a las instancias. El segundo grupo, pretende conectar el servicio de nova con el servicio de cola mensajes, de esta forma ira procesando peticiones de clientes tan pronto pueda. El cuarto bloque de instrucciones especifica valores referentes a la autorización y autenticación de usuarios por medio del servicio de Identidad. Y por ultimo el quinto bloque refiere a el hostname o IP del nodo que ofrece el servicio de Imagenes.

nova-controller.sh

echo "" >> /etc/nova/nova.conf
echo "[database]" >> /etc/nova/nova.conf
echo "connection = mysql://nova:secure@database/nova" >> /etc/nova/nova.conf

apt-get install -y python-mysqldb
su -s /bin/sh -c "nova-manage db sync" nova

Intencionalmente aisle las instrucciones referentes al manejo de la conexión y sincronización de la base de datos. En nuestro caso el manejador de base de datos que utilizamos es un MySQL, por lo que para la ejecución de «nova-manage db sync» es necesario tener instalado su ORM utilizando el modulo de python-mysqldb.

nova-controller.sh

service nova-api restart
service nova-cert restart
service nova-consoleauth restart
service nova-scheduler restart
service nova-conductor restart
service nova-novncproxy restart

Por ultimo no queda mas que reiniciar cada uno de los servicios para que estos utilicen los cambios realizados en el archivo de configuración.