OpenStack裸机部署

2024-09-25 21

根据OpenStack官网描述,代号为“ironic”的裸机服务是一个由多个组件组成的集合,旨在管理和预置物理机。裸机服务包括”ironic-api”、”ironic-conductor”和”ironic-python-agent”组件。根据配置,裸机服务可以与多个其他OpenStack服务一起运行。本教程将主要介绍如何在三种流行的Linux发行版上安装和配置OpenStackIronic裸机服务。

一、安装Ironic的项目选项

可以选择多种项目之一进行Ironic的安装,其中裸机团队提供的Bifrost可独立安装而不需OpenStack其余部分。其他OpenStack团队开发的项目还包括:

1、Kolla:将Ironic作为OpenStack的一部分在容器中安装。

2、OpenStack-Ansible:支持安装Ironic。

3、TripleO:使用Ironic来配置裸机节点,也可用于安装Ironic。

二、安装和配置先决条件

裸机服务包含管理和预置物理机的组件,这些组件可以在单独的节点或同一节点上运行。在本指南中,所有组件将运行在同一节点上,通常是计算服务的计算节点。请确保已经配置好Identity、Image、Compute和Networking服务。

三、为裸机服务设置数据库

裸机服务的信息存储在数据库中。本指南中,我们将使用其他OpenStack服务所使用的MySQL数据库。

在MySQL中,创建一个用户可访问的数据库。请替换以下密码为合适的密码:

ironicironicIRONIC_DBPASSWORD
mysql -u root -p
mysql> CREATE DATABASE ironic CHARACTER SET utf8mb3;
mysql> GRANT ALL PRIVILEGES ON ironic.* TO 'ironic'@'localhost' \
IDENTIFIED BY 'IRONIC_DBPASSWORD';
mysql> GRANT ALL PRIVILEGES ON ironic.* TO 'ironic'@'%' \
IDENTIFIED BY 'IRONIC_DBPASSWORD';

注意:创建数据库时,请确保字符集不是四字节的Unicode字符。这是由于内部结构约束。MySQL中的UTF8实际上是指传统的“三字节编码”的UTF-8表示,但未来可能会迁移到与Ironic不兼容的”utf8mb4″。

尽管可以使用SQLite作为裸机服务的后端数据库,但应注意以下限制:

  • Ironic必须在一体化模式下运行(详见配置单进程Ironic),此模式下不能有多个导体;
  • 建议使用WAL模式,Ironic会尝试为新数据库启用该模式;
  • 即便在WAL模式下,SQLite的写入并发性有限,若遇到“databaseislocked”错误,应降低定期任务的频率;
  • 如果问题仍然存在,建议使用基于服务器的数据库;
  • 并非所有数据库迁移在SQLite上都受支持,升级时可能需要重新创建数据库。

若要使用SQLite,请按如下格式配置连接:

[database]
connection = sqlite:////full/path/to/ironic.sqlite

如有疑问,请选择MySQL/MariaDB。

四、安装和配置组件

可以在RHEL/CentOS Stream和RDO软件包上使用DNF进行安装:

dnf install openstack-ironic-api openstack-ironic-conductor python3-ironicclient

在Ubuntu/Debian上:

apt-get install ironic-api ironic-conductor python3-ironicclient

在openSUSE/SLES上:

zypper install openstack-ironic-api openstack-ironic-conductor python3-ironiccli

警告:对SUSE系统的支持是有限的,未在CI中进行测试。

裸机服务通过其配置文件进行配置,默认情况下,配置文件位于”/etc/ironic/ironic.conf”。虽然本文提到了一些配置选项,建议查看所有示例配置文件,以根据需求进行相应配置。可以在同一主机或不同主机上配置服务,若需处理更多裸机节点,可以添加新的”ironic-conductor”主机。但是,额外的”ironic-conductor”服务应与现有的服务同步运行。

裸机服务需要通过数据库存储信息,需配置数据库位置。使用以下格式替换为用户密码和数据库服务器的IP地址:

connectionIRONIC_DBPASSWORDironicDB_IP
[database]
# The SQLAlchemy connection string used to connect to the
# database (string value)
connection=mysql+pymysql://ironic:IRONIC_DBPASSWORD@DB_IP/ironic?charset=utf

接下来,配置Ironic-API服务以使用RabbitMQ消息代理,修改以下选项以替换相应的RabbitMQ服务器的详细信息和凭证:

[DEFAULT]
# A URL representing the messaging driver to use and its full
# configuration. (string value)
transport_url = rabbit://RPC_USER:RPC_PASSWORD@RPC_HOST:RPC_PORT/

另外,可以启用JSON RPC,配置”ironic-conductor”和”ironic-api”:

[DEFAULT]
rpc_transport = json-rpc
[json_rpc]
# Authentication type to load (string value)
auth_type = password
# Authentication URL (string value)
auth_url=https://IDENTITY_IP:5000/
# Username (string value)
username=ironic
# User's password (string value)
password=IRONIC_PASSWORD
# Project name to scope to (string value)
project_name=service
# Domain ID containing project (string value)
project_domain_id=default
# User's domain id (string value)
user_domain_id=default

如果使用非默认的8089端口,请配置为:

[json_rpc]
port = 9999

接着,配置Ironic-API服务以将凭证与身份服务关联。请替换以下信息为相关的IP地址和密码:

[DEFAULT]
# Authentication strategy used by ironic-api: one of
# "keystone" or "noauth". "noauth" should not be used in a
# production environment because all authentication will be
# disabled. (string value)
auth_strategy=keystone
[keystone_authtoken]
# Authentication type to load (string value)
auth_type=password
# Complete public Identity API endpoint (string value)
www_authenticate_uri=http://PUBLIC_IDENTITY_IP:5000
# Complete admin Identity API endpoint. (string value)
auth_url=http://PRIVATE_IDENTITY_IP:5000
# Service username. (string value)
username=ironic
# Service account password. (string value)
password=IRONIC_PASSWORD
# Service tenant name. (string value)
project_name=service
# Domain name containing project (string value)
project_domain_name=Default
# User's domain name (string value)
user_domain_name=Default
# memcached setting (string value)
memcached_servers=MEMCACHED_SERVER:11211

创建裸机服务的数据库表:

$ ironic-dbsync --config-file /etc/ironic/ironic.conf create_schema

重启”ironic-api”服务:

对于RHEL/CentOS/SUSE:

sudo systemctl restart openstack-ironic-api

Ubuntu/Debian:

sudo service ironic-api restart

五、使用Apache配置Ironic-API

裸机服务附带了一个示例文件,可将服务配置为在带有mod_wsgi的Apache后面运行。

注意:虽然可以使用独立脚本提供HTTP服务器,但通常建议使用如Apache或Nginx这样的WSGI支持的HTTP服务器,以获得更好的性能和灵活性。

1、安装Apache服务

Fedora/RHEL8/CentOS8:

sudo dnf install httpd

Debian/Ubuntu:

apt-get install apache2

SUSE:

zypper install apache2

2、从Ironic项目树下载相关文件,并将其复制到Apache网站配置目录下:

Fedora/RHEL8/CentOS8:

sudo cp etc/apache2/ironic /etc/httpd/conf.d/ironic.conf

Debian/Ubuntu:

sudo cp etc/apache2/ironic /etc/apache2/sites-available/ironic.conf

SUSE:

sudo cp etc/apache2/ironic /etc/apache2/vhosts.d/ironic.conf

停止并禁用 ironic-api 服务。如果 ironic-api 服务是 started,则端口将被占用。Apache 将无法启动:

Fedora/RHEL8/CentOS8/SUSE 的版本:

sudo systemctl stop openstack-ironic-api
sudo systemctl disable openstack-ironic-api

Debian/Ubuntu:

sudo service ironic-api stop
sudo service ironic-api disable

在 site 中启用 apache 并重新加载:ironic

Fedora/RHEL8/CentOS8:

sudo systemctl reload httpd

Debian/Ubuntu:

sudo a2ensite ironic
sudo service apache2 reload

SUSE:

sudo systemctl reload apache2

六、配置WSGI容器

对于不能使用 Apache 的情况,可以使用其他 WSGI 容器,例如 Gunicorn。以下是如何配置 Gunicorn 来运行 Ironic-API 服务的示例命令:

gunicorn -b 0.0.0.0:6385 'ironic.api.wsgi:initialize_wsgi_app(argv=[])'

如果需要指定配置文件,可以使用以下命令:

gunicorn -b 0.0.0.0:6385 \
'ironic.api.wsgi:initialize_wsgi_app(argv=["ironic-api", "--config-file=/path/to/ironic.conf"])'

七、配置Ironic-Conductor服务

在 “iniironic-conductor” 的配置中,首先需要设置 Conductor 主机的 IP 地址。请替换 “HOST_IP” 为实际的主机 IP。

[DEFAULT]
# IP address of this host. If unset, will determine the IP
# programmatically. If unable to do so, will use "127.0.0.1".
# (string value)
my_ip=HOST_IP

配置 “ironic-conductor” 使用与 “ironic-api” 相同的数据库设置。如下所示:

[database]
# The SQLAlchemy connection string to use to connect to the
# database. (string value)
connection=mysql+pymysql://ironic:IRONIC_DBPASSWORD@DB_IP/ironic?charset=utf8

八、RabbitMQ消息代理配置

确保 “ironic-conductor” 配置与 “ironic-api” 使用相同的 RabbitMQ 消息代理设置。请将 “RPC_*” 配置替换为适当的 RabbitMQ 服务器的详细信息和凭证。

[DEFAULT]
# A URL representing the messaging driver to use and its full
# configuration. (string value)
transport_url = rabbit://RPC_USER:RPC_PASSWORD@RPC_HOST:RPC_PORT/

可以使用 JSON RPC 进行 ironic-conductor 和 ironic-api。在配置中启用它并提供 用于对传入请求进行身份验证的 Keystone 凭证(可以 与 API 相同):

[DEFAULT]
rpc_transport = json-rpc
[keystone_authtoken]
# Authentication type to load (string value)
auth_type=password
# Complete public Identity API endpoint (string value)
www_authenticate_uri=http://PUBLIC_IDENTITY_IP:5000
# Complete admin Identity API endpoint. (string value)
auth_url=http://PRIVATE_IDENTITY_IP:5000
# Service username. (string value)
username=ironic
# Service account password. (string value)
password=IRONIC_PASSWORD
# Service tenant name. (string value)
project_name=service
# Domain name containing project (string value)
project_domain_name=Default
# User's domain name (string value)
user_domain_name=Default

可以选择更改 JSON RPC 服务将要更改的主机和端口 绑定到,例如:

[json_rpc]
host_ip = 192.168.0.10
port = 9999

九、访问其他 OpenStack 服务的凭证配置

为了与其他 OpenStack 服务通信,”ironic” 服务需要使用服务用户凭证进行身份验证。以下是关于如何配置与 Neutron 和其他服务通信的示例。

[neutron]
auth_type = password
auth_url=https://IDENTITY_IP:5000/
username=ironic
password=IRONIC_PASSWORD
project_name=service
project_domain_id=default
user_domain_id=default
cafile=/opt/stack/data/ca-bundle.pem
region_name = RegionTwo
valid_interfaces=public

如果希望使用特定服务的不同终端节点,可以通过 “endpoint_override” 进行配置,例如:

[neutron]
endpoint_override = <NEUTRON_API_ADDRESS>

将 “<NEUTRON_API_ADDRESS>” 替换为特定网络服务终端节点。

十、重启Ironic-Conductor服务

完成所有配置后,需重启 Ironic-Conductor 服务:

RHEL/CentOS/SUSE:

sudo systemctl restart openstack-ironic-conductor

Ubuntu/Debian:

sudo service ironic-conductor restart

十一、单进程模式运行 Ironic

首先设置环境,如配置 ironic-api 服务和配置 ironic-conductor 服务,但不要 启动任何服务。将配置选项合并到单个配置中 文件。

如果不打算拥有多个 Conductor,则可以禁用 RPC 完全:

[DEFAULT]
rpc_transport = none

如果现有服务已启动,请停止这些服务:

RHEL/CentOS/SUSE 中:

sudo systemctl stop openstack-ironic-api
sudo systemctl stop openstack-ironic-conductor

Ubuntu/Debian:

sudo service ironic-api stop
sudo service ironic-conductor stop

启动或重新启动 ironic 服务:

RHEL/CentOS/SUSE 中:

sudo systemctl restart openstack-ironic

Ubuntu/Debian:

sudo service ironic restart
  • 广告合作

  • QQ群号:707632017

温馨提示:
1、本网站发布的内容(图片、视频和文字)以原创、转载和分享网络内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。邮箱:2942802716#qq.com(#改为@)。 2、本站原创内容未经允许不得转裁,转载请注明出处“站长百科”和原文地址。