Por Ghulam Qadir, autor de Tech Share de Alibaba Cloud. Tech Share es el programa de incentivos de Alibaba Cloud para fomentar el intercambio de conocimientos técnicos y mejores prácticas dentro de la comunidad de la nube.
OpenStack es una plataforma de software libre y de código abierto que proporciona IaaS (infraestructura como servicio) para nubes públicas y privadas.
La plataforma OpenStack consta de varios proyectos interrelacionados que controlan el hardware, el almacenamiento, los recursos de red de un centro de datos, tales como: Compute, Image Service, Block Storage, Identity Service, Networking, Object Storage, Telemetry, Orchestration y Database.
Aunque la función principal de OpenStack es proporcionar una plataforma IaaS, se utiliza como DBaaS (database-as-a-service), construyendo clusters de Hadoop, orquestación de Containers y mucho más. La administración de esos componentes se puede gestionar a través de la interfaz basada en la web o con la ayuda de la línea de comandos de OpenStack.
Este tutorial le mostrará cómo puede desplegar su propia infraestructura de nube privada con OpenStack instalado en un solo nodo mediante el uso de repositorios rdo, aunque el despliegue se puede lograr en múltiples nodos. Vamos a desplegar este servicio en instancias de Alibaba Cloud Elastic Compute Service (ECS) con CentOS 7.
- Nombre de host = openstack.ejemplo.com
- Dirección IP = 192.168.1.40
- Máscara de red = 255.255.255.0
- Gateway = 192.168.1.1
- DNS = 192.168.1.254
Requisitos
- Debe tener activado Alibaba Cloud Elastic Compute Service (ECS) y verificar su método de pago válido. Si es un nuevo usuario, puede obtener una cuenta gratuita en su cuenta de Alibaba Cloud. Si no sabe cómo configurar su instancia ECS, puede consultar este tutorial o guía de inicio rápido.
- Debe configurar el nombre de host de su servidor.
- Acceda a la consola VNC en su Alibaba Cloud o al cliente SSH instalado en su PC.
Después de completar los requisitos previos, inicie sesión como usuario root con su nombre de usuario root &contraseña a través del cliente SSH (por ejemplo, Putty) o la consola VNC disponible en el panel de su cuenta de Alibaba Cloud.
Asegúrese de que su sistema tiene al menos 16 GB de RAM y un procesador con soporte VT. Compruebe el soporte VT utilizando el siguiente comando.
egrep --color 'vmx|svm' /proc/cpuinfo | wc –l
Salida: (no debe ser cero)
2
Configuraciones iniciales del sistema
- Antes de comenzar a preparar el nodo para desplegar su propia infraestructura de nube virtual, primero inicie sesión con la cuenta de root y asegúrese de que el sistema está actualizado.
Asegúrese de que su máquina tiene la última versión de CentOS 7 en la máquina.
yum -y update
- A continuación, emita el comando ss -tulpn para listar todos los servicios en ejecución.
Ss -tulpn
Ahora identifique los servicios innecesarios, deténgalos, desactívelos y elimínelos. Principalmente Postfix, NetworkManager y Firewalld. Después de eso, el único servicio que se ejecutaría en su máquina linux sólo debería ser sshd.
# systemctl stop postfix firewalld NetworkManager # systemctl disable postfix firewalld NetworkManager # systemctl mask NetworkManager # yum remove postfix NetworkManager NetworkManager-libnm
Desactive permanentemente la política de Selinux en su máquina linux ejecutando los siguientes comandos. También edite el archivo /etc/selinux/config y modifique SELINUX de forzado a deshabilitado como se muestra en la imagen de abajo.
# setenforce 0 # getenforce # vi /etc/selinux/config
En el siguiente paso utilizando el comando hostnamectl para establecer el nombre de host de su sistema Linux. Reemplace la variable FQDN en consecuencia.
# hostnamectl set-hostname cloud.centos.lan
Por último, instale ntpdate para sincronizar la hora con un servidor NTP.
# yum install ntpdate
Instale OpenStack en CentOS y RHEL
OpenStack se desplegará en su Nodo con la ayuda del paquete PackStack proporcionado por el repositorio rdo (Distribución RPM de OpenStack).
Para habilitar los repositorios rdo en RHEL 7 ejecute el siguiente comando.
# yum install https://www.rdoproject.org/repos/rdo-release.rpm
En CentOS 7, el repositorio Extras incluye el RPM que activa el repositorio OpenStack. Extras ya está habilitado, por lo que se puede instalar fácilmente el RPM para configurar el repositorio de OpenStack:
# yum install -y centos-release-openstack-mitaka # yum update –y
Instalemos el paquete Packstat en nuestra máquina linux utilizando el siguiente comando:
# yum install openstack-packstack
En el siguiente paso generamos un archivo de respuesta para Packstack con las configuraciones por defecto que posteriormente editaremos con los parámetros necesarios para desplegar una instalación autónoma de Openstack (un solo nodo).
El archivo tendrá el nombre de la marca de tiempo del día actual cuando se genere (día, mes y año).
# packstack --gen-answer-file='date +"%d.%m.%y"'.conf # ls
Ahora edite el archivo de respuesta con su editor de texto favorito.
vi 26.07.18.conf
y reemplace los siguientes parámetros para que coincidan con los valores de abajo. Para estar seguro reemplazar los campos de contraseñas en consecuencia.
CONFIG_NTP_SERVERS=0.ro.pool.ntp.org
CONFIG_PROVISION_DEMO=n
CONFIG_KEYSTONE_ADMIN_PW=your_password for Admin user
Acceder al tablero de OpenStack a través de HTTP con SSL activado.
CONFIG_HORIZON_SSL=y
La contraseña de root para el servidor MySQL.
CONFIG_MARIADB_PW=mypassword1234
Tras terminar de editar guarde y cierre el archivo. Además, abra el archivo de configuración del servidor SSH y descomente la línea PermitRootLogin eliminando el hashtag frontal como se ilustra en la siguiente captura de pantalla.
# vi /etc/ssh/sshd_config
Luego reinicie el servicio SSH para reflejar los cambios.
# systemctl restart sshd
Iniciar la instalación de Openstack utilizando el archivo de respuesta de Packstack
Por último, iniciar el proceso de instalación de Openstack a través del archivo de respuesta editado anteriormente ejecutando la siguiente sintaxis de comandos:
# packstack --answer-file 13.04.16.conf
Una vez que la instalación de los componentes de OpenStack se haya completado con éxito, el instalador mostrará unas líneas con los enlaces del panel local para OpenStack y Nagios y las credenciales necesarias ya configuradas anteriormente para poder iniciar sesión en ambos paneles.
Las credenciales también se almacenan bajo su directorio de inicio en el archivo keystonerc_admin.
Si por alguna razón el proceso de instalación termina con un error respecto al servicio httpd, abra el archivo /etc/httpd/conf.d/ssl.conf y asegúrese de comentar la siguiente línea como se ilustra a continuación.
#Listen 443 https
Luego reinicie el demonio Apache para aplicar los cambios.
# systemctl restart httpd.service
Nota: En caso de que aún no pueda navegar por el panel web de Openstack en el puerto 443 reinicie el proceso de instalación desde el principio con el mismo comando emitido para el despliegue inicial.
# packstack --answer-file /root/26.07.18.conf
Acceso remoto al panel web de OpenStack
Para acceder al panel web de OpenStack desde un host remoto en su LAN navegue a la dirección IP de su máquina o al FQDN/panel a través del protocolo HTTPS.
Debido a que está utilizando un certificado autofirmado emitido por una autoridad de certificación que no es de confianza debería aparecer un error en su navegador.
Acepte el error y acceda al panel de control con el usuario admin y la contraseña establecida en el parámetro CONFIG_KEYSTONE_ADMIN_PW del archivo de respuesta establecido anteriormente.
https://192.168.1.40/dashboard
Alternativamente, si ha optado por instalar el componente Nagios para OpenStack, puede navegar por el panel web de Nagios en la siguiente URI e iniciar sesión con las credenciales establecidas en el archivo de respuesta.
https://192.168.1.40/nagios
Configuración
OpenStack es una colección de componentes de proyectos de código abierto que permiten configurar servicios en la nube. Cada componente utiliza técnicas de configuración similares y un marco común para las opciones del archivo INI.
Esta guía reúne múltiples referencias y opciones de configuración para los siguientes componentes de OpenStack:
- Servicio de metal desnudo
- Servicio de almacenamiento en bloque
- Servicio de computación
- Servicio de tablero de instrumentos
- Servicio de base de datos
- Servicio de procesamiento de datos
- Servicio de identidad
- Servicio de imágenes
- Mensaje servicio
- Servicio de red
- Servicio de almacenamiento de objetos
- Servicio de orquestación
- Servicio de sistemas de archivos compartidos
- Servicio de telemetría
OpenStack utiliza el formato de archivo INI para los archivos de configuración. Un archivo INI es un simple archivo de texto que especifica opciones como pares clave=valor, agrupados en secciones. La sección DEFAULT contiene la mayoría de las opciones de configuración. Las líneas que comienzan con un signo de almohadilla (#) son líneas de comentario. Por ejemplo:
# Print debugging output (set logging level to DEBUG instead # of default WARNING level). (boolean value) debug = true # The SQLAlchemy connection string used to connect to the # database (string value) connection = mysql+pymysql://keystone:KEYSTONE_DBPASS@controller/keystone
Las opciones pueden tener diferentes tipos de valores. Los comentarios en los archivos de configuración de ejemplo siempre los mencionan y las tablas mencionan el valor Opt como primer elemento como (BoolOpt) Toggle…. Los siguientes tipos son utilizados por OpenStack:
valor booleano (BoolOpt)
Activa o desactiva una opción. Los valores permitidos son true y false.
# Enable the experimental use of database reconnect on # connection lost (boolean value) use_db_reconnect = false
valor de punto flotante (FloatOpt)
Un número de punto flotante como 0,25 o 1000.
# Sleep time in seconds for polling an ongoing async task # (floating point value) task_poll_interval = 0.5
valor entero (IntOpt)
Un número entero es un número sin componentes fraccionarios, como 0 o 42.
# The port which the OpenStack Compute service listens on. # (integer value) compute_port = 8774
Dirección IP (IPOpt)
Una dirección IPv4 o IPv6.
# Address to bind the server. Useful when selecting a particular network # interface. (ip address value) bind_host = 0.0.0.0
Pares clave-valor (DictOpt)
Un par clave-valor, también conocido como diccionario. Los pares clave-valor están separados por comas y se utilizan dos puntos para separar clave y valor. Ejemplo: clave1:valor1,clave2:valor2.
# Parameter for l2_l3 workflow setup. (dict value) l2_l3_setup_params = data_ip_address:192.168.200.99, \ data_ip_mask:255.255.255.0,data_port:1,gateway:192.168.200.1,ha_port:2
valor de la lista (ListOpt)
Representa valores de otros tipos, separados por comas. Como ejemplo, lo siguiente establece allowed_rpc_exception_modules a una lista que contiene los cuatro elementos oslo.messaging.exceptions, nova.exception, cinder.exception, y exceptions:
# Modules of exceptions that are permitted to be recreated # upon receiving exception data from an rpc call. (list value) allowed_rpc_exception_modules = oslo.messaging.exceptions,nova.exception
multivalor (MultiStrOpt)
Una opción multivalor es un valor de cadena y puede darse más de una vez, se utilizarán todos los valores.
# Driver or drivers to handle sending notifications. (multi valued) notification_driver = nova.openstack.common.notifier.rpc_notifier notification_driver = ceilometer.compute.nova_notifier
Valor del puerto (PortOpt)
Un número de puerto TCP/IP. Los puertos pueden ir de 1 a 65535.
# Port to which the UDP socket is bound. (port value) # Minimum value: 1 # Maximum value: 65535 udp_port = 4952
valor de la cadena (StrOpt)
Las cadenas pueden ir opcionalmente entre comillas simples o dobles.
# Enables or disables publication of error events. (boolean value) publish_errors = false # The format for an instance that is passed with the log message. # (string value) instance_format = " "
Secciones
Las opciones de configuración se agrupan por secciones. La mayoría de los archivos de configuración admiten al menos las siguientes secciones:
Contiene la mayoría de las opciones de configuración. Si la documentación de una opción de configuración no especifica su sección, asuma que aparece en esta sección.
Opciones de configuración para la base de datos que almacena el estado del servicio OpenStack.
Sustitución
El archivo de configuración admite la sustitución de variables. Después de establecer una opción de configuración, se puede hacer referencia a ella en valores de configuración posteriores cuando se precede de un $, como $OPTION.
El siguiente ejemplo utiliza los valores de rabbit_host y rabbit_port para definir el valor de la opción rabbit_hosts, en este caso como controlador:5672.
# The RabbitMQ broker address where a single node is used. # (string value) rabbit_host = controller # The RabbitMQ broker port where a single node is used. # (integer value) rabbit_port = 5672 # RabbitMQ HA cluster host:port pairs. (list value) rabbit_hosts = $rabbit_host:$rabbit_port
Para evitar la sustitución, utilice
$$, se sustituye por un único $. Por ejemplo, si su contraseña LDAP DNS es $xkj432, especifíquela, de la siguiente manera:
ldap_dns_password = $$xkj432
El código utiliza la cadena de Python. Template.safe_substitute() para implementar la sustitución de variables. Para más detalles sobre cómo se resuelve la sustitución de variables.
Espacio en blanco
Para incluir espacios en blanco en un valor de configuración, utilice una cadena entre comillas. Por ejemplo:
ldap_dns_passsword='a password with spaces'
Definir una ubicación alternativa para un archivo de configuración
La mayoría de los servicios y los clientes de la línea de comandos -manage cargan el archivo de configuración. Para definir una ubicación alternativa para el archivo de configuración, pase el parámetro –config-file CONFIG_FILE cuando inicie un servicio o llame a un comando -manage.
Conclusión
Hemos demostrado la instalación de OpenStack en Red Hat, CentOS y Fedora Linux. Ahora puede configurar su propio entorno de nube privada en Alibaba Cloud Elastic Compute Service (ECS) fácilmente con OpenStack.