基于OpenStack官网指导,结合实际中的应用,予以总结。

整体结构:

一, 裸金属服务概况


裸金属服务( Bare Metal service)是一系列用于提供支持管理和部署物理服务器的组件集合。

  裸金属服务的项目名称为ironic,裸金属服务根据具体的配置,与其它openstack组件互相配合使用,包括:
1)通过IPMI实现和计量数据收集服务ceilometer组件的对接
2)keystone认证服务
3)用于检索镜像和镜像meta-data的glance服务
4)用于DHCP和网络配置的neutron服务
5)与 Bare Metal service协作进行的nova计算服务组件,Bare Metal service提供硬件管理服务,nova提供实例管理的用户API接口。
nova计算服务同时提供调度能力,用于匹配flavor、image、租户配额,ip指定等其它 Bare Metal service服务本身没有的服务。
6)swift对象存储服务

  裸金属服务包括以下组件:
1, ironic-api
一个 RESTful API,用来处理用户的请求,接受请求后,通过RPC把请求发送给 ironic-conductor。
2, ironic-conductor
添加/修改/删除节点;通过IPMI协议或其它用户指定协议,来对nodes裸金属节点进行开关机; 提供/部署/清除裸金属节点。
3, ironic-python-agent
在ramdisk临时内存虚拟盘系统运行的一个python代理服务,用于提供外部ironic-conductor服务和ironic-inspector服务的远程访问,以及带内硬件控制,和硬件自检功能。
此外,和其它openstack服务类似, Bare Metal service服务也有一定的外部服务依赖:
1)database数据库:来存储硬件信息和状态,可以设置后台数据库类型和位置。一个简单方法是和计算节点使用同样的后台数据库;
2)消息队列.例如 RabbitMQ.可以使用与计算服务相同的实现,但这没有具体要求,能通信就行。

  另外,利用以下相关的项目可以获得额外的功能。
通过ironicclient python API可以访问ironic,有两种CLI可以访问:
(1)Ironic客户端命令行(CLI)
调用格式:
ironic [options] <command> [command-options]
ironic help
ironic help <command>

 Ironic Client Command-Line Interface (CLI)与OpenStack的Bare Metal Service (即Ironic)相互作用。
 例如:
 获取可用的ironic driver列表、节点列表,创建节点等操作。
 $ ironic driver-list
 $ ironic node-list
 $ ironic node-create -d fake_ipmitool -i ipmi_address=1.2.3.4

(2)OpenStack客户端命令行(CLI)
调用格式:
openstack [options] baremetal <command> [command-options]
openstack help baremetal <command>
例如:获取可用的ironic driver列表、节点列表,创建节点等操作。
$ openstack baremetal driver list
$ openstack baremetal node create --driver agent_ipmitool --driver-info ipmi_address=1.2.3.4
$ openstack baremetal node list

要使用以上这两个CLI,执行命令前,都必须要提供openstack的用户名密码项目、认证接口等,需要配置--os-username, --os-password, --os-project-id (or --os-project-name),  --os-auth-url,可以把这些参数写入环境变量中:
export  OS_USERNAME =user
export  OS_PASSWORD =password
export  OS_PROJECT_NAME =project                          # or OS_PROJECT_ID,最好写name
export  OS_PROJECT_DOMAIN_ID =default
export  OS_USER_DOMAIN_ID =default
export  OS_IDENTITY_API_VERSION = 3
export  OS_AUTH_URL =http://auth.example.com:5000/identity

一个通过PXE启动未注册硬件到ironic- pythonagent ramdisk上执行带内硬件内省的服务

用于创建ramdisk和物理机镜像的一个相关项目

4, bifrost
一组Ansible脚本,它可以在standalone模式下,自动地将一个基础镜像部署到一组已知的硬件上。

二, 安装配置裸金属服务

此处以 Red Hat Enterprise Linux 7/CentOS的安装配置举例

1,安装配置前提
  裸金属服务是提供管理和供应物理服务器的组件集合。你可以配置这些组件运行在分离的节点或相同的节点上。这个指导中,组件运行在同一个节点上,一般运行在计算服务的计算节点上。
此处,假设认证、镜像、计算和网络服务都已经配置好了。

1.1 为裸金属配置数据库
  裸金属服务在数据库中存储信息。此指导中使用其它openstack服务都使用的MySQL数据库 
在MySQL数据库中,创建ironic数据库,并且使ironic用户可以访问,修改IRONIC_DBPASSWORD为自定义的密码:
# mysql -u root -p
mysql> CREATE DATABASE ironic CHARACTER SET utf8;
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';
2, 组件安装配置
使用yum安装相关应用包:
# yum install openstack-ironic-api openstack-ironic-conductor python-ironicclient
启动服务:
# systemctl  enable openstack-ironic-api openstack-ironic-conductor
# systemctl start openstack-ironic-api openstack-ironic-conductor

裸金属服务的本地配置文件是:/etc/ironic/ironic.conf,可以参考Sample Configuration File ,根据需要来进行配置
ironic-api和ironic-conductor可以在同一主机上,也可以在不同主机。用户也可以添加新的ironic-conductor主机去处理不断增长的裸金属节点[Pike版本],但是新增的ironic-conductor服务应该和原来的ironic-conductor版本一致。

2.1 配置ironic-api服务
(1)裸金属服务在数据库中存储信息。此指导中使用其它openstack服务都使用的MySQL数据库
通过配置文件中的connection选项配置本地数据库。如下,把IRONIC_DBPASSWORD替换为ironic用户的自定义密码,DB_IP替换为本地数据库服务的地址。
[database]

# The SQLAlchemy connection string used to connect to the
# database (string value)
connection = mysql+pymysql://ironic:IRONIC_DBPASSWORD@DB_IP/ironic?charset=utf8
(2)配置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/
(3)配置ironic-api服务使用认证信息的认证服务,替换PUBLIC_IDENTITY_IP为公网的认证服务IP,替换PRIVATE_IDENTITY_IP为私网的认证服务IP,替换IRONIC_PASSWORD为ironic用户在认证服务的自定义密码。

[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)
auth_uri = http://PUBLIC_IDENTITY_IP:5000

# Complete admin Identity API endpoint. (string value)
auth_url = http://PRIVATE_IDENTITY_IP:35357

# 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
(4)创建裸金属服务数据库表

$ ironic-dbsync --config-file /etc/ironic/ironic.conf create_schema
(5)重启ironic-api服务

Fedora/RHEL7/CentOS7/SUSE:  
  sudo systemctl restart openstack-ironic-api

2.2 配置ironic-conductor服务
(1)替换HOST_IP为conductor的IP。
如果conductor有多个IP,my_ip应该设置为和裸金属节点在同一网段的IP。(若conductor有多个网段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
(2)配置ironic-api服务的URL,替换IRONIC_API_IP为ironic-api服务的IP
[conductor]

# URL of Ironic API service. If not set ironic can get the
# current value from the keystone service catalog. (string # value)
api_url = http://IRONIC_API_IP:6385
(3)配置本地数据库,Ironic-conductor应该和ironic-api使用相同配置。替换IRONIC_DBPASSWORD为ironic用户的自定义密码,DB_IP替换为本地数据库服务的地址。
[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
(4)配置ironic-api服务使用RabbitMQ消息代理,使用如下配置,Ironic-conductor应该和ironic-api使用相同配置,替换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/
(5)配置ironic-conductor服务使其可以和镜像服务通信,替换GLANCE_IP为镜像服务的hostname或IP地址。
注意:
swift后台的镜像服务必须安装和配置agent_*驱动,Ceph对象网关也支持作为镜像的后台服务。
[glance]

# Default glance hostname or IP address. (string value)
glance_host = GLANCE_IP
(6)替换NEUTRON_IP,设置网络服务连接的URL,作为网络服务的endpoint。
(Endpoint:一个可以通过网络来访问和定位某个Openstack service的地址,通常是一个URL。比如,当Nova需要访问Glance服务去获取image 时,Nova通过访问Keystone拿到Glance的endpoint,然后通过访问该endpoint去获取Glance服务。)
[neutron]

# URL for connecting to neutron. (string value)
url = http://NEUTRON_IP:9696

(7)配置访问其他OpenStack服务的认证信息。
为了和其他OpenStack服务连通,裸金属服务需要在向其它服务发送请求时,先使用服务用户通过openstack认证服务的验证。这些用户的认证需在配置文件中相关服务的位置进行配置。

  • [neutron] - 用于访问OpenStack网络服务
  • [glance] - 用于访问OpenStack镜像服务
  • [swift] - 用于访问OpenStack对象存储服务
  • [inspector] - 用于访问OpenStack自检服务
  • [service_catalog] - 在OpenStack认证服务目录中注册裸金属服务的一个特殊持有凭证,用于发现ironic API的URL endpoint .

(8)通过设置启用的驱动程序配置选项,可以在ironic服务的配置文件中启用驱动程序。
[DEFAULT]
enabled_drivers  =  pxe_ipmitool,pxe_ilo,pxe_drac
(9)重启ironic-conductor服务
Fedora/RHEL7/CentOS7/SUSE:
  sudo systemctl restart openstack-ironic-conductor

三, OpenStack服务集成

(一)配置裸金属认证服务

1,创建裸金属服务用户(例如ironic)。服务使用这个来对身份进行验证。使用service租户并给此用户提供admin角色

$ openstack user create --password IRONIC_PASSWORD  \
    --email ironic@example.com ironic
$ openstack role add --project service --user ironic admin
2,必须使用Identity service注册裸金属服务,以便其它OpenStack服务能够访问它
$ openstack service create --name ironic --description  \
     "Ironic baremetal provisioning service" baremetal
3,使用注册(第2步)服务时使用的认证服务返回的id属性,来创建endpoint端点,并把以下IRONIC_NODE替换为裸金属服务API节点所在的IP
$ openstack endpoint create --region RegionOne  \
    baremetal admin http:// $IRONIC_NODE:6385
$ openstack endpoint create --region RegionOne  \
    baremetal public http:// $IRONIC_NODE:6385
$ openstack endpoint create --region RegionOne  \
    baremetal internal http:// $IRONIC_NODE:6385
4,通过使用OpenStack身份认证服务创建角色,可以指派你的用户拥有与裸金属服务相关的有限特权,在默认情况下,裸金属服务除了默认的管理角色外,还期望出现“baremetal_admin”和“baremetal_observer”角色。如果您选择不创建这些角色,也不会产生负面影响。可以使用以下命令创建它们
$ openstack role create baremetal_admin
$ openstack role create baremetal_observer
如果您选择自定义裸金属服务使用的角色名称,那么通过更改/etc/ironic/policy.json中的“is_member”, “is_observer”, 和“is_admin”策略来实现。
关于在OpenStack部署中管理用户和角色的更完整的文档超出了本文的范围,但是可以在这里找到 here  .

5,可以通过创建一个单独的baremetal项目来进一步限制对裸金属服务的访问,从而使裸金属资源(节点、端口等)只能被该项目的成员访问。
$ openstack project create baremetal
在这一点上,您可以对裸金属服务API授予只读访问权,而不允许通过发出以下命令来授予任何其他访问权限
$ openstack user create  \
    --domain default --project-domain default --project baremetal  \
    --password PASSWORD USERNAME
$ openstack role add  \
    --user-domain default --project-domain default --project baremetal  \
    --user USERNAME baremetal_observer
6,对于openstack命令行客户端和身份服务,还有其他文档可用。policy.json.sample文件列举了服务的默认策略,为您提供了使用裸金属服务的便利。

(二)配置裸金属计算服务

1, 计算服务需要配置为使用裸金属服务的驱动程序。计算服务的配置文件通常位于 /etc/nova/nova.conf
注意:
和Newton版本一样,也可以有多个nova-compute服务运行ironic作为nova底层驱动,以提供冗余。裸金属节点通过散列环映射到服务。如果服务挂掉,可用的裸金属节点将重新映射到不同的服务。一旦节点服务又激活,节点就会被映射到同样的nova-compute直到它down掉。节点无法通过计算API进行管理,除非服务状态返回到active状态。
【Mitaka版本只支持一个compute,生产环境中运行有一定风险】
[default]

# Defines which driver to use for controlling virtualization.
# Enable the ironic virt driver for this compute instance.
compute_driver = ironic.IronicDriver

# Firewall driver to use with nova-network service.
# Ironic supports only neutron, so set this to noop.
firewall_driver = nova.virt.firewall.NoopFirewallDriver

# Amount of memory in MB to reserve for the host so that it is always
# available to host processes.
# It is impossible to reserve any memory on bare metal nodes, so set
# this to zero.
reserved_host_memory_mb = 0

[filter_scheduler]

# Enables querying of individual hosts for instance information.
# Not possible for bare metal nodes, so set it to False.
track_instance_changes = False

[scheduler]

# This value controls how often (in seconds) the scheduler should
# attempt to discover new hosts that have been added to cells.
# If negative (the default), no automatic discovery will occur.
# As each bare metal node is represented by a separate host, it has
# to be discovered before the Compute service can deploy on it.
# The value here has to be carefully chosen based on a compromise
# between the enrollment speed and the load on the Compute scheduler.
# The recommended value of 2 minutes matches how often the Compute # service polls the Bare Metal service for node information.
discover_hosts_in_cells_interval = 120
2,如果还没有切换到基于资源类的调度   Scheduling based on resource classes  ,那么应该设置以下选项。在切换到资源类之后,必须将它们从配置文件中删除。
[scheduler]

# Use the ironic scheduler host manager. This host manager will consume # all CPUs, disk space, and RAM from a host as bare metal hosts, can not # be subdivided into multiple instances. Scheduling based on resource # classes does not use CPU/disk/RAM, so the default host manager can be # used in such cases.
host_manager = ironic_host_manager

[filter_scheduler]

# Size of subset of best hosts selected by scheduler. # New instances will be scheduled on a host chosen randomly from a # subset of the 999 hosts. The big value is used to avoid race # conditions, when several instances are scheduled on the same bare # metal nodes. This is not a problem when resource classes are used.
host_subset_size = 999

# This flag enables a different set of scheduler filters, which is more # suitable for bare metals. CPU, disk and memory filters are replaced # with their exact counterparts, to make sure only nodes strictly # matching the flavor are picked. These filters do not work with # scheduling based on resource classes only.
use_baremetal_filters = True
3,仔细考虑以下选项
【此参数是连续构建服务禁用的阈值,默认是禁用的,如果设置为非0,nova-compute服务将会被禁用,用于防止在连续构建失败后,调度器不断向失败的服务发送构建请求,总之,谨慎使用】

[compute]

# This option will cause nova-compute to set itself to a disabled state # if a certain number of consecutive build failures occur. This will # prevent the scheduler from continuing to send builds to a compute # service that is consistently failing. In the case of bare metal # provisioning, however, a compute service is rarely the cause of build # failures. Furthermore, bare metal nodes, managed by a disabled # compute service, will be remapped to a different one. That may cause # the second compute service to also be disabled, and so on, until no # compute services are active. # If this is not the desired behavior, consider increasing this value or # setting it to 0 to disable this behavior completely.
#consecutive_build_service_disable_threshold = 10
4,在配置选项的ironic部分中更改以下内容。替换:
  • IRONIC_PASSWORD 在认证服务中ironic用户的密码
  • IRONIC_NODE ironic-api所在节点的主机名或IP地址
  • IDENTITY_IP 认证服务器的IP
[ironic]

# Ironic authentication type
auth_type = password

# Keystone API endpoint
auth_url = http://IDENTITY_IP:35357/v3

# Ironic keystone project name
project_name = service

# Ironic keystone admin name
username = ironic

# Ironic keystone admin password
password = IRONIC_PASSWORD

# Ironic keystone project domain
# or set project_domain_id
project_domain_name = Default

# Ironic keystone user domain
# or set user_domain_id
user_domain_name = Default
5,在计算服务的控制器节点上,重启nova-scheduler服务
Fedora/RHEL7/CentOS7/SUSE:
  sudo systemctl restart openstack-nova-scheduler
6,在计算服务的计算节点,重启nova-compute服务
Fedora/RHEL7/CentOS7/SUSE:
  sudo systemctl restart openstack-nova-compute

(三)配置裸金属网络服务

需要配置网络,这样裸金属服务就可以与网络服务通信,用于DHCP、PXE启动和其它需求。本节将介绍为裸金属供应配置单个扁平网络的网络。还需要为裸金属服务提供每个节点的mac地址;裸金属服务依次将此信息传递给DHCP和PXE启动配置的网络服务。
Enrollment 章节 部分有一个例子。
1,编辑修改 /etc/neutron/plugins/ml2/ml2_conf.ini 
[ml2]
type_drivers  =  flat
tenant_network_types  =  flat
mechanism_drivers  =  openvswitch

[ml2_type_flat] f
lat_networks  =  physnet1

[securitygroup]
firewall_driver  =  neutron.agent.linux.iptables_firewall.OVSHybridIptablesFirewallDriver
enable_security_group  =  True

[ovs]
bridge_mappings  =  physnet1:br-eth2
# Replace eth2 with the interface on the neutron node which you
# are using to connect to the bare metal server

2,如果neutron-openvswitch-agent服务把ovs_neutron_plugin.ini作配置文件运行,编辑ovs_neutron_plugin.ini,像上一步一样,通过在[ovs]部分添加桥接映射配置,然后重启neutron-openvswitch-agent服务。

3,在openvswitch中添加集成网桥br-int
$ ovs-vsctl add-br br-int
4,创建br-eth2网络桥,使用eth2来处理OpenStack服务(和裸金属服务)和裸金属物理服务器节点之间的通信。将eth2替换为连接到裸金属服务的网络节点上的接口:
$ ovs-vsctl add-br br-eth2
$ ovs-vsctl add-port br-eth2 eth2
5,重启Open vSwitch代理
# service neutron-plugin-openvswitch-agent restart
6,在重新启动网络服务Open vSwitch代理时,将自动创建桥br-int和br-eth2之间的veth对。
您的打开的Open vSwitch桥应该如下:
$ ovs-vsctl show

    Bridge br-int
       fail_mode: secure
       Port "int-br-eth2"
           Interface "int-br-eth2"
               type: patch
               options: {peer="phy-br-eth2"}
       Port br-int
           Interface br-int
               type: internal
   Bridge "br-eth2"
       Port "phy-br-eth2"
           Interface "phy-br-eth2"
               type: patch
               options: {peer="int-br-eth2"}
       Port "eth2"
           Interface "eth2"
       Port "br-eth2"
           Interface "br-eth2"
               type: internal
   ovs_version: "2.3.0"
7,创建用于启动实例的flat网络
$ neutron net-create --tenant-id  $TENANT_ID sharednet1 --shared  \
      --provider:network_type flat --provider:physical_network physnet1
8,在新创建的网络上创建子网
$ 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

(四)配置裸金属镜像临时URLs

  一些Baremetal服务的驱动程序(特别是,任何agent_*的驱动程序,任何使用直接部署接口的新型驱动程序,以及一些虚拟介质驱动程序)都要求目标用户镜像可以通过不涉及身份验证的clean HTTP(S) URL获得(没有用户名/密码,没有token)。
当使用在OpenStack中集成的Baremetal服务时,可以通过镜像服务和对象存储服务的特定配置实现,如下所述。
1,将镜像服务配置为将对象存储,作为存储镜像的后端。有关更多细节,请参考镜像服务配置指南。
注意:
当在对象存储服务中使用Ceph+RadosGW时,存储在镜像服务中的镜像,也必须在对象存储服务上可用 。

2,在对象存储服务中,为镜像存储开启TempURLs用于镜像服务
a.检查 TempURLs 是否启用
# executed under credentials of the user used by Image service # to access Object Storage service
$ openstack object store account show
+------------+---------------------------------------+
| Field      | Value                                  |
+------------+---------------------------------------+
| Account    | AUTH_bc39f1d9dcf9486899088007789ae643  | | Bytes      |  536661727                              | | Containers  |  1                                      | | Objects    |  19                                    | | properties  | Temp-Url-Key = 'secret'                  |
+------------+---------------------------------------+
b.如果 Temp-Url-Key 启用,观察它的值
c.如果 Temp-Url-Key 没有启用,需要手动配置(下面例子中使用了secret)
$ openstack object store account  set --property Temp-Url-Key =secret
3,配置ironic-conductor服务。配置文件通常位于/etc/ironic/ironic.conf。一些必需的值可以在openstack object store account show命令的响应中获得;其它必须匹配配置文件中配置的镜像和对象存储服务。
以下是当对象存储服务由swift提供时的最小配置的例子,下面是一个最简单的配置例,用来指定对的(可以在etc/ironic/ironic.conf.sample配置文件中查看完整可用的配置及其详细描述):
[glance]

temp_url_endpoint_type  =  swift
swift_endpoint_url  =  http://openstack/swift
swift_account  =  AUTH_bc39f1d9dcf9486899088007789ae643
swift_container  =  glance
swift_temp_url_key  =  secret
4,重启ironic-conductor服务

(五)启用HTTPS

1,在Swift中启用HTTPs
  使用虚拟媒介的驱动程序,使用swift来存储boot引导镜像和节点配置信息(包含Ironic conductor预提供裸金属硬件的敏感信息)。默认情况下,HTTPS不能在swift中启用。HTTPS被要求加密swift、Ironic conductor、swift、裸金属之间的所有通信(通过虚拟媒体)。它可以通过以下一种方式启用:
  • 使用SSL终端代理。
  • 在swift中使用本地SSL支持(仅用于swift的测试目的)
2,在镜像服务中启用HTTPS
在节点供应期间,Ironic驱动经常会使用镜像服务。默认情况下,镜像服务不使用HTTPS,但是当需要安全通信时,它是必需的。可以通过更改/etc/glance/glance-api.conf来启用它。

配置SSL支持

cert_file=PATH

Path to the certificate file the server should use when binding to an SSL-wrapped socket.

Optional. Default: not enabled.

key_file=PATH

Path to the private key file the server should use when binding to an SSL-wrapped socket.

Optional. Default: not enabled.

ca_file=PATH

Path to the CA certificate file the server should use to validate client certificates provided during an SSL handshake. This is ignored if cert_file and ‘’key_file`` are not set.

Optional. Default: not enabled.

(2)重启glance-api服务:
Fedora / RHEL7 / CentOS7 / SUSE :
     sudo  systemctl  restart  openstack - glance - api
3,在镜像服务和对象存储之间开启HTTPs连接

本节描述了在使用对象存储作为后端时,在镜像服务和对象存储之间启用安全HTTPS通信所需的步骤。
为了在镜像服务和对象存储之间启用安全的HTTPS通信,请遵循以下步骤:

4,在镜像服务和裸金属之间开启HTTPs连接
本节描述在镜像服务和裸金属服务之间启用安全HTTPS通信所需的步骤。
为了在裸金属服务和镜像服务之间启用安全的HTTPS通信,需要遵循以下步骤:

(1)编辑 /etc/ironic/ironic.conf
[ glance ] ...
glance_cafile =/ path / to / certfile
glance_protocol = https
glance_api_insecure = False
注意:
“glance cafile”是验证CA证书的可选路径,用来验证由镜像服务提供的SSL证书。

(2)重启 ironic-conductor服务
Fedora / RHEL7 / CentOS7 / SUSE :
     sudo  systemctl  restart  openstack - ironic - conductor

(六)配置裸金属清理操作

如果你将裸金属服务配置为自动清理(默认情况下是启用的),将需要设置清理网络的配置选项。
1,注意在配置网络服务时所创建的网络UUID(id字段),用于裸金属供应,或者也可以再创建一个用于清理的网络。
$ neutron net-list
2, 在裸金属服务配置文件 /etc/ironic/ironic.conf中,通过 cleaning_network选项配置清理网络的UUID,把 NETWORK_UUID替换为上一步指定的网络uuid
[neutron] cleaning_network  =  NETWORK_UUID
3,重启 ironic-conductor
Fedora/RHEL7/CentOS7/SUSE:
  sudo systemctl restart openstack-ironic-conductor

ironic节点清理功能扩展:

(七)配置租户网络


下面是 在多租户环境中 设置裸金属服务,以 实现节点供应 的示例流程(使用上面所述的neutron网络接口)

1, 通过在配置文件的[default]分段下,添加enabled_network_interfaces配置选项,可实现ironic-conductor服务的网络接口使能
[ DEFAULT ]
...
enabled_network_interfaces = noop , flat , neutron
请记住,在理想情况下,所有的ironic-conductors都应该具有相同的使能网络接口列表,但在ironic-conductor升级时可能不是这样。如果ironic-conductors其中的一个挂掉了,那么一些被接管的节点能会被被映射到一个不支持节点网络接口的ironic-conductor,这就可能会导致一些问题。任何涉及调用该节点的驱动程序的操作都将失败,除非该网络接口被安装并启用了这个ironic-conductor。

2,建议在配置文件的[default]分段中,通过默认的default_network_interface配置选项,设置默认的网络接口。
[ DEFAULT ]
...
default_network_interface = neutron
这个默认值将用于所有没有在创建请求中显式指定的网络接口的节点。

如果这个配置选项没有设置,默认的网络接口是通过查看[dhcp]dhcp_provider中配置项的值,
如果是配置的neutron,那么flat网络变为默认值;否则noop为默认值。

3,在网络服务中定义一个provider网络,我们将其称为“provisioning”网络,并将其添加到ironic-conductor配置文件的[neutron]分段中。使用neutron网络接口,需要使用网络服务中的网络有效标识符(UUID或名称)设置provisioning_network和cleaning_network配置选项。如果没有正确设置这些选项,cleaning或provisioning将无法启动。
[neutron]
...
cleaning_network=$CLEAN_UUID_OR_NAME
provisioning_network=$PROVISION_UUID_OR_NAME
关于更详细的节点清理操作,可以参考: Configure the Bare Metal service for cleaning

警告
请确保裸金属服务具有对provisioning和cleaning网络的专有访问权。如果非管理员用户使用这些网络生成实例,并访问裸金属服务控制平台是有安全风险的。出于这个原因,provisioning和cleaning网络应该在admin租户中配置为非共享网络。

注意
  在provisioning网络上生成一个裸金属实例是不可能的,部署将会失败。应该将节点部署到与provisioning网络不同的网络上。当你从计算服务中启动一个裸金属实例时,应该为实例的网络服务中选择一个不同的网络。

“provisioning”和“cleaning”网络可能是相同的网络或不同的网络。为了确保裸金属服务和部署ramdisk之间的通信,重要的是确保安全组在这些网络中被禁用,或者默认允许安全组如下:
  • DHCP
  • TFTP
  • 用于裸金属服务的出端口egress port(默认6385)
  • 用于ironic-python-agent入端口ingress port (默认9999)
  • 如果使用iSCSI部署方法(pxe_* 和 iscsi_*驱动), 入端口ingress port使用iSCSI (默认3260)
  • 如果使用直接部署方法  (agent_* 驱动), 出端口egress port使用对象存储服务(通常是80或443)
  • 如果使用iPXE, 出端口egress port使用运行在ironic-conductor节点上的HTTP服务(通常是80).

4,这一步是可选的,并且只有当你想在节点provisioning和/或cleaning时使用安全组时才适用。
如果没有指定,则使用缺省安全组。
a, 在网络服务中定义安全组,用于provisioning和/或cleaning网络。
b, 在ironic-conductor的配置文件的[neutron]分段中,添加这些安全组的UUIDs列表,如下所示:
[neutron]
...
cleaning_network=$CLEAN_UUID_OR_NAME
cleaning_network_security_groups=[$LIST_OF_CLEAN_SECURITY_GROUPS]
provisioning_network=$PROVISION_UUID_OR_NAME
provisioning_network_security_groups=[$LIST_OF_PROVISION_SECURITY_GROUPS]
多个安全组可以应用于给定的网络,因此,它们被指定为一个列表。同一个的安全组可以同时用于provisioning和cleaning网络 .

警告
如果安全组按照上面的描述配置,则不要为网络或端口的相应网络服务设置“port_security_enabled”标志为false。这将导致部署失败。例如:如果使用provisioning_network_security_groups配置选项,则确保“port_security_enabled”启用标志被设置为True。默认情况下,该标志将被设置为True;请确保不要通过手动将其设置为False来覆盖它。

5,安装和配置一个兼容的ML2机制驱动程序,来提供裸金属provisioning交换机的支持。
更多ML2详情查看:  ML2 plugin configuration manual

6,在以上修改之后,重启ironic-conductor和ironic-api服务
Fedora/RHEL7/CentOS7:
sudo  systemctl  restart  openstack - ironic - api
sudo  systemctl  restart  openstack - ironic - conductor

7,确保ironic-conductor通过provisioning网络可以从TFTP服务器上下载一个文件,从该网络中的某个非控制平台服务器上下载。
tftp $TFTP_IP -c get $FILENAME
FILENAME指的是位于TFTP server上的文件。

(八)向镜像服务中添加裸金属镜像

裸金属预配置需要两组镜像:部署镜像和用户镜像。部署镜像被裸金属服务使用,为通过裸金属服务实现OS的部署做准备。而用户镜像则是存放在裸金属服务上,供最终用户使用。下面是创建所需镜像并将其添加到镜像服务的步骤:

1,创建用户镜像

 disk-image-builder 可用于创建用户将要部署和运行的实际操作系统所需用户镜像。

(1)安装diskimage-builder包(如果不想全局安装,可以使用virtualenv)
# pip install diskimage-builder
(2)创建用户将要运行使用的镜像(以ubuntu为例)
  • Partition images

    $ disk-image-create ubuntu baremetal dhcp-all-interfaces grub2 -o my-image
    
  • Whole disk images

    $ disk-image-create ubuntu vm dhcp-all-interfaces -o my-image

分区镜像创建my-image.qcow2, my-image.vmlinuz和my-image.initrd三个文件, 只有当部署my-image.qcow2需要本地引导时,才需要在partition镜像的创建命令中指定grub2参数。
否则,my-image.vmlinuz和my-image.initrd将在部署完my-image.qcow2裸金属镜像之后,用于裸金属的PXE启动。

如果要使用Fedora镜像,把ubuntu替换为Fedora即可。

2,把用户镜像添加到镜像服务中
将下面步骤中创建的所有镜像加载到镜像服务中,在镜像服务中为每一个生成的镜像记录image uuid。
(1)把kernel和ramdisk镜像添加到镜像服务中

$ glance image-create --name my-kernel --visibility public  \
  --disk-format aki --container-format aki < my-image.vmlinuz
记录上一步骤中image uuid 为MY_VMLINUZ_UUID
$ glance image-create --name my-image.initrd --visibility public  \
  --disk-format ari --container-format ari < my-image.initrd
记录上一步骤中image uuid 为 MY_INITRD_UUID
(2) 把my-image添加到镜像服务中,这将是用户将要运行的操作系统。同时还需要将上面创建的镜像与这个OS镜像关联起来。这两个操作可以通过执行以下命令来完成
$ glance image-create --name my-image --visibility public  \
  --disk-format qcow2 --container-format bare --property  \
   kernel_id = $MY_VMLINUZ_UUID --property  \
   ramdisk_id = $MY_INITRD_UUID < my-image.qcow2
注意:
要部署whole磁盘镜像,kernel_id和ramdisk_id不应该与用户镜像相关联,例如:
$ glance image-create --name my-whole-disk-image --visibility public  \
  --disk-format qcow2  \
  --container-format bare < my-whole-disk-image.qcow2
3,创建和下载部署镜像
部署镜像用于在部署实际操作系统之前对服务器的初始化准备工作(例如:创建磁盘分区)。有几种方法可以构建或下载部署镜像。具体可查看:  Building or downloading a deploy ramdisk image 
如果要自定义部署镜像,可查看:Image Builders

4,把部署镜像添加到镜像服务中
 把coreos_production_pxe.vmlinuz and coreos_production_pxe_image-oem.cpio.gz添加到镜像服务中。
$ glance image-create --name deploy-vmlinuz --visibility public  \
  --disk-format aki --container-format aki < coreos_production_pxe.vmlinuz
$ glance image-create --name deploy-initrd --visibility public  \
  --disk-format ari --container-format ari < coreos_production_pxe_image-oem.cpio.gz

(九)为裸金属服务创建flavor


基于属性的调度Scheduling
需要在计算服务中创建一个特殊的裸金属规格,通过硬件规格将flavor映射到裸金属节点上。
1,指定硬件变量
$  RAM_MB = 1024 $  CPU = 2 $  DISK_GB = 100 $  ARCH ={i686 |x86_64 }
2,使用命令行创建裸金属规格
$ nova flavor-create my-baremetal-flavor auto  $RAM_MB  $DISK_GB  $CPU
可以把auto替换为自定义flavor uuid。
3,设置flavor属性额外自定义的指定信息
$ nova flavor-key my-baremetal-flavor  set  cpu_arch = $ARCH

四, 创建/下载部署ramdisk镜像

  ironic依赖于带有ironic-python-agent运行的镜像,用于控制和部署裸金属节点。
您可以使用  CoreOS tools ,在以下地址下载与此构建的部署ramdisk的预构建版本

从源代码构建
有两种已知的方法来创建使用IPA服务的部署镜像。
1,CoreOS tools
2,disk-image-builder
(1)根据  diskimage-builder installation documentation文档,安装diskimage-builder
(2)创建镜像
disk - image - create  ironic - agent  fedora  - o  ironic - deploy
以上命令会在当前目录创建名字为ironic-deploy.vmlinuz和ironic-deploy.initramfs的部署镜像ramdisk和kernel。

3,通过虚拟介质创建一个可以引导的iso镜像
disk - image - create  ironic - agent  fedora  iso  - o  ironic - deploy
以上命令会在当前目录创建名字为ironic-deploy.iso的部署ISO。



参考:

https://docs.openstack.org/ironic/pike/install/index.html


Logo

更多推荐