La palabra "OpenStack" es bastante popular en estos días. Es posible que haya escuchado esta palabra, incluso si no está trabajando en el área de la computación en la nube. He estado trabajando en el dominio de la computación Grid durante los últimos 10 años y nunca entendí el alboroto detrás de OpenStack. Pero esta palabra de moda seguía tocando mis oídos dondequiera que iba:en serio, en mi oficina, conferencias y sitios web populares que seguían promocionando OpenStack. Finalmente, mi jefe me empujó (sí, a la fuerza) al mundo de OpenStack y estas grandes preguntas me afectaron:¿Qué es Openstack, cómo se implementa y cómo funciona? Bueno, la única forma de entender OpenStack es comenzar con una instalación.
A primera vista, comenzar con OpenStack parecía fácil, pero no lo es. Sí, el sitio web oficial de OpenStack tiene una buena documentación, pero el verdadero problema al que me enfrenté fue la terminología utilizada:Horizon, Glance, Keystone, Nova, Neutron, Swift, Heat, Cinder, Ceilometer... Uff, ¿por qué diablos son? llamado así? Y luego, hubo varios otros términos vinculados a la instalación:RDO, Packstack, Devstack, diferentes arquitecturas (un nodo, dos nodos y multinodo), redes heredadas, etc. En serio, tuve que volver corriendo a Google para entender todos esos (y este chico ha hecho un gran trabajo). Bueno, si me pide que escriba sobre mi experiencia con OpenStack, este artículo tendrá 20 páginas. Así que me detendré aquí e iré al tema.
Índice
- Introducción a OpenStack
- Arquitectura de banco de pruebas
- Instalar y configurar NTP tanto en el controlador como en el nodo de cómputo
- Instalar y configurar MySQL tanto en el controlador como en el nodo de cómputo
- Instalar y configurar Apache Qpid tanto en el controlador como en el nodo de cómputo
- Instalar los paquetes básicos de OpenStack Icehouse en el controlador y el nodo de computación
- Instalar KeyStone en el nodo del controlador
- Instalar Glance en el nodo del controlador
- Instalar Nova en el nodo del controlador
- Instalar Nova-Networking en el nodo del controlador
- Instalar Dashboard en el nodo del controlador
- Instalar Nova en el nodo de computación
- Instalar Nova-Networking en Compute Node
- Crear una instancia
- Iniciar sesión en la instancia
¿Qué es OpenStack?
OpenStack es una plataforma informática en la nube de código abierto que proporciona infraestructura como servicio (IaaS). Si es un experto en computación Grid, entonces OpenStack es algo similar al popular middleware Grid como Globus Toolkit, Glite, Oracle Grid Engine, Unicore, etc. OpenStack es básicamente un middleware que le permite administrar los recursos de computación en la nube de manera más eficiente y , efectivamente.
Servicios OpenStack
- Horizonte :un servicio de tablero que proporciona un portal web para interactuar y administrar los servicios subyacentes, las instancias virtuales, los usuarios y la red.
- Nova :un servicio de cómputo que ayuda a administrar instancias de cómputo, lo que incluye generar, programar, arrancar y terminar una máquina virtual.
- Clave :un servicio de identidad que proporciona autenticación y autorización.
- neutrón :un servicio de red que le permite crear y administrar redes.
- Vistazo :un servicio de imágenes que ayuda a almacenar y obtener imágenes de máquinas virtuales.
- Base de datos servicio :proporciona la base de datos como un servicio.
- Swift y Cinder :proporciona almacenamiento como servicio.
- Telemetría :un servicio que lo ayuda a administrar la facturación y la evaluación comparativa.
- Hay muchos otros servicios... lea más en openstack.org.
Arquitectura
Si es un principiante, entonces la forma ideal es comenzar con una arquitectura de dos nodos:un nodo llamado "Controlador" y el otro como "Computación". En este tutorial, instalaremos la versión OpenStack Icehouse en el sistema operativo CentOS 6.6. Los servicios que se instalarán en el nodo del controlador son Keystone, Glance, Nova, Networking (heredado nova-networking), Horizon y el nodo de cómputo tendrá Nova y Networking (heredado nova-networking).
A continuación se muestra el diagrama que representa mi banco de pruebas. Todos mis pasos de instalación se basan en la siguiente arquitectura.
Bueno, estamos listos para continuar con los pasos de instalación.
¿Cómo instalar y configurar OpenStack Icehouse en CentOS?
usaré,
- ‘nombre de host del controlador ' como el nombre de host del nodo del controlador y "compute-hostname ” como el nombre de host del nodo Compute.
- '10.180.10.132' (IP de administración) para el nodo del controlador y '10.180.10.134' (IP de administración) para el nodo de cómputo. La IP externa del nodo de cómputo será '10.180.14.151'
- Durante la instalación, dondequiera que encuentre 'setpassword ', reemplácelo con la contraseña de servicio correspondiente.
- Usaré 'YUM' durante la mayor parte de la instalación. Así que asegúrese de que las máquinas estén conectadas a Internet. En caso de que tenga problemas para configurar yum, las siguientes guías serán de gran ayuda.
- Cómo configurar el repositorio de Yum en CentOS
- Yum comandos que debes conocer.
- La salida de algunos comandos se ha truncado para evitar confusiones y reducir la duración de este tutorial.
La instalación de cualquier componente (o servicio) en OpenStack implica los siguientes pasos:
Instalar y configurar NTP tanto en el controlador como en el nodo de cómputo
Puede saltar rápidamente para aprender cómo instalar y configurar el Protocolo de tiempo de red en su controlador y nodos de cómputo.
¿Configuró NTP e inició el servicio ntpd? Entonces volvamos a este artículo…
Actualizar el sistema operativo tanto en el controlador como en el nodo informático
Siempre se recomienda actualizar el sistema operativo antes de instalar cualquier componente. Resolverá muchos dolores de cabeza por dependencia de paquetes.
[root@controller-hostname ]# yum update [root@compute-hostname ]# yum update
Instalar la base de datos MySQL tanto en el controlador como en el nodo de cómputo
[root@controller-hostname ]# yum install mysql mysql-server MySQL-python [root@compute-hostname ]# yum install mysql mysql-server MySQL-python
Tendrás que buscar en ‘/etc/my.cnf ‘ para garantizar que el servicio MySQL se vinculará con la dirección IP de administración tanto del controlador como de los nodos de cómputo.
En el nodo del controlador :
[root@controller-hostname ]# vi /etc/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql bind-address=10.180.10.132 symbolic-links=0 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
En el nodo de cómputo :
[root@compute-hostname ]# vi /etc/my.cnf [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql bind-address=10.180.10.134 symbolic-links=0 [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
Inicie el servidor mysql:
[root@controller-hostname ~]# service mysqld start [root@compute-hostname ~]# service mysqld start
Configurar MySQL…
[root@controller-hostname ~]# mysql_install_db [root@compute-hostname ~]# mysql_install_db
Siempre se recomienda ejecutar 'mysql_secure_installation ‘ después de instalar MySQL.
[root@controller-hostname ~]# mysql_secure_installation [root@compute-hostname ~]# mysql_secure_installation
Si no está seguro de lo que hace mysql_secure_installation, aquí hay una guía rápida que lo explica en detalle.
Instalar paquetes básicos de OpenStack Icehouse en el controlador y el nodo de cómputo
Configure el repositorio de yum e instale los paquetes básicos de Icehouse. Este paso debe realizarse tanto en el controlador como en los nodos de cómputo.
En el nodo del controlador:
[root@controller-hostname ~]# yum install yum-plugin-priorities [root@controller-hostname ~]# yum install http://repos.fedorapeople.org/repos/openstack/openstack-icehouse/rdo-release-icehouse-4.noarch.rpm [root@controller-hostname ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-RDO-Icehouse [root@controller-hostname ~]# yum -y install http://fedora.cu.be/epel/7/x86_64/e/epel-release-7-2.noarch.rpm [root@controller-hostname ~]# yum install openstack-utils openstack-selinux
En el nodo Compute:
[root@compute-hostname ~]# yum install yum-plugin-priorities [root@compute-hostname ~]# yum install http://repos.fedorapeople.org/repos/openstack/openstack-icehouse/rdo-release-icehouse-4.noarch.rpm [root@compute-hostname ~]# rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-RDO-Icehouse [root@compute-hostname ~]# yum -y install http://fedora.cu.be/epel/7/x86_64/e/epel-release-7-2.noarch.rpm [root@compute-hostname ~]# yum install openstack-utils openstack-selinux
Instalar Message Broker Service en el nodo del controlador
Los servicios de OpenStack necesitan un intermediario de mensajes para su comunicación. Actualmente, OpenStack es compatible con Rabbit-mq y Apache Qpid. En este tutorial, instalaremos Qpid-server.
Apache Qpid permite que los servicios envíen y reciban mensajes a través de AMQP (Advanced Message Queuing Protocol).
[root@controller-hostname ~]# yum install qpid-cpp-server
Configurar qpid-cpp-servidor para trabajar sin necesidad de autenticación (esto facilitará nuestro proceso de instalación. Pero debe habilitar la autenticación por razones de seguridad)
[root@controller-hostname ~]# echo "auth=no">/etc/qpid/qpidd.conf
Iniciar el intermediario de mensajes...
[root@controller-hostname ~]# service qpidd start
Instalación y configuración de Keystone (servicio de identidad) en el nodo del controlador
Como dije anteriormente, el servicio Keystone juega un papel importante en OpenStack, proporcionando autenticación y autorización. También significa que todos los servicios de OpenStack (incluido el servicio de identidad) deben registrarse con KeyStone.
Instalar paquetes Keystone...
[root@controller-hostname ~]# yum install openstack-keystone python-keystoneclient
Crear una base de datos para keystone , para que el servicio pueda almacenar su estado y datos...
[root@controller-hostname ~]# mysql -u root -p mysql> CREATE DATABASE keystone; mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'controller-hostname' IDENTIFIED BY 'setpassword'; mysql> GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'setpassword';
Crear tablas para la base de datos keystone...
[root@controller-hostname ~]# su -s /bin/sh -c "keystone-manage db_sync" keystone
Ahora, dígale a Keystone que esto es lo que debe usar para hacer una conexión a la base de datos
[root@controller-hostname ~]# openstack-config --set /etc/keystone/keystone.conf database connection mysql://keystone:setpassword@controller-hostname/keystone
Cree un token de autenticación para autenticar otros servicios con keystone. Para hacer eso, usaremos openssl para generar un valor HEX aleatorio y almacenarlo en una variable llamada 'ADMIN_TOKEN ‘
[root@controller-hostname ~]# ADMIN_TOKEN=$(openssl rand -hex 10) [root@controller-hostname ~]# echo $ADMIN_TOKEN e9393f7ac1886f0c1a20
Configurar Keystone para usar el token de autenticación generado en el paso anterior…
[root@controller-hostname ~]# openstack-config --set /etc/keystone/keystone.conf DEFAULT admin_token $ADMIN_TOKEN
Configure Keystone para proporcionar tokens de autenticación basados en PKI.
[root@controller-hostname ~]# keystone-manage pki_setup --keystone-user keystone --keystone-group keystone
Establecer propiedad y permiso para el usuario 'keystone'...
[root@controller-hostname ~]# chown -R keystone:keystone /etc/keystone/ssl [root@controller-hostname ~]# chmod -R o-rwx /etc/keystone/ssl
Todo listo para keystone, comencemos el servicio...
[root@controller-hostname ~]# service openstack-keystone start
Asegúrese de que el servicio realmente se esté ejecutando comprobando su estado
[root@controller-hostname ~]# service openstack-keystone status keystone (pid 10245) is running...
En caso de que el servicio esté muerto después de iniciarse, debe solucionar ese problema en este punto.
Configure el servicio para que se inicie automáticamente durante el arranque del sistema...
[root@controller-hostname ~]# chkconfig openstack-keystone on
Borrar automáticamente tokens keystone caducados...
Es posible que haya muchos tokens caducados en Keystone durante su funcionamiento, lo que aumenta el tamaño de la base de datos de Keystone. Es una buena idea limpiarlos a intervalos regulares. Para hacer eso, configuraremos trabajos cron como se muestra a continuación:
[root@controller-hostname ~]# echo '@hourly /usr/bin/keystone-manage token_flush >/var/log/keystone/keystone-tokenflush.log 2&>&1' >> /var/spool/cron/keystone [root@controller-hostname ~]# crontab -l -u keystone @hourly /usr/bin/keystone-manage token_flush > /var/log/keystone/keystone-tokenflush.log 2&>&1
Crear usuarios, inquilinos y roles para keystone
Antes de ejecutar comandos trapezoidales, debe establecer ciertas variables de entorno. Para hacer eso, cree un archivo llamado 'admin-openrc.sh ' y establezca las variables de entorno de la siguiente manera:
[root@controller-hostname ~]# vi admin-openrc.sh export OS_USERNAME=admin export OS_PASSWORD=setpassword export OS_TENANT_NAME=admin export OS_AUTH_URL=http://controller-hostname:35357/v2.0 [root@controller-hostname ~]# source admin-openrc.sh
Vamos a crear un usuario...
[root@controller-hostname ~]# keystone user-create --name=admin --pass=setpassword --email=keystone@controller-hostname
Crear un rol...
[root@controller-hostname ~]# keystone role-create --name=admin
Crear un inquilino...
[root@controller-hostname ~]# keystone tenant-create --name=admin --description="Admin Tenant"
Tendremos que vincular el usuario con el rol y el arrendatario creado en los pasos anteriores…
[root@controller-hostname ~]# keystone user-role-add --user=admin --role=admin --tenant=admin
Registre el keystone (servicio de identidad) en el servicio KeyStone
[root@controller-hostname ~]# keystone tenant-create --name=service --description="Service Tenant" [root@controller-hostname ~]# keystone service-create --name=keystone --type=identity --description="OpenStack Identity" [root@controller-hostname ~]# keystone endpoint-create --service-id=$(keystone service-list | awk '/ compute / {print $2}') --publicurl=http://controller-hostame:8774/v2/%\(tenant_id\)s --internalurl=http://controller-hostame:8774/v2/%\(tenant_id\)s --adminurl=http://controller-hostame:8774/v2/%\(tenant_id\)s
Eso es todo, la configuración de KeyStone está lista... En caso de que tenga algún problema durante la instalación y configuración de Keystone, aquí tiene una solución para varios errores de Keystone:Errores y soluciones comunes del servicio de Keystone .
Instalar Glance (servicio de imágenes) en el nodo del controlador
El servicio de imágenes se instalará en el nodo del controlador para alojar todas las imágenes que se utilizarán para arrancar las máquinas virtuales en el nodo de cálculo.
[root@controller-hostname ~]# yum install openstack-glance python-glanceclient
Configurar el "vistazo" de la base de datos...
[root@controller-hostname ~]# mysql -u root -p mysql> CREATE DATABASE glance; mysql> GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'controller-hostname' IDENTIFIED BY 'setpassword'; mysql > GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY 'setpassword';
Crear tablas para la base de datos 'vistazo'...
[root@controller-hostname ~]# su -s /bin/sh -c "glance-manage db_sync" glance
Configurar el servicio de vistazo para leer las credenciales de la base de datos...
[root@controller-hostname ~]# openstack-config --set /etc/glance/glance-api.conf database connection mysql://glance:setpassword@controller-hostname/glance [root@controller-hostname ~]# glance-registry.conf database connection mysql://glance:setpassword@controller-hostname/glance
Crear usuario de Glance en KeyStone...
[root@controller-hostname ~]# keystone user-create --name=glance --pass=setpassword --email=glance@controller-hostname
Agregar usuario de vistazo al rol 'admin'
[root@controller-hostname ~]# keystone user-role-add --user=glance --tenant=service --role=admin
Configurar autenticación para Glance...
[root@controller-hostname ~]# openstack-config --set /etc/glance/glance-api.conf keystone_authtoken auth_uri http://controller-hostname:5000 [root@controller-hostname ~]# openstack-config --set /etc/glance/glance-api.conf keystone_authtoken auth_host controller-hostname [root@controller-hostname ~]# openstack-config --set /etc/glance/glance-api.conf keystone_authtoken auth_port 35357 [root@controller-hostname ~]# openstack-config --set /etc/glance/glance-api.conf keystone_authtoken auth_protocol http [root@controller-hostname ~]# openstack-config --set /etc/glance/glance-api.conf keystone_authtoken admin_tenant_name service [root@controller-hostname ~]# openstack-config --set /etc/glance/glance-api.conf keystone_authtoken admin_user glance [root@controller-hostname ~]# openstack-config --set /etc/glance/glance-api.conf keystone_authtoken admin_password setpassword [root@controller-hostname ~]# openstack-config --set /etc/glance/glance-api.conf paste_deploy flavor keystone [root@controller-hostname ~]# openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken auth_uri http://controller-hostname:5000 [root@controller-hostname ~]# openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken auth_host controller-hostname [root@controller-hostname ~]# openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken auth_port 35357 [root@controller-hostname ~]# openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken auth_protocol http [root@controller-hostname ~]# openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken admin_tenant_name service [root@controller-hostname ~]# openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken admin_user glance [root@controller-hostname ~]# openstack-config --set /etc/glance/glance-registry.conf keystone_authtoken admin_password setpassword [root@controller-hostname ~]# openstack-config --set /etc/glance/glance-registry.conf paste_deploy flavor keystone
Registrar el servicio Glance en KeyStone...
[root@controller-hostname ~]# keystone service-create --name=glance --type=image --description="OpenStack Image Service" [root@controller-hostname ~]# keystone --os-token=fd465d38e342ddc68be3 --os-endpoint=http://controller-hostname:35357/v2.0 endpoint-create --service-id=$(keystone service-list | awk '/ image / {print $2}') --publicurl=http://controller-hostname:9292 --internalurl=http://controller-hostname:9292 --adminurl=http://controller-hostname:9292
Iniciar servicios de vistazo...
[root@controller-hostname ~]# service openstack-glance-api start [root@controller-hostname ~]# service openstack-glance-registry start [root@controller-hostname ~]# chkconfig openstack-glance-api on [root@controller-hostname ~]# chkconfig openstack-glance-registry on
Probar el servicio Glance...
Ahora descargaremos la imagen de Cirros para probar el servicio de vistazo. Cirros es un pequeño sistema operativo Linux que ocupa unos pocos MB, por lo que es bastante fácil de descargar y agregar al servicio Glance.
[root@controller-hostname ~]# wget http://cdn.download.cirros-cloud.net/0.3.2/cirros-0.3.2-x86_64-disk.img [root@controller-hostname ~]# glance image-create --name=cirros --disk-format=qcow2 --container-format=bare --is-public=true < cirros-0.3.2-x86_64-disk.img
Agregue la imagen de CentOS al servicio de vistazo
[root@controller-hostname ~]# wget http://cloud.centos.org/centos/6/images/CentOS-6-x86_64-GenericCloud-20141129_01.qcow2.xz
Después de descomprimir la imagen .xz, agregue la imagen al servicio Glance.
[root@controller-hostname ~]# glance image-create --name 'Centos-6' --disk-format qcow2 --container-format bare --is-public=true < CentOS-6-x86_64-GenericCloud-20141129_01.qcow2
Ver la lista de imágenes añadidas a los servicios de Glance...
[root@controller-hostname ~]# glance image-show "cirros" +------------------+--------------------------------------+ | Property | Value | +------------------+--------------------------------------+ | checksum | 64d7c1cd2b6f60c92c14662941cb7913 | | container_format | bare | | created_at | 2015-02-06T12:47:39 | | deleted | False | | disk_format | qcow2 | | id | a338631b-3bb8-43ba-a700-d4648c040a05 | | is_public | True | | min_disk | 0 | | min_ram | 0 | | name | cirros | | owner | e7c679bc36ec4c298cf68ecf6d49c1b3 | | protected | False | | size | 13167616 | | status | active | | updated_at | 2015-02-06T12:47:40 | +------------------+--------------------------------------+
[root@controller-hostname ~]# glance image-show "Centos-6" +------------------+--------------------------------------+ | Property | Value | +------------------+--------------------------------------+ | checksum | 62ac2565e3527377860361f57639f334 | | container_format | bare | | created_at | 2015-02-13T06:18:52 | | deleted | False | | disk_format | qcow2 | | id | ac7ffb6d-1594-4a4c-94e7-9d8e70a120a8 | | is_public | True | | min_disk | 0 | | min_ram | 0 | | name | Centos-6 | | owner | e7c679bc36ec4c298cf68ecf6d49c1b3 | | protected | False | | size | 1151533056 | | status | active | | updated_at | 2015-02-13T06:20:29 | +------------------+--------------------------------------+
Instalar Nova Service en el nodo del controlador:
Pasemos ahora a instalar Nova en el nodo del controlador...
[root@controller-hostname ~]# yum install openstack-nova-api openstack-nova-cert openstack-nova-conductor openstack-nova-console openstack-nova-novncproxy openstack-nova-scheduler python-novaclient
Crear base de datos 'nova'...
[root@controller-hostname ~]# mysql -u root -p mysql> CREATE DATABASE nova; mysql> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'controller-hostname' IDENTIFIED BY 'setpassword'; mysql> GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY 'setpassword';
Dígale a Nova que use la base de datos correspondiente y proporcione las credenciales para ello...
[root@controller-hostname ~]# openstack-config --set /etc/nova/nova.conf database connection mysql://nova:setpassword@controller-hostname/nova
Conectar agente de mensajes (Qpid) a Nova...
[root@controller-hostname ~]# openstack-config --set /etc/nova/nova.conf DEFAULT rpc_backend qpid [root@controller-hostname ~]# openstack-config --set /etc/nova/nova.conf DEFAULT qpid_hostname controller-hostname
Crear tablas para la base de datos 'nova'
[root@controller-hostname ~]# su -s /bin/sh -c "nova-manage db sync" nova
Crear usuario para nova en KeyStone
[root@controller-hostname ~]# keystone user-create --name=nova --pass=setpassword --email=nova@controller-hostname [root@controller-hostname ~]# keystone user-role-add --user=nova --tenant=service --role=admin
Configurar la autenticación nova con KeyStone
[root@controller-hostname ~]# openstack-config --set /etc/nova/nova.conf DEFAULT auth_strategy keystone [root@controller-hostname ~]# openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_uri http://controller-hostname:5000 [root@controller-hostname ~]# openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_host controller-hostname [root@controller-hostname ~]# openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_protocol http [root@controller-hostname ~]# openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_port 35357 [root@controller-hostname ~]# openstack-config --set /etc/nova/nova.conf keystone_authtoken admin_user nova [root@controller-hostname ~]# openstack-config --set /etc/nova/nova.conf keystone_authtoken admin_tenant_name service [root@controller-hostname ~]# openstack-config --set /etc/nova/nova.conf keystone_authtoken admin_password setpassword
Registrar nova con KeyStone
[root@controller-hostname ~]# keystone service-create --name=nova --type=compute --description="OpenStack Compute" [root@controller-hostname ~]# keystone endpoint-create --service-id=$(keystone service-list | awk '/ compute / {print $2}') --publicurl=http://controller-hostname:8774/v2/%\(tenant_id\)s --internalurl=http://controller-hostname:8774/v2/%\(tenant_id\)s --adminurl=http://controller-hostname:8774/v2/%\(tenant_id\)s
Iniciar servicios relacionados con Nova...
[root@controller-hostname ~]# service openstack-nova-api start [root@controller-hostname ~]# chkconfig openstack-nova-api on [root@controller-hostname ~]# service openstack-nova-cert start [root@controller-hostname ~]# chkconfig openstack-nova-cert on [root@controller-hostname ~]# service openstack-nova-scheduler start [root@controller-hostname ~]# chkconfig openstack-nova-scheduler on [root@controller-hostname ~]# service openstack-nova-novncproxy start [root@controller-hostname ~]# chkconfig openstack-nova-novncproxy on [root@controller-hostname ~]# service openstack-nova-consoleauth start [root@controller-hostname ~]# chkconfig openstack-nova-consoleauth on [root@controller-hostname ~]# service openstack-nova-conductor start [root@controller-hostname ~]# chkconfig openstack-nova-conductor on [root@controller-hostname ~]# service openstack-nova-metadata-api start [root@controller-hostname ~]# chkconfig openstack-nova-metadata-api on
Lea también:Errores y soluciones de instalación del servicio OpenStack Nova.
Comandos de Nova para probar la configuración y los servicios...
Para listar todas las imágenes que se almacenan en el servicio Glance...
[root@controller-hostname ~]# nova image-list +--------------------------------------+---------------+--------+--------------------------------------+ | ID | Name | Status | Server | +--------------------------------------+---------------+--------+--------------------------------------+ | ac7ffb6d-1594-4a4c-94e7-9d8e70a120a8 | Centos-6 | ACTIVE | | | a338631b-3bb8-43ba-a700-d4648c040a05 | cirros | ACTIVE | | | e8c477ae-7c74-497d-9d9b-5fea1035d899 | testvm-snap1 | ACTIVE | aa7c5535-4259-42f0-8d74-5b26f0d731de | +--------------------------------------+---------------+--------+--------------------------------------+
Para enumerar todos los servicios...
[root@controller-hostname ~]# nova service-list +------------------+-------------------------+----------+---------+-------+----------------------------+-----------------+ | Binary | Host | Zone | Status | State | Updated_at | Disabled Reason | +------------------+-------------------------+----------+---------+-------+----------------------------+-----------------+ | nova-cert | controller-hostname | internal | enabled | up | 2015-02-16T11:06:09.000000 | - | | nova-scheduler | controller-hostname | internal | enabled | up | 2015-02-16T11:06:07.000000 | - | | nova-consoleauth | controller-hostname | internal | enabled | up | 2015-02-16T11:06:11.000000 | - | | nova-conductor | controller-hostname | internal | enabled | up | 2015-02-16T11:06:12.000000 | - | | nova-console | controller-hostname | internal | enabled | up | 2015-02-16T11:06:12.000000 | - | +------------------+-------------------------+----------+---------+-------+----------------------------+-----------------+
Configurar Nova-Networking para el nodo del controlador
En esta configuración de dos nodos, instalaremos la red Nova (heredada) en los nodos de controlador y cómputo. Significa que no necesita preocuparse por el complejo servicio Neutron.
Configurar Nova para usar redes heredadas de nova...
[root@controller-hostname ~]# openstack-config --set /etc/nova/nova.conf DEFAULT network_api_class nova.network.api.API [root@controller-hostname ~]# openstack-config --set /etc/nova/nova.conf DEFAULT security_group_api nova
Reiniciar servicios nova
[root@controller-hostname ~]# service openstack-nova-api restart [root@controller-hostname ~]# service openstack-nova-scheduler restart [root@controller-hostname ~]# service openstack-nova-conductor restart
Cree una red para máquinas virtuales
Ahora Nova sabe que debe usar redes heredadas para la comunicación, pero debe crear una red y un conjunto de direcciones IP a las que se deben asignar las máquinas virtuales. Simplemente desplácese hacia arriba para ver el diagrama de arquitectura donde encontrará una IP externa (10.180.14.151) asignada al nodo Compute. Significa que debemos crear una subred en la red 10.180.14.0 para que la usen las máquinas virtuales. En este tutorial, supongamos que necesitamos 30 direcciones IP para la asignación. Así que los detalles de la subred son los siguientes...
------------------------------------------------ TCP/IP NETWORK INFORMATION ------------------------------------------------ IP Entered = ..................: 10.180.14.160 CIDR = ........................: /27 Netmask = .....................: 255.255.255.224 Wildcard Bits = ...............: 0.0.0.31 ------------------------------------------------ Network Address = .............: 10.180.14.160 Broadcast Address = ...........: 10.180.14.191 Usable IP Addresses = .........: 30 First Usable IP Address = .....: 10.180.14.161 Last Usable IP Address = ......: 10.180.14.190
For the subnet ‘10.180.14.160/27’, the first usable IP address is 10.180.14.161 and the last usable IP address is 10.180.14.190.
The below command will create a network called ‘private’
[root@controller-hostname ~]# nova network-create private --bridge br100 --multi-host T --fixed-range-v4 10.180.14.160/27 [root@controller-hostname ~]# nova net-list +--------------------------------------+---------+------------------+ | ID | Label | CIDR | +--------------------------------------+---------+------------------+ | 60dfd46a-4649-4758-8b8d-88cc562b9b39 | private | 10.180.14.160/27 | +--------------------------------------+---------+------------------+
Add a security group to the created network to allow SSH connections
[root@controller-hostname ~]# nova secgroup-add-rule default tcp 22 22 0.0.0.0/0 +-------------+-----------+---------+-----------+--------------+ | IP Protocol | From Port | To Port | IP Range | Source Group | +-------------+-----------+---------+-----------+--------------+ | tcp | 22 | 22 | 0.0.0.0/0 | | +-------------+-----------+---------+-----------+--------------+
Install Dashboard (Horizon) on Controller node
Now its time to install Horizon service on controller node – provides a portal to manage instances, services, network etc…
[root@controller-hostname ~]# yum install memcached python-memcached mod_wsgi openstack-dashboard
Change the values of CACHES[‘default’][‘LOCATION’] as below
# vi /etc/openstack-dashboard/local_settings CACHES = { 'default': { 'BACKEND' : 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION' : '127.0.0.1:11211' } }
The above changes should match the address and port specified in /etc/sysconfig/memcached .
Also modify ‘ALLOWED_HOSTS ‘ attribute to accept connection from your desktop – as that will allow you to access the dashboard via browser.
You have to make sure SELINUX allows connection to the web server
[root@controller-hostname ~]# setsebool -P httpd_can_network_connect on
Start web server and memcached
[root@controller-hostname ~]# service memcached start [root@controller-hostname ~]# service httpd start [root@controller-hostname ~]# chkconfig memcached on [root@controller-hostname ~]# chkconfig httpd on
Try accessing the dashboard service – http://controller-hostname/dashboard
Install Nova on Compute node
Finally, we are done with our installation on Controller node and we’ll now move on to install Nova on Compute node.
Install nova compute service on Compute node..
[root@compute-hostname ]# yum install openstack-nova-compute
Connect to nova database on controller node…
[root@compute-hostname ]# openstack-config --set /etc/nova/nova.conf database connection mysql://nova:setpassword@controller-hostname/nova
Setup authentication…
[root@compute-hostname ]# openstack-config --set /etc/nova/nova.conf DEFAULT auth_strategy keystone [root@compute-hostname ]# openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_uri http://controller-hostname:5000 [root@compute-hostname ]# openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_host controller-hostname [root@compute-hostname ]# openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_protocol http [root@compute-hostname ]# openstack-config --set /etc/nova/nova.conf keystone_authtoken auth_port 35357 [root@compute-hostname ]# openstack-config --set /etc/nova/nova.conf keystone_authtoken admin_user nova [root@compute-hostname ]# openstack-config --set /etc/nova/nova.conf keystone_authtoken admin_tenant_name service [root@compute-hostname ]# openstack-config --set /etc/nova/nova.conf keystone_authtoken admin_password setpassword
Configure Nova to use Qpid message broker for communication
[root@compute-hostname ]# openstack-config --set /etc/nova/nova.conf DEFAULT rpc_backend qpid [root@compute-hostname ]# openstack-config --set /etc/nova/nova.conf DEFAULT qpid_hostname controller-hostname
Compute Node should know where the Glance is running, so we need to configure that as well.
[root@compute-hostname ]# openstack-config --set /etc/nova/nova.conf DEFAULT glance_host controller-hostname
Start messagebus, libvirtd and nova-compute services
[root@compute-hostname ]# service libvirtd start [root@compute-hostname ]# chkconfig libvirtd on [root@compute-hostname ]# chkconfig messagebus on [root@compute-hostname ]# service messagebus start [root@compute-hostname ]# service openstack-nova-compute start [root@compute-hostname ]# chkconfig openstack-nova-compute on
Install Nova-Networking for Computer node
[root@compute-hostname ]# yum install openstack-nova-network openstack-nova-api
Configure network api, security group, firewall, network size, dhcp etc..
[root@compute-hostname ]# openstack-config --set /etc/nova/nova.conf DEFAULT network_api_class nova.network.api.API [root@compute-hostname ]# openstack-config --set /etc/nova/nova.conf DEFAULT security_group_api nova [root@compute-hostname ]# openstack-config --set /etc/nova/nova.conf DEFAULT network_manager nova.network.manager.FlatDHCPManager [root@compute-hostname ]# openstack-config --set /etc/nova/nova.conf DEFAULT firewall_driver nova.virt.libvirt.firewall.IptablesFirewallDriver [root@compute-hostname ]# openstack-config --set /etc/nova/nova.conf DEFAULT network_size 254 [root@compute-hostname ]# openstack-config --set /etc/nova/nova.conf DEFAULT allow_same_net_traffic False [root@compute-hostname ]# openstack-config --set /etc/nova/nova.conf DEFAULT multi_host True [root@compute-hostname ]# openstack-config --set /etc/nova/nova.conf DEFAULT send_arp_for_ha True [root@compute-hostname ]# openstack-config --set /etc/nova/nova.conf DEFAULT share_dhcp_address True [root@compute-hostname ]# openstack-config --set /etc/nova/nova.conf DEFAULT force_dhcp_release True
Configure network bridge and interfaces
If you remember we created a network bridge ‘br100 ‘ in controller node. For this tutorial, the external IP address of the compute node is 10.180.14.151 (configured on eth1 network interface) and the subnet is ‘10.180.14.160/27 ‘
[root@compute-hostname ]# openstack-config --set /etc/nova/nova.conf DEFAULT flat_network_bridge br100 [root@compute-hostname ]# openstack-config --set /etc/nova/nova.conf DEFAULT flat_interface eth1 [root@compute-hostname ]# openstack-config --set /etc/nova/nova.conf DEFAULT public_interface eth1
Start the services…
[root@compute-hostname ]# service openstack-nova-api start [root@compute-hostname ]# service openstack-nova-network start [root@compute-hostname ]# service openstack-nova-metadata-api start [root@compute-hostname ]# chkconfig openstack-nova-api on [root@compute-hostname ]# chkconfig openstack-nova-network on [root@compute-hostname ]# chkconfig openstack-nova-api on
Well, we are done with installations on both the Controller and Compute node. Let us now trying booting VM, but before that you should know the below commands.
List of networks created…
[root@controller-hostname ~]# nova net-list +--------------------------------------+---------+------------------+ | ID | Label | CIDR | +--------------------------------------+---------+------------------+ | 60dfd46a-4649-4758-8b8d-88cc562b9b39 | private | 10.180.14.160/27 | +--------------------------------------+---------+------------------+
List of images stored in Glance…
[root@controller-hostname ~]# nova image-list +--------------------------------------+---------------+--------+--------------------------------------+ | ID | Name | Status | Server | +--------------------------------------+---------------+--------+--------------------------------------+ | ac7ffb6d-1594-4a4c-94e7-9d8e70a120a8 | Centos-6 | ACTIVE | | | a338631b-3bb8-43ba-a700-d4648c040a05 | cirros | ACTIVE | | | e8c477ae-7c74-497d-9d9b-5fea1035d899 | henryvm-snap1 | ACTIVE | aa7c5535-4259-42f0-8d74-5b26f0d731de | +--------------------------------------+---------------+--------+--------------------------------------+
List of flavors available…
[root@controller-hostname ~]# nova flavor-list +----+-----------+-----------+------+-----------+------+-------+-------------+-----------+ | ID | Name | Memory_MB | Disk | Ephemeral | Swap | VCPUs | RXTX_Factor | Is_Public | +----+-----------+-----------+------+-----------+------+-------+-------------+-----------+ | 1 | m1.tiny | 512 | 1 | 0 | | 1 | 1.0 | True | | 2 | m1.small | 2048 | 20 | 0 | | 1 | 1.0 | True | | 3 | m1.medium | 4096 | 40 | 0 | | 2 | 1.0 | True | | 4 | m1.large | 8192 | 80 | 0 | | 4 | 1.0 | True | | 5 | m1.xlarge | 16384 | 160 | 0 | | 8 | 1.0 | True | +----+-----------+-----------+------+-----------+------+-------+-------------+-----------+
List of security groups created…
[root@controller-hostname ~]# nova secgroup-list +----+---------+-------------+ | Id | Name | Description | +----+---------+-------------+ | 1 | default | default | +----+---------+-------------+
You may want to generate SSH keys to allow users to login to the newly created instance.
[root@controller-hostname ~]# ssh-keygen
Add the SSH public key to the nova keypair list..
[root@controller-hostname ~]# nova keypair-add --pub-key ~/.ssh/id_rsa.pub test-key
View the list of key pairs created…
[root@controller-hostname ~]# nova keypair-list +----------+-------------------------------------------------+ | Name | Fingerprint | +----------+-------------------------------------------------+ | test-key | b0:e1:ff:a5:1b:b0:ff:14:d5:46:13:bc:b6:ba:97:9b | +----------+-------------------------------------------------+
Create an Instance
Based on the output from above commands, you can create a new instance as below:
[root@controller-hostname ~]# nova boot --flavor m1.small --image Centos-6 --nic net-id=60dfd46a-4649-4758-8b8d-88cc562b9b39 --security-group default --key-name test-key myfirstvm +--------------------------------------+-------------------------------------------------+ | Property | Value | +--------------------------------------+-------------------------------------------------+ | OS-DCF:diskConfig | MANUAL | | OS-EXT-AZ:availability_zone | nova | | OS-EXT-SRV-ATTR:host | - | | OS-EXT-SRV-ATTR:hypervisor_hostname | - | | OS-EXT-SRV-ATTR:instance_name | instance-00000016 | | OS-EXT-STS:power_state | 0 | | OS-EXT-STS:task_state | - | | OS-EXT-STS:vm_state | building | | OS-SRV-USG:launched_at | - | | OS-SRV-USG:terminated_at | - | | accessIPv4 | | | accessIPv6 | | | adminPass | hEMdKAnLs6XX | | config_drive | | | created | 2015-02-18T08:56:32Z | | flavor | m1.small (2) | | hostId | | | id | a9735dd7-c601-4209-a86a-0575711239d1 | | image | Centos-6 (ac7ffb6d-1594-4a4c-94e7-9d8e70a120a8) | | key_name | test-key | | metadata | {} | | name | myfirstvm | | os-extended-volumes:volumes_attached | [] | | progress | 0 | | security_groups | default | | status | BUILD | | tenant_id | e7c679bc36ec4c298cf68ecf6d49c1b3 | | updated | 2015-02-18T08:56:32Z | | user_id | 8607e0ccc8ee407daf50c1985616b153 | +--------------------------------------+-------------------------------------------------+
Check if the state of the VM is “ACTIVE” using the below command…
[root@controller-hostname ~]# nova list +--------------------------------------+------------------+--------+------------+-------------+-----------------------+ | ID | Name | Status | Task State | Power State | Networks | +--------------------------------------+------------------+--------+------------+-------------+-----------------------+ | 8aaa3873-09c5-48f0-9d1e-cb4401e44583 | Cluster-headnode | ACTIVE | - | Running | private=10.180.14.162 | | a9735dd7-c601-4209-a86a-0575711239d1 | myfirstvm | ACTIVE | - | Running | private=10.180.14.163 | +--------------------------------------+------------------+--------+------------+-------------+-----------------------+
The new VM called “myfirstvm ” is running and the allocated IP address is 10.180.14.163 .
Login to an instance
[root@controller-hostname ~]# cd .ssh/ [root@controller-hostname .ssh]# ssh -i id_rsa [email protected] Last login: Wed Feb 18 09:01:07 2015 from 10.180.10.132 [centos@myfirstvm ~]$ hostname myfirstvm
What is the password for Cirros?
In case, if you have used Cirros image to create an instance, then you must login with username as ‘cirros’ and password as ‘cubswin:)’ (of course, without single quotes).
To know information about the running VM, you can just issue the below command.
[root@controller-hostname ~]# nova show myfirstvm +--------------------------------------+----------------------------------------------------------+ | Property | Value | +--------------------------------------+----------------------------------------------------------+ | OS-DCF:diskConfig | MANUAL | | OS-EXT-AZ:availability_zone | nova | | OS-EXT-SRV-ATTR:host | gcompute.blr.cdac.in | | OS-EXT-SRV-ATTR:hypervisor_hostname | gcompute.blr.cdac.in | | OS-EXT-SRV-ATTR:instance_name | instance-00000016 | | OS-EXT-STS:power_state | 1 | | OS-EXT-STS:task_state | - | | OS-EXT-STS:vm_state | active | | OS-SRV-USG:launched_at | 2015-02-18T08:56:54.000000 | | OS-SRV-USG:terminated_at | - | | accessIPv4 | | | accessIPv6 | | | config_drive | | | created | 2015-02-18T08:56:32Z | | flavor | m1.small (2) | | hostId | bd672087b1933d00d10e9d4f85cbac0326ebf3de73a0ce093c0d1838 | | id | a9735dd7-c601-4209-a86a-0575711239d1 | | image | Centos-6 (ac7ffb6d-1594-4a4c-94e7-9d8e70a120a8) | | key_name | test-key | | metadata | {} | | name | myfirstvm | | os-extended-volumes:volumes_attached | [] | | private network | 10.180.14.163 | | progress | 0 | | security_groups | default | | status | ACTIVE | | tenant_id | e7c679bc36ec4c298cf68ecf6d49c1b3 | | updated | 2015-02-18T08:56:41Z | | user_id | 8607e0ccc8ee407daf50c1985616b153 | +--------------------------------------+----------------------------------------------------------+
Stop an Instance
If you want to stop a running instance, here’s how you can do that.
[root@controller-hostname ~]# nova stop myfirstvm
If you want to delete an instance completely, then here’s the command.
[root@controller-hostname ~]# nova delete myfirstvm
How to add another compute node to the OpenStack environment?
It’s simple! Just follow the same steps that we used for Compute-hostname node.
Do you like this tutorial? Share it with OpenStack community by clicking the share icons at the top.