Red Hat Enterprise Linux OpenStack Platform 7 Bare Metal Provisioning

安装、配置和使用 Bare Metal Provisioning(Ironic)

OpenStack Team

Red Hat Enterprise Linux OpenStack Platform 7 Bare Metal Provisioning

安装、配置和使用 Bare Metal Provisioning(Ironic)

OpenStack Team [email protected] 法律通告

Copyright © 2017 Red Hat, Inc.

The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/ . In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.

Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.

Red Hat, Red Hat Enterprise Linux, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.

Linux ® is the registered trademark of Linus Torvalds in the United States and other countries.

Java ® is a registered trademark of Oracle and/or its affiliates.

XFS ® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.

MySQL ® is a registered trademark of MySQL AB in the United States, the European Union and other countries.

Node.js ® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.

The OpenStack ® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.

All other trademarks are the property of their respective owners.

摘要 本文档介绍了在一个 Red Hat Enterprise Linux OpenStack Platform 环境的 Overcloud 中安装、配置 和使用 Bare Metal Provisioning 的方法。 目录

目录

序. . 言...... 3 ......

第. . .1 . 章. . .安 . 装. . 和. .配 . .置 . . O. .P .E .N . S. T. .A .C . K. .B . A. .R .E . .M . E. T. A. .L . P. .R .O . V. I.S . I.O . N. I.N . G. (. . I.R . O. .N .I C. .) ...... 4 ...... 1.1. 配置要求 4 1.1.1. Bare Metal Provisioning 安装的假设条件 4 1.1.2. Bare Metal Provisioning 的硬件要求 4 1.1.3. Bare Metal Provisioning 的网络要求 5 1.2. 订阅所需的频道 5 1.3. 安装 BARE METAL PROVISIONING 软件包 6 1.4. 创建 BARE METAL PROVISIONING 数据库 6 1.5. 创建 BARE METAL PROVISIONING IDENTITY 记录 7 1.6. 配置 BARE METAL PROVISIONING 身份验证 8 1.7. 配置防火墙来允许 BARE METAL PROVISIONING 的网络流量 9 1.8. 为 BARE METAL PROVISIONING 设置 RABBITMQ MESSAGE BROKER 9 1.9. 配置 BARE METAL PROVISIONING 与 OPENSTACK NETWORKING 和 OPENSTACK IMAGE 进行通讯 1.10. 配置 OPENSTACK COMPUTE 来使用 BARE METAL PROVISIONING 11 10 1.11. 配置 OPENSTACK NETWORKING 来与 BARE METAL PROVISIONING 进行交流 12

第. . .2 . 章. . .配 . 置. . 裸. .机 . .实 . .施 ...... 1 .5 ...... 2.1. 配置 BARE METAL PROVISIONING 驱动 15 2.2. 创建上传镜像 15 2.3. 创建 BARE METAL PROVISIONING FLAVOR 18 2.4. 为 BARE METAL PROVISIONING 配置 PXE 19 2.5. 配置硬件內省 20 2.6. 添加物理机器作为裸机节点 22 2.6.1. 利用硬件內省功能添加节点 23 2.6.2. 手工添加节点 24 2.7. 使用主机集合来分离物理机部署和虚拟机部署 26 2.8. 示例:使用SSH 和 VIRSH 测试 BARE METAL PROVISIONING 27 2.8.1. 创建虚拟的裸机节点 28 2.8.2. 创建一个 SSH 密钥对 28 2.8.3. 添加虚拟节点作为裸机节点 29

第. . .3 . 章. . .启 . 动. . 裸. .机 . .实 . .例 ...... 3 .1 ...... 3.1. 使用命令行接口实施实例 31 3.2. 通过 DASHBOARD 实施实例 31

第. . .4 . 章. . .对 . .B . A. .R .E . .M . E. T. A. .L . P. R. .O . V. I.S . I.O .N . I.N . G. .进 . .行 . .故 . 障. . 排. .除 ...... 3 .3 ...... 4.1. 对硬件注册进行故障排除 33 4.2. 排除 NO VALID HOST 错误 33 4.3. 对硬件內省的故障排除 34

附. . 录. . .A .. .B . A. .R .E . .M . E. T. A. .L . P. R. .O . V. I.S . I.O .N . I.N . G. .驱 . .动 ...... 3 .5 ...... A.1. INTELLIGENT PLATFORM MANAGEMENT INTERFACE (IPMI) 35 A.2. DELL REMOTE ACCESS CONTROLLER (DRAC) 35 A.3. INTEGRATED LIGHTS-OUT (ILO) 35 A.4. IBOOT 36 A.5. SSH 和 VIRSH 36

1 Red Hat Enterprise Linux OpenStack Platform 7 Bare Metal Provisioning

2 序言

序言

本文档介绍了在 Overcloud 中安装和配置 Bare Metal Provisioning (ironic) 作为一个 OpenStack 服务 的方法,以及使用这个服务为最终用户部署和管理物理机的方法。通过配置这个服务,用户可以象启 用虚拟机实例一样,在物理机上启用实例。

作为 Undercloud 的一部分,Bare Metal Provisioning 组件也被 Red Hat Enterprise Linux OpenStack Platform director 使用来部署和管理构成 OpenStack 环境(Overcloud)的裸机节点。如需了解 director 如何使用 Bare Metal Provisioning 服务的信息,请参阅 Director Installation and Usage。

3 Red Hat Enterprise Linux OpenStack Platform 7 Bare Metal Provisioning

第 1 章 安装和配置 OPENSTACK BARE METAL PROVISIONING(IRONIC)

OpenStack Bare Metal Provisioning(ironic)提供了为最终用户部署和管理物理机所需的组件。 Overcloud 中的 Bare Metal Provisioning 服务会和以下 OpenStack 服务进行交流:

OpenStack Compute(nova)提供了虚拟机实例的调度、租户配额、IP 配置功能,以及用于虚拟 机实例管理的一个面向用户的 API;而 Bare Metal Provisioning 为硬件管理提供了一个管理 API。请选择一个独立的、专用的 openstack-nova-compute 主机来使用 Bare Metal Provisioning 驱动,并处理 Bare Metal Provisioning 请求。

OpenStack Identity(keystone)提供了请求的身份验证功能,并帮助 Bare Metal Provisioning 定 位其它 OpenStack 服务。

OpenStack Image 服务(glance)提供了管理镜像以及镜像元数据的功能。

OpenStack Networking(neutron)提供了 DHCP 和网络配置功能。

1.1. 配置要求

本章介绍了设置 Bare Metal Provisioning 所需的配置要求,包括安装的假设条件、硬件要求和网络要 求。

1.1.1. Bare Metal Provisioning 安装的假设条件

Bare Metal Provisioning 包括了一组组件,这些组件可以被配置为在一个节点上运行,也可以配置为 在多个独立节点上运行。本文档中所使用的示例是在一个节点上安装并配置所有 Bare Metal Provisioning 组件。同时,本文档还基于所有 OpenStack Identity、OpenStack Image、OpenStack Compute 和 OpenStack Networking 服务都已经被安装并配置这一个假设条件的。另外,Bare Metal Provisioning 还需要以下外部服务,这些服务需要作为先决条件已被安装并配置:

一个用来保存硬件信息和状态的数据库服务器。本文档假设 RHEL OpenStack Platform 环境已配 置了 MariaDB 数据库服务。

一个消息服务。本文档假设已在环境中配置了 RabbitMQ。

如果您使用 director 部署 OpenStack 环境,数据库服务和消息服务会在 Overcloud 中的一个 Controller 节点上安装。

RHEL OpenStack Platform 需要在运行 Red Hat Enterprise Linux 7 的 Compute 节点和 OpenStack Networking 节点上使用 iptables 而不是 firewalld。本文档中使用的防火墙规则都是通过 iptables 设置的。

1.1.2. Bare Metal Provisioning 的硬件要求

运行 Bare Metal Provisioning 组件的节点需要满足以下的硬件要求:

支持 Intel 64 或 AMD64 CPU 扩展的 64 位 处理器。

最少 6GB 内存。

最少具有 40GB 可用磁盘空间。

最少两个 1 Gbps 网卡。但是,推荐使用 10 Gbps 网卡来作为 Provisioning 网络的接口(特别是 您需要部署大量裸机时)。

4 第 1 章 安装和配置 OPENSTACK BARE METAL PROVISIONING(IRONIC)

安装 Red Hat Enterprise Linux 7.1 作为主机操作系统。

或者,在一个专门的 openstack-nova-compute 节点上安装并配置 Bare Metal Provisioning 组件。 如需了解和硬件要求相关的信息,请参阅 Director Installation and Usage 指南中的 Compute Node Requirements 一节。

根据您所要安装的操作系统的不同,所部署的裸机的硬件要求也会有所不同。对于 Red Hat Enterprise Linux 7,请参阅 Red Hat Enterprise Linux 7 Installation Guide。对于 Red Hat Enterprise Linux 6,请参阅 Red Hat Enterprise Linux 6 Installation Guide。

1.1.3. Bare Metal Provisioning 的网络要求

Bare Metal Provisioning 最少需要两个网络:

Provisioning 网络:Bare Metal Provisioning 用来部署和管理裸机的私人网络,它提供了 DHCP 和 PXE 引导功能来帮助发现裸机系统。这个网络最好使用一个主干(trunk)接口中的原生 VLAN,这样 Bare Metal Provisioning 就可以处理 PXE 引导和 DHCP 请求。另外,这个网络还被 用来通过被部署的裸机上的带外(out-of-band) 驱动控制电源管理。

External 网络 - 用来进行远程连接的一个独立网络。连接到这个网络的接口需要一个可路由的 IP 地址(静态定义或通过一个外部 DHCP 服务动态分配)。

要被部署的裸机需要满足以下要求:

两个网卡:一个作为 provisioning 网络,另一个用于外部连接。

连接到 provisioning 网络上的一个电源管理接口(如 IPMI)。如果您只需要使用 SSH 用于测 试,则不需要这个接口。

在 provisioning 网络中的 PXE 引导处于系统引导顺序的最前面(在硬盘引导和 CD/DVD 引导之 前)。系统中的所有其它网卡都需要禁用 PXE 引导。

1.2. 订阅所需的频道

为了安装 Bare Metal Provisioning 软件包,需要使用 Red Hat Subscription Manager 注册您的服务 器。如果您在一个 compute 节点上安装 Bare Metal Provisioning,您的服务器可能已经进行了适当的 订阅。运行 yum repolist 命令检查在以下操作中使用的频道是否已经被订阅。

订阅所需的频道

1. 在 Content Delivery Network 中注册您的系统,在提示时输入您的客户门户网站(Customer Portal)的用户名和密码:

# subscription-manager register

2. 找到包括安装 Bare Metal Provisioning 所需频道的权利池:

# subscription-manager list --available | grep -A8 "Red Hat Enterprise Linux Server" # subscription-manager list --available | grep -A8 "Red Hat Enterprise Linux OpenStack Platform"

3. 使用在上一步所获得的权利池 ID 把 Red Hat Enterprise Linux Server 7 和 Red Hat Enterprise Linux OpenStack Platform 的权利附加到系统上。运行以下命令:

5 Red Hat Enterprise Linux OpenStack Platform 7 Bare Metal Provisioning

# subscription-manager attach --pool=POOL_ID

4. 启用所需的频道:

# subscription-manager repos --enable=rhel-7-server-rpms -- enable=rhel-7-server-openstack-7.0-rpms --enable=rhel-7-server- rh-common-rpms --enable=rhel-7-server-optional-rpms -- enable=rhel-7-server-openstack-7.0-optools-rpms

1.3. 安装 BARE METAL PROVISIONING 软件包

Bare Metal Provisioning 需要以下软件包:

openstack-ironic-api

提供 Bare Metal Provisioning API 服务。

openstack-ironic-conductor

提供 Bare Metal Provisioning 的 conductor 服务。conductor 允许添加、编辑和删除节点、关闭或开 启带有 IPMI 或 SSH 功能的节点,并可以部署、实施和停用裸机节点。

python-ironicclient

为和 Bare Metal Provisioning 服务进行交流提供一个命令行接口。

安装软件包:

# yum install openstack-ironic-api openstack-ironic-conductor python- ironicclient

1.4. 创建 BARE METAL PROVISIONING 数据库

创建 Bare Metal Provisioning 使用的数据库。在这个过程中进行的所有操作都需要在数据库服务器上 进行,并需要以 root 用户登录。

创建 Bare Metal Provisioning 数据库

1. 连接到数据库服务:

# mysql -u root -p

2. 创建 ironic 数据库:

mysql> CREATE DATABASE ironic;

3. 创建一个 ironic 数据库用户,并为这个用户分配可以访问 ironic 数据库的权限:

mysql> GRANT ALL ON ironic.* TO 'ironic'@'%' IDENTIFIED BY 'PASSWORD'; mysql> GRANT ALL ON ironic.* TO 'ironic'@'localhost' IDENTIFIED BY 'PASSWORD';

6 第 1 章 安装和配置 OPENSTACK BARE METAL PROVISIONING(IRONIC)

把 PASSWORD 替换为用户在数据库服务器上进行验证的密码。

4. 刷新数据库权限使它们马上生效:

mysql> FLUSH PRIVILEGES;

5. 退出 mysql 客户端:

mysql> quit

6. 设置 connection 配置关键字的值:

# openstack-config --set /etc/ironic/ironic.conf \ database connection mysql://ironic:PASS@IP/ironic

替换以下值:

使用数据库用户的密码替换 PASS。

使用数据库服务器的 IP 地址或主机名替换 IP。

重要

在 "connection" 配置关键字中指定的 IP 地址或主机名必须和在创建 Bare Metal Provisioning 数据库时设置的 Bare Metal Provisioning 数据库用户可以访问的系统的 IP 地 址或主机名相匹配。如果创建的数据库是一个本地数据库,并分配给数据库用户访问 localhost 的权限,您必须使用 localhost。

1.5. 创建 BARE METAL PROVISIONING IDENTITY 记录

创建 Bare Metal Provisioning 所需的 Identity 记录。这些记录可以帮助其它 OpenStack 服务定位并访 问 Bare Metal Provisioning 提供的功能。

这个过程假设您已经创建了一个管理用户账户和一个 services 租户。

在 Identity 服务器上进行这个过程;或在任何已经复制了 keystonerc_admin 文件并安装了 keystone 命令行工具的系统上进行。

为 Bare Metal Provisioning 创建 Identity 记录

1. 把 shell 设置为以管理用户身份访问 Identity:

# source ~/keystonerc_admin

2. 创建 ironic 用户:

# keystone user-create --name ironic \ --pass PASSWORD \ --email IRONIC_EMAIL

使用 Bare Metal Provisioning 用来和 Identity 进行验证时使用的密码替换 PASSWORD;使 用 Bare Metal Provisioning 所使用的电子邮件地址替换 IRONIC_EMAIL。

7 Red Hat Enterprise Linux OpenStack Platform 7 Bare Metal Provisioning

3. 在 services 租户上下文中把 ironic 用户和 admin 角色进行关联:

# keystone user-role-add --user ironic --role admin --tenant services

4. 创建 ironic 服务项:

# keystone service-create --name ironic \ --type baremetal \ --description "OpenStack Bare Metal Provisioning Service"

5. 创建 ironic 端点项:

# keystone endpoint-create \ --service-id IRONIC_ID --publicurl 'http://IP:6385' \ --adminurl 'http://IP:6385' \ --internalurl 'http://IP:6385'

使用上一步返回的唯一 ID 替换 IRONIC_ID;使用提供 Bare Metal Provisioning API 服务的 服务器的 IP 地址或主机名替换 IP。

1.6. 配置 BARE METAL PROVISIONING 身份验证

把 Bare Metal Provisioning 配置为使用 Identity 进行身份验证。在这个过程中进行的所有操作都需要 在运行 Bare Metal Provisioning 的服务器上进行,并需要以 root 用户身份登录。

把 Bare Metal Provisioning 配置为使用 Identity 进行身份验证。

1. 设置 Bare Metal Provisioning 需要使用的 Identity public 和 admin 端点:

# openstack-config --set /etc/ironic/ironic.conf \ keystone_authtoken auth_uri http://IP:5000/v2.0 # openstack-config --set /etc/ironic/ironic.conf \ keystone_authtoken identity_uri http://IP:35357/

使用 Identity 服务器的 IP 地址或主机名替换 IP。

2. 设置 Bare Metal Provisioning 作为 services 租户进行验证:

# openstack-config --set /etc/ironic/ironic.conf \ keystone_authtoken admin_tenant_name services

3. 设置 Bare Metal Provisioning 使用 ironic 管理用户帐号进行验证:

# openstack-config --set /etc/ironic/ironic.conf \ keystone_authtoken admin_user ironic

4. 设置 Bare Metal Provisioning 来使用正确的 ironic 管理用户账户密码:

# openstack-config --set /etc/ironic/ironic.conf \ keystone_authtoken admin_password PASSWORD

8 第 1 章 安装和配置 OPENSTACK BARE METAL PROVISIONING(IRONIC)

使用在创建 ironic 用户时设置的密码替换 PASSWORD。

1.7. 配置防火墙来允许 BARE METAL PROVISIONING 的网络流量

为了启用 bare provisioning,OpenStack 组件需要可以访问 Bare Metal Provisioning API 服 务。修改运行 Bare Metal Provisioning 的服务器上的防火墙规则。在这个过程中进行的全部操作都需 要在所有运行 Bare Metal Provisioning 服务的服务器上运行,并需要以 root 用户登录。

配置防火墙来允许 Bare Metal Provisioning 的网络流量

1. 在一个文本编辑程序中打开 /etc/sysconfig/iptables 文件。

2. 添加一个 INPUT 规则来允许端口 6385 上的 TCP 流量。这个新规则必须出现在所有 REJECT 流量的 INPUT 规则之前:

-A INPUT -p tcp -m multiport --dports 6385 -j ACCEPT

3. 在 /etc/sysconfig/iptables 文件中保存所做的改变。

4. 重启 iptables 服务来使这些改变生效:

# systemctl restart iptables.service

1.8. 为 BARE METAL PROVISIONING 设置 RABBITMQ MESSAGE BROKER

RabbitMQ 是一个默认的(推荐使用的)消息处理程序,RabbitMQ 消息服务由 rabbitmq-server 软件 包提供。在这个过程中进行的所有操作都需要在运行 Bare Metal Provisioning 的服务器上进行,并需 要以 root 用户身份登录。

以下过程假设 RabbitMQ 消息服务已被安装并配置,一个 ironic 用户和相关的密码已在提供消息服 务的服务器上创建。

配置 Bare Metal Provisioning 来使用 RabbitMQ Message Broker

1. 把 RabbitMQ 设置为 RPC 后端:

# openstack-config --set /etc/ironic/ironic.conf \ DEFAULT rpc_backend ironic.openstack.common.rpc.impl_kombu

2. 设置 Bare Metal Provisioning 来连接到 RabbitMQ 主机:

# openstack-config --set /etc/ironic/ironic.conf \ oslo_messaging_rabbit rabbit_host RABBITMQ_HOST

使用运行消息服务的服务器的 IP 地址或主机名替换 RABBITMQ_HOST。

3. 把消息服务的端口设置为 5672:

# openstack-config --set /etc/ironic/ironic.conf \ oslo_messaging_rabbit rabbit_port 5672

9 Red Hat Enterprise Linux OpenStack Platform 7 Bare Metal Provisioning

4. 设置在配置 RabbitMQ 时为 Bare Metal Provisioning 创建的 RabbitMQ 用户名和密码:

# openstack-config --set /etc/ironic/ironic.conf \ oslo_messaging_rabbit rabbit_userid ironic # openstack-config --set /etc/ironic/ironic.conf \ oslo_messaging_rabbit rabbit_password IRONIC_PASS

使用为 Bare Metal Provisioning 创建的 RabbitMQ 密码替换 IRONIC_PASS。

5. 当 RabbitMQ 启动时,ironic 用户会被授予到所有资源(通过虚拟主机)的读和写的权限。 配置 Bare Metal Provisioning 来连接到这个虚拟主机:

# openstack-config --set /etc/ironic/ironic.conf \ oslo_messaging_rabbit rabbit_virtual_host /

1.9. 配置 BARE METAL PROVISIONING 与 OPENSTACK NETWORKING 和 OPENSTACK IMAGE 进行通讯

Bare Metal Provisioning 使用 OpenStack Networking 实现 DHCP 和网络配置;使用 Image 服务来管 理用于引导物理机的镜像。这需要配置 Bare Metal Provisioning 来与 OpenStack Networking 和 Image 服务进行连接和通讯。在这个过程中进行的操作需要在所有运行 Bare Metal Provisioning 服务 的服务器上运行,并需要以 root 用户登录。

配置 Bare Metal Provisioning 与 OpenStack Networking 和 OpenStack Image 进行通讯

1. 配置 Bare Metal Provisioning 来使用 OpenStack Networking 端点:

# openstack-config --set /etc/ironic/ironic.conf \ neutron url http://NEUTRON_IP:9696

使用运行 OpenStack Networking 服务的服务器的 IP 地址或主机名替换 NEUTRON_IP。

2. 设置 Bare Metal Provisioning 来与 Image 服务进行交流:

# openstack-config --set /etc/ironic/ironic.conf \ glance glance_host GLANCE_IP

使用运行 Image 服务的服务器的 IP 地址或主机名替换 GLANCE_IP。

3. 启动 Bare Metal Provisioning API 服务,并把它配置为在引导时启动:

# systemctl start openstack-ironic-api.service # systemctl enable openstack-ironic-api.service

4. 创建 Bare Metal Provisioning 数据库的数据表:

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

5. 启动 Bare Metal Provisioning conductor 服务,并把它配置为在引导时启动:

# systemctl start openstack-ironic-conductor.service # systemctl enable openstack-ironic-conductor.service

10 第 1 章 安装和配置 OPENSTACK BARE METAL PROVISIONING(IRONIC)

1.10. 配置 OPENSTACK COMPUTE 来使用 BARE METAL PROVISIONING

配置 Compute 来使用 Bare Metal Provisioning 驱动。通过这个驱动,Compute 可以使用与部署虚拟 机相同的 API 来部署物理机。每个 openstack-nova-compute 节点只能指定一个驱动,因此,使用 Bare Metal Provisioning 启动的节点将只能部署虚拟机。我们推荐使用一个专用的 openstack-nova- compute 节点来通过 Bare Metal Provisioning 启动部署所有的裸机节点。在这个过程中进行的所有 操作需要在一个指定的 compute 节点和 Compute 控制器节点上运行,并需要以 root 用户登录。

配置 OpenStack Compute 来使用 Bare Metal Provisioning 驱动

1. 设置 Compute 来使用 Bare Metal Provisioning 驱动:

# openstack-config --set /etc/nova/nova.conf \ DEFAULT compute_driver nova.virt.ironic.IronicDriver

2. 设置 Compute 来使用 No-op 防火墙驱动:

# openstack-config --set /etc/nova/nova.conf \ DEFAULT firewall_driver nova.virt.firewall.NoopFirewallDriver

3. 设置 Compute 来使用 Bare Metal Provisioning scheduler host manager:

# openstack-config --set /etc/nova/nova.conf \ DEFAULT scheduler_host_manager nova.scheduler.ironic_host_manager.IronicHostManager

4. 设置虚拟 RAM 到物理 RAM 的分配比率:

# openstack-config --set /etc/nova/nova.conf \ DEFAULT ram_allocation_ratio 1.0

5. 设置为主机保留的磁盘空间大小(以 MB 为单位):

# openstack-config --set /etc/nova/nova.conf \ DEFAULT reserved_host_memory_mb 0

6. 设置 Compute 来使用 clustered compute manager:

# openstack-config --set /etc/nova/nova.conf \ DEFAULT compute_manager ironic.nova.compute.manager.ClusteredComputeManager

7. 设置 Compute 来使用默认的 Bare Metal Provisioning 调度过滤:

# openstack-config --set /etc/nova/nova.conf \ DEFAULT scheduler_use_baremetal_filters True

8. 设置 Compute 来为 Bare Metal Provisioning 使用正确的验证信息:

# openstack-config --set /etc/nova/nova.conf \ ironic admin_username ironic # openstack-config --set /etc/nova/nova.conf \

11 Red Hat Enterprise Linux OpenStack Platform 7 Bare Metal Provisioning

ironic admin_password PASSWORD # openstack-config --set /etc/nova/nova.conf \ ironic admin_url http://IDENTITY_IP:35357/v2.0 # openstack-config --set /etc/nova/nova.conf \ ironic admin_tenant_name services # openstack-config --set /etc/nova/nova.conf \ ironic api_endpoint http://IRONIC_API_IP:6385/v1

替换以下值:

把 PASSWORD 替换为 Bare Metal Provisioning 用来和 Identity 进行验证时使用的密码 。

使用运行 Identity 的服务器的 IP 地址或主机名替换 IDENTITY_IP。

使用运行 Bare Metal Provisioning API 服务的服务器的 IP 地址或主机名替换 IRONIC_API_IP。

9. 在 Compute 控制器节点上重启 Compute 的调度服务:

# systemctl restart openstack-nova-scheduler.service

10. 在 Compute 节点上重启 compute 服务:

# systemctl restart openstack-nova-compute.service

1.11. 配置 OPENSTACK NETWORKING 来与 BARE METAL PROVISIONING 进行交流

配置 OpenStack Networking 来与 Bare Metal Provisioning 进行交流实现 DHCP、PXE 引导,以及其 它要求。以下步骤会在一个扁平化网络用例中配置 OpenStack Networking 用来实现裸机部署。这个 配置使用 ML2 插件和 Open vSwitch agent。

确保用于部署的网络接口和 OpenStack Networking 节点上用于远程连接的网络接口不是同一个。以 下过程会使用部署的网络接口创建一个网桥,并丢掉所有远程连接。

以下过程中的所有步骤都需要在运行 OpenStack Networking 的服务器上进行,并需要以 root 用户登 录。

配置 OpenStack Networking 来和 Bare Metal Provisioning 进行交流

1. 设置启动类型、租户网络类型和 mechanism 驱动:

# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini \ ml2 type_drivers flat # openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini \ ml2 tenant_network_types flat # openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini \ ml2 mechanism_drivers openvswitch

2. 设置扁平化网络可以创建的物理网络的名称:

# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini \ ml2_type_flat flat_networks PHYSNET

12 第 1 章 安装和配置 OPENSTACK BARE METAL PROVISIONING(IRONIC)

使用 OpenStack Networking 和 Bare Metal Provisioning(provisioning 网络)要使用的物理 网络的名称替换 PHYSNET。

3. 设置 VLAN 供应商和租户网络可以使用的物理网络名称:

# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini \ ml2_type_vlan network_vlan_ranges PHYSNET

使用 OpenStack Networking 和 Bare Metal Provisioning(provisioning 网络)要使用的物理 网络的名称替换 PHYSNET。

4. 设置防火墙驱动,并启用安全组:

# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini \ securitygroup firewall_driver neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDr iver # openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini \ securitygroup enable_security_group True

5. 把物理网络映射到一个网桥。这个配置需要在 ml2_conf.ini 文件和 ovs_neutron_plugin.ini 文件中进行:

# openstack-config --set /etc/neutron/plugins/ml2/ml2_conf.ini \ ovs bridge_mappings PHYSNET:br-INTERFACE # openstack-config --set /etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini \ ovs bridge_mappings PHYSNET:br-INTERFACE

使用物理网络的名称替换 PHYSNET;使用 provisioning 网络接口的名称替换 INTERFACE。

6. 为 Open vSwitch 添加集成的网桥:

# ovs-vsctl add-br br-int

7. 创建一个网桥来处理 OpenStack 服务和裸机节点间的通讯,并把网桥映射到网络接口:

# ovs-vsctl add-br br-INTERFACE # ovs-vsctl add-port br-INTERFACE INTERFACE

使用 provisioning 网络接口的名称替换 INTERFACE。

8. 重启 Open vSwitch agent:

# systemctl restart neutron-openvswitch-agent.service

9. 把 shell 设置为以管理用户身份访问 Identity:

# source ~/keystonerc_admin

10. 创建扁平化网络来部署裸机实例:

13 Red Hat Enterprise Linux OpenStack Platform 7 Bare Metal Provisioning

# neutron net-create --tenant-id TENANT_ID sharednet1 --shared \ --provider:network_type flat --provider:physical_network PHYSNET

使用要创建网络的租户的 ID 替换 TENANT_ID;使用物理网络的名称替换 PHYSNET。

11. 在扁平化网络中创建子网:

# neutron subnet-create sharednet1 NETWORK_CIDR --name SUBNET_NAME \ --ip-version=4 --gateway=GATEWAY_IP --allocation-pool \ start=START_IP,end=END_IP --enable-dhcp

替换以下值:

使用代表子网的 IP 地址段的 CIDR(Classless Inter-Domain Routing)替换 NETWORK_CIDR。由 START_IP 和 END_IP 指定的 IP 地址范围必须位于由 NETWORK_CIDR 指定的地址段之内。

使用子网的名称替换 SUBNET_NAME。

使用作为新子网网关的系统的 IP 地址或主机名替换 GATEWAY_IP。这个地址需要在由 NETWORK_CIDR 指定的地址段之内,并且需要在由 START_IP 和 END_IP 指定的 IP 地址范围之外。

使用用于分配浮动 IP 地址的新子网的起始 IP 地址替换 START_IP。

使用用于分配浮动 IP 地址的新子网的终止 IP 地址替换 END_IP。

14 第 2 章 配置裸机实施

第 2 章 配置裸机实施

配置 Bare Metal Provisioning、Image 服务和 Compute 来启用在 OpenStack 环境中实施裸机的功 能。以下小节介绍了成功实施裸机节点所需的额外配置步骤。

2.1. 配置 BARE METAL PROVISIONING 驱动

Bare Metal Provisioning 支持多种驱动来实施和管理裸机服务器。一些驱动有特定的硬件要求,并可 能需要进行额外的配置或安装额外的软件包。如需了解和驱动相关的信息,请参阅 附录 A, Bare Metal Provisioning 驱动。驱动名的前半部分指定了实施的方法(如 PXE),后半部分指定了电源管 理的方法(如 IPMI)。

配置 Bare Metal Provisioning 驱动

1. 指定用于部署裸机服务器的驱动。您可以使用以逗号分隔的列表指定多个驱动:

# openstack-config --set /etc/ironic/ironic.conf \ DEFAULT enabled_drivers DRIVER1,DRIVER2

以下驱动被支持:

IPMI、使用 PXE 实施

pxe_ipmitool

DRAC、使用 PXE 实施

pxe_drac

iLO、使用 PXE 实施

pxe_ilo

iBoot、使用 PXE 实施

pxe_iboot

SSH、使用 PXE 实施

pxe_ssh

2. 重启 Bare Metal conductor 服务:

# systemctl restart openstack-ironic-conductor.service

2.2. 创建上传镜像

部署一个裸机节点需要两类镜像:实施镜像(deploy image)和用户镜像(user image)。Bare Metal Provisioning 使用实施镜像来准备裸机用于安装操作系统。用户镜像被安装在裸机节点上,最 终用户使用它们来安装实际的操作系统。这个过程中的所有操作都需要在运行 Image 服务的服务器 上运行。

以下过程使用从 rhel-7-server-rh-common-rpms 频道下载的 Red Hat Enterprise Linux 7.1 磁盘镜 像。

15 Red Hat Enterprise Linux OpenStack Platform 7 Bare Metal Provisioning

创建实施镜像并把用户镜像添加到 Image 服务

1. 下载 Red Hat Enterprise Linux 7.1 磁盘镜像:

# yum install rhel-guest-image*

把 qcow2 镜像从 /usr/share/rhel-guest-image-7/rhel-guest-image-7.0- xxxxxxxx.x.x86_64/images/rhel-guest-image-7.0-xxxxxxxx.x.x86_64 复制到一个可以被 方便访问的地方。确保这个磁盘镜像可以从用户要构建镜像的机器访问到。

2. 安装 diskimage-builder 软件包:

# yum install diskimage-builder

3. 设置您的注册信息:

# export REG_USER=USER_NAME # export REG_PASSWORD=PASSWORD # export REG_AUTO_ATTACH=true # export REG_METHOD=portal # export DIB_LOCAL_IMAGE=rhel-guest-image-7.1- xxxxxxxx.x.x86_64.qcow2

以上变量会传递给 ramdisk-image-create 命令和 disk-image-create 命令,并用来在客户 门户系统(Customer Portal)中注册系统时使用。即使您用来运行这些命令的系统已经进行 了订阅,您仍然需要设置这些变量。使用您的 Customer Portal 的用户名替换 USER_NAME;使用您的 Customer Portal 的密码替换 PASSWORD;使用从 Customer Portal 下载的磁盘镜像的文件路径替换 rhel-guest-image-7.1-xxxxxxxx.x.x86_64.qcow2。

4. 构建实施镜像:

# ramdisk-image-create rhel7 rhel-common deploy-ironic -o DEPLOY_RAMDISK_NAME --ramdisk-element dracut-ramdisk

使用新文件的文件名替换 DEPLOY_RAMDISK_NAME。这个命令会创建 .kernel 文件和 .initramfs 文件,它们被用来在安装操作系统前对裸机节点进行准备。

5. 构建用户镜像:

# disk-image-create rhel7 rhel-common baremetal dhcp-all- interfaces -o IMAGE_NAME

使用新文件的文件名替换 IMAGE_NAME。这个命令会创建一个在安装操作系统时使用的名 为 .qcow2 的文件。另外,它还会创建 .vmlinuz 文件和 .initrd 文件,在裸机节点通过 .qcow2 文件实施后,会使用这些文件进行引导。

6. 清理您的注册信息:

# unset REG_USER # unset REG_PASSWORD # unset REG_AUTO_ATTACH # unset REG_METHOD # unset DIB_LOCAL_IMAGE

7. 把 shell 设置为以管理用户身份访问 Identity:

16 第 2 章 配置裸机实施

# source ~/keystonerc_admin

8. 把 .kernel 和 .initramfs 实施镜像上传到 Image 服务:

# glance image-create --name NAME --is-public IS_PUBLIC \ --disk-format aki_ \ --container-format CONTAINER_FORMAT \ --file DEPLOY_RAMDISK_NAME.kernel # glance image-create --name NAME --is-public IS_PUBLIC \ --disk-format ari \ --container-format CONTAINER_FORMAT \ --file DEPLOY_RAMDISK_NAME.initramfs

替换以下值:

使用实施镜像的名称替换 NAME。

使用 true 或 false 替换 IS_PUBLIC:

true - 所有用户都可以看到并使用这个镜像。

false - 只有管理员可以看到并使用这个镜像。

使用镜像的容器格式替换 CONTAINER_FORMAT。一般情况下,容器的格式是 bare, 除非镜像被打包在一个格式文件中(如 ovf 或 ami,它们会包括与镜像相关的元数 据)。

使用在构建镜像时创建的镜像文件的名称替换 DEPLOY_RAMDISK_NAME。

重要

记录为每个镜像返回的 ID。

9. 把 .vmlinuz、.initrd 和 .qcow2 用户镜像上传到 Image 服务:

# glance image-create --name NAME --is-public IS_PUBLIC \ --disk-format aki \ --container-format CONTAINER_FORMAT \ --file IMAGE_NAME.vmlinuz # glance image-create --name NAME --is-public IS_PUBLIC \ --disk-format ari \ --container-format CONTAINER_FORMAT \ --file IMAGE_NAME.initrd # glance image-create --name NAME --is-public IS_PUBLIC \ --disk-format qcow2 \ --container-format CONTAINER_FORMAT \ --property kernel_id=VMLINUZ_UUID \ --property ramdisk_id=INITRD_UUID \ --property hypervisor_type=ironic --file IMAGE_NAME.qcow2

替换以下值:

使用用户镜像的名称替换 NAME。

17 Red Hat Enterprise Linux OpenStack Platform 7 Bare Metal Provisioning

使用 true 或 false 替换 IS_PUBLIC:

true - 所有用户都可以看到并使用这个镜像。

false - 只有管理员可以看到并使用这个镜像。

使用镜像的容器格式替换 CONTAINER_FORMAT。一般情况下,容器的格式是 bare, 除非镜像被打包在一个格式文件中(如 ovf 或 ami,它们会包括与镜像相关的元数 据)。

使用第一个命令为 .vmlinuz 镜像返回的 ID 替换 VMLINUZ_UUID。

使用第二个命令为 .initrd 镜像返回的 ID 替换 INITRD_UUID。

使用在构建镜像时创建的镜像文件的名称替换 IMAGE_NAME。

重要

记录为每个镜像返回的 ID。

10. 检查镜像已被成功上传到 Image 服务:

# glance image-list

所有镜像都应该出现在列表中,状态为 active。

2.3. 创建 BARE METAL PROVISIONING FLAVOR

创建一个 Bare Metal Provisioning flavor 来指定裸机节点需要使用的内存数量、CPU 的数量以及磁盘 的大小。使用这个 flavor 来部署具有相同硬件资源的节点,或创建其它 flavor 来部署需要不同硬件资 源的裸机。在这个过程中执行的步骤需要在运行 Compute 服务的服务器上运行,并以 root 用户登 录。

创建 Bare Metal Provisioning flavor

1. 把 shell 设置为以管理用户身份访问 Identity:

# source ~/keystonerc_admin

2. 创建 Bare Metal Provisioning flavor:

# nova flavor-create FLAVOR_NAME auto RAM_MB DISK_GB CPU

替换以下值:

使用新 flavor 的名称替换 FLAVOR_NAME。

使用要使用的内存数量(以 MB 为单位)替换 RAM_MB。

使用要使用的磁盘大小(以 GB 为单位)替换 DISK_GB。

使用要使用的 CPU 数量替换 CPU。

3. 为 flavor 指定 CPU 的架构:

18 第 2 章 配置裸机实施

# nova flavor-key FLAVOR_NAME set cpu_arch="x86_64"

使用 flavor 的名称替换 FLAVOR_NAME;使用要使用的架构类型替换 ARCH。

4. 把使用 flaver 实施的节点配置为,在完成初始的实施后,通过节点磁盘上的一个本地引导挂 载程序(boot loader)而不是通过 PXE 或虚拟介质,来重启引导节点。本地引导的功能同时 还需要在用于部署节点的 flavor 中进行设置。

# nova flavor-key FLAVOR_NAME set capabilities:boot_option="local"

使用 flavor 名替换 FLAVOR_NAME。

2.4. 为 BARE METAL PROVISIONING 配置 PXE

为 Bare Metal Provisioning 配置 PXE。以下的过程使用 TFTP(Trivial File Transfer Protocol)作为 PXE 服务器。这个过程中所进行的操作都需要在运行 Bare Metal Provisioning conductor 服务的服务 器上运行,并以 root 用户登录。

在 Bare Metal Provisioning Conductor 中设置 PXE

1. 创建 tftpboot 目录:

# mkdir /tftpboot

2. 把目录设置为 ironic 用户可以进行写操作:

# chown -R ironic /tftpboot

3. 安装 tftp-server 软件包和 syslinux-tftpboot 软件包:

# yum install tftp-server

4. 把 pxelinux.0 文件复制到 /tftpboot 目录:

# cp /usr/share/syslinux/pxelinux.0 /tftpboot

5. 为了允许整个磁盘镜像可以通过 PXE 实施,把 chain.c32 文件复制到 /tftpboot 目录:

# cp /boot/extlinux/chain.c32 /tftpboot

6. 在 /tftpboot 目录中创建一个映射文件:

# echo 'r ^([^/]) /tftpboot/\1' > /tftpboot/map-file

7. 在一个文本编辑器中打开 /etc/xinetd.d/tftp 文件,编辑 server_args 参数来启用映射文 件,并启用服务:

server_args = --map-file /tftpboot/map-file /tftpboot disable = no

19 Red Hat Enterprise Linux OpenStack Platform 7 Bare Metal Provisioning

8. TFTP 服务器会监听端口 69。使用一个文本编辑器打开 /etc/sysconfig/iptables 文件,添加 一个 INPUT 规则来允许这个端口上的 TCP 网络流量。这个新规则必须在所有 REJECT 网络 流量 INPUT 规则之前:

-A INPUT -m state --state NEW -m udp -p udp --dport 69 -j ACCEPT

9. TFTP 使用临时端口(ephemeral port)来进行通讯和传输文件。除了允许在端口 69 上的网 络流量,还需要配置 iptables 来使用一个模块跟踪 TFTP 使用的端口。在一个文本编辑器中 打开 /etc/sysconfig/iptables-config 文件,添加或更新以下行:

IPTABLES_MODULES="ip_conntrack_tftp"

如果需要,可以在所有其它模块名前添加 ip_conntrack_iptables(以空格分隔)。

10. 重启 iptables 服务以使所做的修改生效:

# systemctl restart iptables.service

11. 重启 xinetd 服务:

# systemctl restart xinetd.service

2.5. 配置硬件內省

硬件內省(hardware introspection)允许 Bare Metal Provisioning 发现一个节点的硬件信息,并为被 发现的以太网 MAC 地址创建端口。或者,您可以为每个节点手工添加硬件信息(请参阅 第 2.6.2 节 “手工添加节点”)。在这个过程中进行的操作必须在运行 Bare Metal Provisioning conductor 服务的 服务器上运行,并需要以 root 用户登录。

使用以下驱动的硬件內省被带内(in-band)支持:

pxe_drac

pxe_ipmitool

pxe_ssh

配置硬件內省

1. 从 Customer Portal 下载裸机系统通过 PXE 引导实现发现(discovery)功能所需的发现内核 和 ramdisk,并把镜像(discovery-ramdisk.kernel 和 discovery-ramdisk.initramfs)复 制到 TFTP 服务器中的 /tftpboot 目录中。这些镜像文件可以通过 https://access.redhat.com/downloads/content/191/ver=7/rhel---7/7/x86_64/product- downloads 获得(以 TAR 包的形式存在)。

2. 在运行硬件內省服务的服务器上启用 Red Hat Enterprise Linux OpenStack Platform Director 7.0 (RPMS) 频道:

# subscription-manager repos --enable=rhel-7-server-openstack- 7.0-director-rpms

3. 安装 openstack-ironic-discoverd 软件包:

# yum install openstack-ironic-discoverd

20 第 2 章 配置裸机实施

4. 在 ironic.conf 文件和 discoverd.conf 文件中启用內省功能:

# openstack-config --set /etc/ironic/ironic.conf \ discoverd enabled True # openstack-config --set /etc/ironic-discoverd/discoverd.conf \ discoverd enabled True

5. 如果硬件內省服务在一个独立的服务器上运行,则需要在运行 conductor 服务的服务器上设 置它的 URL:

# openstack-config --set /etc/ironic/ironic.conf \ discoverd service_url http://DISCOVERD_IP:5050

使用运行硬件內省服务的服务器的 IP 地址或主机名替换 DISCOVERD_IP。

6. 提供带有身份验证凭证的硬件內省服务:

# openstack-config --set /etc/ironic-discoverd/discoverd.conf \ discoverd identity_uri http://IDENTITY_IP:35357 # openstack-config --set /etc/ironic-discoverd/discoverd.conf \ discoverd os_auth_url http://IDENTITY_IP:5000/v2.0 # openstack-config --set /etc/ironic-discoverd/discoverd.conf \ discoverd os_username ironic # openstack-config --set /etc/ironic-discoverd/discoverd.conf \ discoverd os_password PASSWORD # openstack-config --set /etc/ironic-discoverd/discoverd.conf \ discoverd os_tenant_name services # openstack-config --set /etc/ironic-discoverd/discoverd.conf \ discoverd dnsmasq_interface br-INTERFACE # openstack-config --set /etc/ironic-discoverd/discoverd.conf \ discoverd database /var/lib/ironic-discoverd/discoverd.sqlite

替换以下值:

使用 Identity 服务器的 IP 地址或主机名替换 IDENTITY_IP。

把 PASSWORD 替换为 Bare Metal Provisioning 用来和 Identity 进行验证时使用的密码 。

使用 provisioning 网络接口的名称替换 INTERFACE。

7. 另外,还可以把硬件內省服务设置成为 ramdisk 存储日志:

# openstack-config --set /etc/ironic-discoverd/discoverd.conf \ discoverd ramdisk_logs_dir /var/log/ironic-discoverd/ramdisk

8. 或者,还可以启用一个额外的数据处理插件,它会组合带有多个本地磁盘的裸机上的块设 备,并在默认情况下使 root 设备可见。ramdisk_error、scheduler 和 validate_interfaces 在默认情况下被启用,并且不能被禁用。以下命令会把 root_device_hint 加入到列表中:

# openstack-config --set /etc/ironic-discovered/discoverd.conf \ discoverd processing_hooks ramdisk_error,scheduler,validate_interfaces,root_device_hint

21 Red Hat Enterprise Linux OpenStack Platform 7 Bare Metal Provisioning

9. 在一个文本编辑器中打开 /etc/ironic-discoverd/dnsmasq.conf 文件,为 openstack- ironic-discoverd-dnsmasq 服务配置以下 PXE 引导设置:

port=0 interface=br-INTERFACE bind-interfaces dhcp-range=START_IP,END_IP enable-tftp tftp-root=/tftpboot dhcp-boot=pxelinux.0

替换以下值:

使用 provisioning 网络接口的名称替换 INTERFACE。

使用用于分配浮动 IP 地址的地址段的起始 IP 地址替换 START_IP。

使用用于分配浮动 IP 地址的地址段的终止 IP 地址替换 END_IP。

10. 在一个文本编辑器中打开 /tftpboot/pxelinux.cfg/default 文件,配置以下选项:

default discover

label discover kernel discovery-ramdisk.kernel append initrd=discovery-ramdisk.initramfs \ discoverd_callback_url=http://DISCOVERD_IP:5050/v1/continue

ipappend 3

使用运行硬件內省服务的服务器的 IP 地址或主机名替换 DISCOVERD_IP。请注意,从 append 到 /continue 的内容必须在一行中(以上内容中的 \ 表示它们位于同一行)。

11. 为 /tftpboot/ 目录和它的文件重置安全上下文:

# restorecon -R /tftpboot/

这个命令保证了此目录有正确的 SELinux 安全标记,dnsmasq 服务可以访问这个目录。

12. 启动硬件內省服务和 dnsmasq 服务,并把它们配置为在引导时启动:

# systemctl start openstack-ironic-discoverd.service # systemctl enable openstack-ironic-discoverd.service # systemctl start openstack-ironic-discoverd-dnsmasq.service # systemctl enable openstack-ironic-discoverd-dnsmasq.service

当在 Bare Metal Provisioning 中注册了节点后,硬件內省就可以在这些节点上使用了。

2.6. 添加物理机器作为裸机节点

把物理机添加为用来部署实例的节点,并确定 Compute 可以看到可用的硬件。因为 Compute 的资源 跟踪同步操作是定期执行的,所以 Compute 不会马上被通知有新的资源,只有在下一个定期执行的 跟踪同步操作执行后,所做的资源改变才可见。scheduler_driver_task_period 的值可以在 /etc/nova/nova.conf 文件中更新,它的默认值是 60 秒。

当系统被注册为裸机节点后,就可以使用硬件內省功能获得硬件信息,或手工添加它们。

22 第 2 章 配置裸机实施

2.6.1. 利用硬件內省功能添加节点

把一个物理机注册为一个裸机节点,然后使用 openstack-ironic-discoverd 检查它的硬件信息,并 为它的每个以太网 MAC 地址创建一个端口。在这个过程中进行的所有操作都需要在运行 Bare Metal Provisioning conductor 服务的服务器上运行,并需要以 root 用户登录。

利用硬件內省功能添加节点

1. 设置 shell 来使用 Identity 作为管理用户:

# source ~/keystonerc_admin

2. 添加一个新节点:

# ironic node-create -d DRIVER_NAME

使用 Bare Metal Provisioning 用来部署节点的驱动的名称替代 DRIVER_NAME。您需要在 /etc/ironic/ironic.conf 文件中启用这个驱动。为了创建节点,您最少需要指定驱动的名称。

重要

记录下节点的 ID。

3. 您可以使用逻辑名或 UUID 来代表一个节点。使用以下命令可以为节点分配一个逻辑名:

# ironic node-update NODE_UUID add name=NAME

使用节点的 ID 替换 NODE_UUID;使用节点的逻辑名替换 NAME。

4. 决定驱动所需的节点信息,然后更新节点驱动来允许 Bare Metal Provisioning 管理节点:

# ironic driver-properties DRIVER_NAME # ironic node-update NODE_UUID add \ driver_info/PROPERTY=VALUE driver_info/PROPERTY=VALUE

替换以下值:

使用显示属性的驱动的名称替换 DRIVER_NAME。信息只会在驱动已在 /etc/ironic/ironic.conf 文件中注册后才会返回。

使用节点的 ID 替换 NODE_UUID。或者,使用节点的逻辑名。

使用 ironic driver-properties 命令返回的属性替换 PROPERTY。

使用属性的有效值替换 VALUE。

5. 为节点驱动指定实施内核和实施 ramdisk:

# ironic node-update NODE_UUID add \ driver_info/deploy_kernel=KERNEL_UUID driver_info/deploy_ramdisk=INITRAMFS_UUID

23 Red Hat Enterprise Linux OpenStack Platform 7 Bare Metal Provisioning

替换以下值:

使用节点的 ID 替换 NODE_UUID。或者,使用节点的逻辑名。

使用上传到 Image 服务的 .kernel 镜像的 ID 替换 KERNEL_UUID。

使用上传到 Image 服务的 .initramfs 镜像的 ID 替换 INITRAMFS_UUID。

6. 把节点配置为,在完成初始的实施后通过节点磁盘上的一个本地引导挂载程序(boot loader),而不是通过 PXE 或虚拟介质来重启引导节点。本地引导的功能同时还需要在用于 部署节点的 flavor 中进行设置。要启用本地引导,用于实施节点的镜像必须包括 grub2。运 行以下命令配置本地引导:

# ironic node-update NODE_UUID add \ properties/capabilities="boot_option:local"

使用节点的 ID 替换 NODE_UUID。或者,使用节点的逻辑名。

7. 把裸机节点设置为 manageable 状态:

# ironic node-set-provision-state NODE_UUID manage

使用节点的 ID 替换 NODE_UUID。或者,使用节点的逻辑名。

8. 启动內省功能:

# ironic node-set-provision-state NODE_UUID inspect

使用节点的 ID 替换 NODE_UUID;或者,使用节点的逻辑名。节点的发现和內省过程需要 在节点可以被部署前运行完成。要检查节点內省的状态,运行 ironic node-list 命令并检查 Provision State 的值。当內省成功后,节点的状态应该是 available。

9. 检验节点的设置:

# ironic node-validate NODE_UUID +------+------+------+ | Interface | Result | Reason | +------+------+------+ | console | None | not supported | | deploy | True | | | inspect | True | | | management | True | | | power | True | | +------+------+------+

使用节点的 ID 替换 NODE_UUID。或者,使用节点的逻辑名。以上命令的输出应该显示每 个接口为 True 或 None。显示为 None 的接口是还没有配置的接口,或是不被驱动支持的接 口。

2.6.2. 手工添加节点

把一个物理机注册为一个裸机节点,然后手工添加它的硬件信息,并为它的每个以太网 MAC 地址创 建一个端口。在这个过程中进行的所有操作都需要在运行 Bare Metal Provisioning conductor 服务的 服务器上运行,并需要以 root 用户登录。

24 第 2 章 配置裸机实施

不利用硬件內省功能添加节点

1. 设置 shell 来使用 Identity 作为管理用户:

# source ~/keystonerc_admin

2. 添加一个新节点:

# ironic node-create -d DRIVER_NAME

使用 Bare Metal Provisioning 用来部署节点的驱动的名称替代 DRIVER_NAME。您需要在 /etc/ironic/ironic.conf 文件中启用这个驱动。为了创建节点,您最少需要指定驱动的名称。

重要

记录下节点的 ID。

3. 您可以使用逻辑名或 UUID 来代表一个节点。使用以下命令可以为节点分配一个逻辑名:

# ironic node-update NODE_UUID add name=NAME

使用节点的 ID 替换 NODE_UUID;使用节点的逻辑名替换 NAME。

4. 决定驱动所需的节点信息,然后更新节点驱动来允许 Bare Metal Provisioning 管理节点:

# ironic driver-properties DRIVER_NAME # ironic node-update NODE_UUID add \ driver_info/PROPERTY=VALUE driver_info/PROPERTY=VALUE

替换以下值:

使用显示属性的驱动的名称替换 DRIVER_NAME。信息只会在驱动已在 /etc/ironic/ironic.conf 文件中注册后才会返回。

使用节点的 ID 替换 NODE_UUID。或者,使用节点的逻辑名。

使用 ironic driver-properties 命令返回的属性替换 PROPERTY。

使用属性的有效值替换 VALUE。

5. 为节点驱动指定实施内核和实施 ramdisk:

# ironic node-update NODE_UUID add \ driver_info/deploy_kernel=KERNEL_UUID driver_info/deploy_ramdisk=INITRAMFS_UUID

替换以下值:

使用节点的 ID 替换 NODE_UUID。或者,使用节点的逻辑名。

使用上传到 Image 服务的 .kernel 镜像的 ID 替换 KERNEL_UUID。

使用上传到 Image 服务的 .initramfs 镜像的 ID 替换 INITRAMFS_UUID。

25 Red Hat Enterprise Linux OpenStack Platform 7 Bare Metal Provisioning

6. 更新节点属性来配置硬件的规格

# ironic node-update NODE_UUID add \ properties/cpus=CPU \ properties/memory_mb=RAM_MB \ properties/local_gb=DISK_GB \ properties/cpu_arch=ARCH

替换以下值:

使用节点的 ID 替换 NODE_UUID。或者,使用节点的逻辑名。

使用要使用的 CPU 数量替换 CPU。

使用要使用的内存数量(以 MB 为单位)替换 RAM_MB。

使用要使用的磁盘大小(以 GB 为单位)替换 DISK_GB。

使用架构类型替换 ARCH。

7. 把节点配置为,在完成初始的实施后通过节点磁盘上的一个本地引导挂载程序(boot loader),而不是通过 PXE 或虚拟介质来重启引导节点。本地引导的功能同时还需要在用于 部署节点的 flavor 中进行设置。要启用本地引导,用于实施节点的镜像必须包括 grub2。运 行以下命令配置本地引导:

# ironic node-update NODE_UUID add \ properties/capabilities="boot_option:local"

使用节点的 ID 替换 NODE_UUID。或者,使用节点的逻辑名。

8. 向 Bare Metal Provisioning 提供节点上的网卡信息。为每个网络的 MAC 地址创建一个端 口:

# ironic port-create -n NODE_UUID -a MAC_ADDRESS

使用节点的 ID 替换 NODE_UUID;使用节点上的网卡的 MAC 地址替换 MAC_ADDRESS。

9. 检验节点的设置:

# ironic node-validate NODE_UUID +------+------+------+ | Interface | Result | Reason | +------+------+------+ | console | None | not supported | | deploy | True | | | inspect | None | not supported | | management | True | | | power | True | | +------+------+------+

使用节点的 ID 替换 NODE_UUID。或者,使用节点的逻辑名。以上命令的输出应该显示每 个接口为 True 或 None。显示为 None 的接口是还没有配置的接口,或是不被驱动支持的接 口。

2.7. 使用主机集合来分离物理机部署和虚拟机部署

26 第 2 章 配置裸机实施

OpenStack Compute 使用主机集合(host aggregate)对可用域(availability zone)进行分区,并 根据共享的特定属性对节点进行分组。这些属性以“键/值”对的形式在主机集合和实例中进行定义。当 一个实例被部署时,Compute 的调度程序会把 flavor 中的“键/值”对与分配给主机集合的“键/值”对进 行比较,用来保证实例被正确组合并位于正确的主机上(在一个物理机上或 openstack-nova- compute 节点的虚拟机上)。

如果把 RHEL OpenStack Platform 环境设置为部署裸机和虚拟机,可以使用主机集合把实例分散到 物理机和虚拟机中。以下过程会为裸机主机创建一个主机集合,并添加一个“键/值”对来把主机的类型 设置为 baremetal。这个集合中的裸机节点都会继承这个“键/值”对。相同的“键/值”然后会被加入到 flavor 来部署实例。

如果用来部署裸机的镜像在上传到 Image 服务时带有 hypervisor_type=ironic 属性设置,调度 程序会在进行调度时使用这个键的值进行决定。为了在镜像属性可能没有被应用时仍然可以正确进行 调度,在设置镜像属性外还应该设置主机集合。如需了解更多与构建和上传镜像相关的信息,请参阅 第 2.2 节 “创建上传镜像”。

为 Bare Metal Provisioning 创建一个主机集合

1. 在默认的 nova 可用域中为 baremetal 创建主机集合:

# nova aggregate-create baremetal nova

2. 在 baremetal 集合中设置元数据,从而可以把主机分配到有 hypervisor_type=ironic 属性的集合中:

# nova aggregate-set-metadata baremetal hypervisor_type=ironic

3. 把带有 Bare Metal Provisioning 驱动的 openstack-nova-compute 节点加入到 baremetal 集合:

# nova aggregate-add-host baremetal COMPUTE_HOSTNAME

使用运行 openstack-nova-compute 服务的系统的主机名替换 COMPUTE_HOSTNAME。 使用一个专用的主机来处理所有 Bare Metal Provisioning 请求。

4. 把 ironic hypervisor 属性添加到为部署裸机节点所创建的 flavor 中:

# nova flavor-key FLAVOR_NAME set hypervisor_type="ironic"

使用 flavor 名替换 FLAVOR_NAME。

5. 把以下 Compute 过滤调度添加到 /etc/nova/nova.conf 文件的 scheduler_default_filters 列表中:

AggregateInstanceExtraSpecsFilter

这个过滤器确保 Compute 调度程序处理添加到主机集合中的“键/值”对。

2.8. 示例:使用SSH 和 VIRSH 测试 BARE METAL PROVISIONING

为了测试 Bare Metal Provisioning 的设置,在一个物理主机中的两个虚拟机上实施实例来作为裸机节 点。这两个虚拟机是通过 libvirt 和 virsh 实现虚拟化的。

27 Red Hat Enterprise Linux OpenStack Platform 7 Bare Metal Provisioning

重要

SSH 驱动只用于测试和评估目的。我们不推荐在 Red Hat Enterprise Linux OpenStack Platform 企业级环境中使用它。

这个环境需要以下资源:

带有在 Overcloud 节点上配置的 Bare Metal Provisioning 服务的一个 RHEL OpenStack Platform 环境。您需要已经完成了本指南中 第 2.4 节 “为 Bare Metal Provisioning 配置 PXE” 以及之前章 节中的所有操作。

安装了 Red Hat Enterprise Linux 7.1 和 libvirt 虚拟化工具程序的一个裸机。这个系统作为包括虚 拟裸机节点的主机。

在 Bare Metal Provisioning 节点和包括虚拟裸机的主机间的一个网络连接。这个网络作为 provisioning 网络。

2.8.1. 创建虚拟的裸机节点

创建两个作为裸机节点的虚拟机。这两个节点分别是 Node1 和 Node2。

创建虚拟的裸机节点

1. 从 libvirt 主机上访问虚拟机管理器。

2. 创建两个具有以下配置的虚拟机:

一个 vCPU

2048 MB 内存

网络引导(PXE)

20 GB存储

Network source: Host device eth0: macvtap 和 Source mode: Bridge。选择 macvtap 设置来共享主机的以太网网络接口,从而使 Bare Metal Provisioning 节点可以 直接访问虚拟的节点。

3. 关闭两个虚拟机。

2.8.2. 创建一个 SSH 密钥对

创建一个 SSH 密钥对,从而可以允许 Bare Metal Provisioning 节点连接到 libvirt 主机。

创建一个 SSH 密钥对

1. 在 Bare Metal Provisioning 节点上创建一个新的 SSH 密钥:

# ssh-keygen -t rsa -b 2048 -C "[email protected]" -f ./virtkey

使用电子邮件地址或其它可以区分用户的值替代 [email protected]。当命令提示您输入一段 密文时,按 Enter 继续而不使用密文。这个命令会创建两个文件:私钥文件(virtkey)和公 钥文件(virtkey.pub)。

28 第 2 章 配置裸机实施

2. 为 libvirt 主机的 root 用户把公钥的内容复制到 /root/.ssh/authorized_keys 文件中:

# ssh-copy-id -i virtkey root@LIBVIRT_HOST

使用 libvirt 主机的 IP 地址或主机名替换 LIBVIRT_HOST。

私钥(virtkey)会在节点注册时使用。

2.8.3. 添加虚拟节点作为裸机节点

添加虚拟机作为节点来部署实例。在这个示例中,驱动的信息被手工提供,而节点的信息由硬件內省 功能获得。另外,节点的信息也可以基于节点进行手工添加。如需了解更多信息,请参阅 第 2.6.2 节 “手工添加节点”。

添加虚拟的节点作为裸机节点

1. 在 Bare Metal Provisioning conductor 服务节点上启用 pxe_ssh 驱动:

# openstack-config --set /etc/ironic/ironic.conf \ DEFAULT enabled_drivers pxe_ssh

如果您需要把 pxe_ssh 添加到一组存在的驱动列表中,打开文件,把驱动添加到 enabled_drivers 列表中(不同的驱动以逗号分隔)。

2. 设置 shell 来使用 Identity 作为管理用户:

# source ~/keystonerc_admin

3. 添加第一个节点,为 libvirt 主机注册 SSH 的信息:

# ironic node-create -d pxe_ssh -n Node1 \ -i ssh_virt_type=virsh \ -i ssh_username=root \ -i ssh_key_filename=VIRTKEY_FILE_PATH \ -i ssh_address=LIBVIRT_HOST_IP \ -i deploy_kernel=KERNEL_UUID -i deploy_ramdisk=INITRAMFS_UUID

替换以下值:

使用 virtkey SSH 私钥文件的绝对路径替换 VIRTKEY_FILE_PATH。

使用 libvirt 主机的 IP 地址或主机名替换 LIBVIRT_HOST_IP。

使用上传到 Image 服务的 .kernel 镜像的 ID 替换 KERNEL_UUID。

使用上传到 Image 服务的 .initramfs 镜像的 ID 替换 INITRAMFS_UUID。

4. 使用相同的命令添加第二个节点(把其中的 Node1 替换为 Node2)。

5. 把节点配置为,在完成初始的实施后通过节点磁盘上的一个本地引导挂载程序(boot loader),而不是通过 PXE 或虚拟介质来重启引导节点。本地引导的功能同时还需要在用于 部署节点的 flavor 中进行设置。要启用本地引导,用于实施节点的镜像必须包括 grub2。运 行以下命令配置本地引导:

29 Red Hat Enterprise Linux OpenStack Platform 7 Bare Metal Provisioning

# ironic node-update Node1 add \ properties/capabilities="boot_option:local" # ironic node-update Node2 add \ properties/capabilities="boot_option:local"

6. 把裸机节点设置为可管理的状态:

# ironic node-set-provision-state Node1 manage # ironic node-set-provision-state Node2 manage

7. 在节点上启用內省功能

# ironic node-set-provision-state Node1 inspect # ironic node-set-provision-state Node2 inspect

节点的发现和內省过程需要在节点可以被部署前运行完成。要检查节点內省的状态,运行 ironic node-list 命令并检查 Provision State 的值。当內省成功后,节点的状态应该是 available。

8. 检验节点的设置:

# ironic node-validate Node1 # ironic node-validate Node2 +------+------+------+ | Interface | Result | Reason | +------+------+------+ | console | None | not supported | | deploy | True | | | inspect | True | | | management | True | | | power | True | | +------+------+------+

以上命令的输出应该显示每个接口为 True 或 None。显示为 None 的接口是还没有配置的接 口,或是不被驱动支持的接口。

9. 当节点被成功添加后,按照 第 3 章 启动裸机实例 的内容启动两个实例。

30 第 3 章 启动裸机实例

第 3 章 启动裸机实例

在注册的裸机节点上部署一个物理机。实例可以通过命令行或 OpenStack 启动。

3.1. 使用命令行接口实施实例

使用 nova 命令行接口实施一个裸机实例。

在命令行中实施一个实例

1. 把 shell 设置为以管理用户身份访问 Identity:

# source ~/keystonerc_admin

2. 实施实例

# nova boot --nic net-id=NETWORK_UUID --flavor FLAVOR_NAME -- image IMAGE_UUID INSTANCE_NAME

替换以下值:

使用用来和 Bare Metal Provisioning 一起使用的网络的 ID 替换 NETWORK_UUID。

使用为节点创建的 flavor 的名称替换 FLAVOR_NAME。

使用上传到 Image 服务的磁盘镜像的 ID 替换 IMAGE_UUID。

使用裸机的名称替换 INSTANCE_NAME。

3. 检查实例的状态

# nova list

3.2. 通过 DASHBOARD 实施实例

使用 dashboard 图形化用户接口实施裸机实例。

在 Dashboard 中实施一个实例

1. 登录到 dashboard(https://DASHBOARD_IP/dashboard)。

2. 点项目 > Compute > 实例

3. 点启动云主机。

4. 在详情标签页中填写以下项:

指定云主机名称。

选择为裸机节点创建的云主机类型。

在云主机数量列表中选 1。

在云主机启动源列表中选从镜像启动。

31 Red Hat Enterprise Linux OpenStack Platform 7 Bare Metal Provisioning

在镜像名称列表中选择磁盘镜像的操作系统。

5. 在网络标签页中,把所需的网络从可用网络拖到已选项的网络。您需要选择为 Bare Metal Provisioning 创建的共享网络。

6. 点运行。

32 第 4 章 对 BARE METAL PROVISIONING 进行故障排除

第 4 章 对 BARE METAL PROVISIONING 进行故障排除

以下章节提供了对在 Bare Metal Provisioning 设置中出现的问题进行诊断和排除有帮助的信息。

带有內省功能的 Bare Metal Provisioning 使用 4 个服务:openstack-ironic-api、openstack- ironic-conductor、openstack-ironic-discoverd 和 openstack-ironic-discoverd-dnsmasq。多 数 OpenStack 组件的日志信息可以在 /var/log 目录中找到。

4.1. 对硬件注册进行故障排除

注册硬件过程中出现的问题可能是由不正确的节点注册详情造成的。请确认正确输入了属性的名称和 值。如果输入了不正确的属性名,属性名会被成功加入到节点的详情信息中,但将被忽略。

更新节点的详情。这个示例把节点注册的内存数量更新为 2 GB:

# ironic node-update NODE_UUID replace properties/memory_mb=2048

4.2. 排除 NO VALID HOST 错误

如果 Compute 调度程序无法找到一个合适的 Bare Metal Provisioning 节点来引导一个实 例,NoValidHost 错误会出现在 /var/log/nova/nova-conductor.log 中,或在实例启动失败后出现 在 dashboard 中。这通常是由于 Compute 所期望的资源和 Bare Metal Provisioning 节点所提供的资 源不匹配造成的。

1. 检查可用的虚拟机监控程序资源:

# nova hypervisor-stats

这里所报告的资源需要和 Bare Metal Provisioning 节点所提供的资源相匹配。

2. 检查 Compute 可以识别 Bare Metal Provisioning 节点作为虚拟机监控程序:

# nova hypervisor-list

由 UUID 所代表的节点应该出现在这个列表中。

3. 检查 Bare Metal Provisioning 节点的详情:

# ironic node-list # ironic node-show NODE_UUID

验证节点详情和 Compute 所报告的信息相匹配。

4. 检查所选的 flavor 没有超过 Bare Metal Provisioning 节点中的可用资源:

nova flavor-show _FLAVOR_NAME_

5. 检查 ironic node-list 的输出,确定 Bare Metal Provisioning 节点没有处于维护模式。如果 需要,取消维护模式:

# ironic node-set-maintenance NODE_UUID off

33 Red Hat Enterprise Linux OpenStack Platform 7 Bare Metal Provisioning

6. 检查 ironic node-list 的输出,确定 Bare Metal Provisioning 节点没有处于 available 的 状态。如果需要,把节点设为 available 模式:

# ironic node-set-provision-state NODE_UUID provide

4.3. 对硬件內省的故障排除

硬件內省可能会在部署状态为 available 的 Bare Metal Provisioning 节点上失败。

1. 检查所有节点的部署状态:

# ironic node-list

2. 在开始內省前,把节点由 available 改为 manageable:

# ironic node-set-provision-state NODE_UUID manage

34 附录 A. BARE METAL PROVISIONING 驱动

附录 A. BARE METAL PROVISIONING 驱动

Bare Metal Provisioning 可以被配置为使用多个可选驱动中的一个。每个驱动都提供一个部署方法和 电源管理类型,其中一些驱动需要额外的配置。本节中介绍的驱动根据它们的电源管理类型列出,所 有驱动都使用 PXE 进行部署。如需了解为 Bare Metal Provisioning 启用和禁用驱动的信息,请参阅 第 2.1 节 “配置 Bare Metal Provisioning 驱动”。

A.1. INTELLIGENT PLATFORM MANAGEMENT INTERFACE (IPMI)

IPMI 是一个提供带外(out-of-band)远程管理功能(包括电源管理和服务器监控)的接口。要使用 这个电源管理类型,所有 Bare Metal Provisioning 节点都需要一个连接到共享 provisioning 网络的 IPMI。启用 pxe_ipmitool 驱动,并在节点的 driver_info 中设置以下信息:

ipmi_address - IPMI NIC 的 IP 地址。

ipmi_username - IPMI 的用户名。

ipmi_password - IPMI 的密码。

A.2. DELL REMOTE ACCESS CONTROLLER (DRAC)

DRAC 是一个提供带外(out-of-band)远程管理功能(包括电源管理和服务器监控)的接口。要使用 这个电源管理类型,所有 Bare Metal Provisioning 节点都需要一个连接到共享 provisioning 网络的 DRAC。启用 pxe_drac 驱动,并在节点的 driver_info 中设置以下信息:

drac_address - DRAC NIC 的 IP 地址。

drac_username - DRAC 的用户名。

drac_password - DRAC 的密码。

A.3. INTEGRATED LIGHTS-OUT (ILO) iLO 是一个提供带外(out-of-band)远程管理功能(包括电源管理和服务器监控)的接口。要使用这 个电源管理类型,所有 Bare Metal Provisioning 节点都需要一个连接到共享 provisioning 网络的 iLO 接口。启用 pxe_ilo 驱动,并在节点的 driver_info 中设置以下信息:

ilo_address - iLO 节点 NIC 的 IP 地址。

ilo_username - iLO 用户名。

ilo_password - iLO 密码。

您还需要安装 python-proliantutils 软件包,并重启 Bare Metal Provisioning conductor 服务:

# yum install python-proliantutils # systemctl restart openstack-ironic-conductor.service

注意

为了成功进行內省,HP 节点必须是 2015 的固件版本。

35 Red Hat Enterprise Linux OpenStack Platform 7 Bare Metal Provisioning

A.4. IBOOT

Dataprobe 的 iBoot 是一个为系统提供远程电源管理功能的电源单元。如需在一个 Bare Metal Provisioning 节点上使用这个电源管理类型,这个节点需要一个连接到共享 provisioning 网络的 iBoot 接口。启用 pxe_iboot 驱动,并在节点的 driver_info 中设置以下信息:

iboot_address - iBoot 接口 NIC 的 IP 地址。

iboot_username - iBoot 的用户名。

iboot_password - iBoot 的密码。

您还需要安装 python-iboot 库:

# yum install python-iboot

A.5. SSH 和 VIRSH

Bare Metal Provisioning 可以访问运行 libvirt 的主机,并使用虚拟机作为节点。Virsh 用来控制节点的 电源管理。

重要

SSH 驱动只用于测试和评估目的。我们不推荐在 Red Hat Enterprise Linux OpenStack Platform 企业级环境中使用它。

要使用这个电源管理类型,Bare Metal Provisioning 必须具有一个 SSH 访问帐号,这个帐号需要具 有完全访问将要设置虚拟节点的主机中的 libvirt 环境的权限。启用 pxe_ssh 驱动,并在节点的 driver_info 中设置以下信息:

ssh_virt_type - 把这个选项设置为 virsh。

ssh_address - virsh 主机的 IP 地址。

ssh_username - SSH 用户名。

ssh_key_contents - Bare Metal Provisioning conductor 节点上的 SSH 私钥的内容。相对应的 公钥必须复制到 virsh 主机。

36