08 - Configurar Placement en OpenStack
Placement se encarga del seguimiento de los recursos físicos disponibles y asiste a Nova en la planificación de las asignaciones. En esta guía, instalaremos y configuraremos Placement en el nodo controller01 utilizando paquetes de Ubuntu y definiremos los pasos mínimos para verificar su funcionamiento.
Requisitos previos
Antes de empezar, asegúrate de tener:
- Keystone instalado y accesible.
- Una base de datos MySQL/MariaDB disponible.
- Credenciales administrativas (
admin-openrc) para crear usuarios y servicios.
Crear la base de datos
Nos conectaremos al servidor de la base de datos como root para crear la base de datos de Placement:
vagrant@controller01:~$ sudo mysql
Creo la base de datos y doy permisos al usuario placement (sustituye PLACEMENT_DBPASS):
CREATE DATABASE placement;
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'localhost' IDENTIFIED BY 'PLACEMENT_DBPASS';
GRANT ALL PRIVILEGES ON placement.* TO 'placement'@'%' IDENTIFIED BY 'PLACEMENT_DBPASS';
Finalmente, salimos del cliente de la base de datos.
Crear el usuario y los endpoints del servicio
Cargaremos las credenciales de administrador para trabajar con la CLI de OpenStack:
vagrant@controller01:~$ source admin-openrc
Crearemos el usuario placement en Keystone (utiliza PLACEMENT_PASSWORD como contraseña de ejemplo):
vagrant@controller01:~$ openstack user create --domain default --password PLACEMENT_PASSWORD placement
+---------------------+----------------------------------+
| Field | Value |
+---------------------+----------------------------------+
| default_project_id | None |
| domain_id | default |
| email | None |
| enabled | True |
| id | 5a18b6b3caa641d2905f6de876e786f3 |
| name | placement |
| description | None |
| password_expires_at | None |
+---------------------+----------------------------------+
Añadiremos el rol admin al usuario dentro del proyecto service:
vagrant@controller01:~$ openstack role add --project service --user placement admin
Registraremos el servicio Placement en el catálogo de Keystone:
vagrant@controller01:~$ openstack service create --name placement --description "Placement API" placement
+-------------+----------------------------------+
| Field | Value |
+-------------+----------------------------------+
| id | 845aa6ed076f4adab229902844c50f9b |
| name | placement |
| type | placement |
| enabled | True |
| description | Placement API |
+-------------+----------------------------------+
Crearemos los endpoints públicos, internos y de administración, apuntando al puerto 8778:
vagrant@controller01:~$ openstack endpoint create --region RegionOne placement public http://controller01:8778
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 74fee05c44b7436ab141ab81d2febc5b |
| interface | public |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 845aa6ed076f4adab229902844c50f9b |
| service_name | placement |
| service_type | placement |
| url | http://controller01:8778 |
+--------------+----------------------------------+
vagrant@controller01:~$ openstack endpoint create --region RegionOne placement internal http://controller01:8778
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | f7395645747e47298201d6620c7c1102 |
| interface | internal |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 845aa6ed076f4adab229902844c50f9b |
| service_name | placement |
| service_type | placement |
| url | http://controller01:8778 |
+--------------+----------------------------------+
vagrant@controller01:~$ openstack endpoint create --region RegionOne placement admin http://controller01:8778
+--------------+----------------------------------+
| Field | Value |
+--------------+----------------------------------+
| enabled | True |
| id | 8cf1ef59f4114fa39ecbb011363e4648 |
| interface | admin |
| region | RegionOne |
| region_id | RegionOne |
| service_id | 845aa6ed076f4adab229902844c50f9b |
| service_name | placement |
| service_type | placement |
| url | http://controller01:8778 |
+--------------+----------------------------------+
Nota: el puerto puede variar en tu entorno (por ejemplo 8780).
Instalar los componentes
Instalaremos el paquete del servicio Placement:
vagrant@controller01:~$ sudo apt install placement-api -y
Configurar Placement
Editaremos el archivo de configuración principal para definir la conexión con la base de datos y Keystone:
vagrant@controller01:~$ sudo nano /etc/placement/placement.conf
En la sección de la base de datos, configuraremos la cadena de conexión (sustituye PLACEMENT_DBPASS por la contraseña definida):
[placement_database]
connection = mysql+pymysql://placement:PLACEMENT_DBPASS@controller01/placement
En [api] y [keystone_authtoken] habilito Keystone y pongo las credenciales del servicio (reemplaza PLACEMENT_PASS):
[api]
auth_strategy = keystone
[keystone_authtoken]
auth_url = http://controller01:5000/v3
memcached_servers = controller:11211
auth_type = password
project_domain_name = Default
user_domain_name = Default
project_name = service
username = placement
password = PLACEMENT_PASS
Comenta o elimina opciones conflictivas si las encuentras.
Sincronizar la base de datos
Ejecutaremos la creación de las tablas mediante el comando placement-manage:
vagrant@controller01:~$ sudo su -s /bin/sh -c "placement-manage db sync" placement
Puedes ignorar advertencias deprecatorias si no afectan al proceso.
Finalizar la instalación
Reiniciaremos Apache (Placement se sirve habitualmente mediante mod_wsgi):
vagrant@controller01:~$ sudo service apache2 restart
Verificación
Verificaremos el estado del servicio utilizando placement-status:
vagrant@controller01:~$ sudo -u placement placement-status upgrade check
+-------------------------------------------+
| Upgrade Check Results |
+-------------------------------------------+
| Check: Missing Root Provider IDs |
| Result: Success |
| Details: None |
+-------------------------------------------+
| Check: Incomplete Consumers |
| Result: Success |
| Details: None |
+-------------------------------------------+
| Check: Policy File JSON to YAML Migration |
| Result: Success |
| Details: None |
+-------------------------------------------+
Finalmente, probaremos la API de Placement listando las clases de recursos:
vagrant@controller01:~$ openstack --os-placement-api-version 1.2 resource class list --sort-column name
+----------------------------------------+
| name |
+----------------------------------------+
| DISK_GB |
| FPGA |
| IPV4_ADDRESS |
| MEMORY_MB |
| MEM_ENCRYPTION_CONTEXT |
| NET_BW_EGR_KILOBIT_PER_SEC |
| NET_BW_IGR_KILOBIT_PER_SEC |
| NET_PACKET_RATE_EGR_KILOPACKET_PER_SEC |
| NET_PACKET_RATE_IGR_KILOPACKET_PER_SEC |
| NET_PACKET_RATE_KILOPACKET_PER_SEC |
| NUMA_CORE |
| NUMA_MEMORY_MB |
| NUMA_SOCKET |
| NUMA_THREAD |
| PCI_DEVICE |
| PCPU |
| PGPU |
| SRIOV_NET_VF |
| VCPU |
| VGPU |
| VGPU_DISPLAY_HEAD |
+----------------------------------------+
Si obtienes una lista (aunque vacía) sin errores, Placement está operativo.
