6.2. 使用情景 2:使用 CLI 创建一个基本的 Overcloud
这个使用情景会创建一个小型的、企业级 OpenStack Platform 环境。它在 Overcloud 中包括两个节点:一个 Controller 节点和一个 Compute 节点。这两个机器都是使用 IPMI 进行电源管理的裸机系统。这个使用情景侧重于展示 director 通过使用命令行工具创建一个小型的、可以在今后对 Compute 节点进行扩展的生产级别 Red Hat Enterprise Linux OpenStack Platform 环境。
流程
- 在 director 中创建一个节点定义模板并注册空白节点。
- 检查所有节点的硬件。
- 手工为节点添加标签(tag)来标记为角色。
- 创建 flavor 并通过添加标签把它们标记为角色。
- 创建 Heat 模板来分离 External 网络。
- 使用 director 的默认计划和额外的网络分离模板创建 Overcloud 环境。
配置要求
- 第 3 章 安装 Undercloud 中创建的 director 节点
- 两个裸机。这些系统需要满足 Controller 节点和 Compute 节点对配置的要求。请参阅以下内容:因为 director 会把 Red Hat Enterprise Linux 7 镜像复制到每个节点,因此这些节点当前不需要操作系统。
- Provisioning 网络的一个网络连接(被配置为一个原生 VLAM)。所有节点必须都连接到这个网络,并需要满足 第 2.3 节 “网络要求” 中的要求。在这个示例中,我们使用 192.0.2.0/24 作为 Provisioning 子网,分配的 IP 地址信息如下:
表 6.2. Provisioning 网络 IP 分配信息
节点名IP 地址MAC 地址IPMI IP 地址director192.0.2.1aa:aa:aa:aa:aa:aaControllerDHCPbb:bb:bb:bb:bb:bb192.0.2.205ComputeDHCPcc:cc:cc:cc:cc:cc192.0.2.206 - 用来进行 External 网络连接的一个网络。所有节点必须连接到这个网络。在这个示例中,我们使用 10.1.1.0/24 作为 External 网络。
- 所有其它网络类型使用 Provisioning 网络作为 OpenStack 服务
6.2.1. 为基本 Overcloud 注册节点
在本节中,我们创建一个节点定义模板。这个文件(
instackenv.json
)是一个 JSON 格式的文件,它包括了环境中的两个节点的硬件信息和电源管理信息。例如:
{ "nodes":[ { "mac":[ "bb:bb:bb:bb:bb:bb" ], "cpu":"4", "memory":"6144", "disk":"40", "arch":"x86_64", "pm_type":"pxe_ipmitool", "pm_user":"admin", "pm_password":"p@55w0rd!", "pm_addr":"192.0.2.205" }, { "mac":[ "cc:cc:cc:cc:cc:cc" ], "cpu":"4", "memory":"6144", "disk":"40", "arch":"x86_64", "pm_type":"pxe_ipmitool", "pm_user":"admin", "pm_password":"p@55w0rd!", "pm_addr":"192.0.2.206" } ] }
这个模板使用以下属性
- mac
- 节点上的网络接口的 MAC 地址列表。只为每个系统的 Provisioning NIC 使用 MAC 地址。
- cpu
- 节点上的 CPU 数量。
- memory
- 内存大小(以 MB 为单位)。
- disk
- 硬盘的大小(以 GB 为单位)。
- arch
- 系统架构。
- pm_type
- 使用的电源管理驱动。在这个示例中使用 IPMI 驱动(
pxe_ipmitool
)。 - pm_user, pm_password
- IPMI 的用户名和密码。
- pm_addr
- IPMI 设备的 IP 地址。
注意
如需了解更多与所支持的电源管理类型和选项相关的信息,请参阅 附录 B, 电源管理驱动。
在创建完模板后,把这个文件保存到
stack
用户的家目录(/home/stack/instackenv.json
),然后把它导入到 director。使用以下命令:
$ openstack baremetal import --json ~/instackenv.json
这会导入模板,并把模板中的每个节点注册到 director。
为所有节点分配内核和 ramdisk 镜像:
$ openstack baremetal configure boot
现在,节点已在 director 中注册并被配置。使用以下命令可以在 CLI 中查看这些节点的列表:
$ openstack baremetal list
6.2.2. 检查节点硬件
注册节点后,需要检查每个节点的硬件属性。运行以下命令:
$ openstack baremetal introspection bulk start
重要
确保这个过程成功完成。它可能需要 15 分钟来检查这些裸机节点。
6.2.3. 手工为节点添加标签
在注册并检查完每个节点的硬件后,需要为它们添加标签(tag)来把它们标记为特定的档案。这些档案标签把节点匹配为 flavor,从而通过 flavor 分配实施角色。因为在基本的实施使用情景中只有两个节点,因此我们会手工为节点添加标签。如果环境中有大量的节点,可以使用在高级实施使用情景中介绍的自动健康检查(Automated Health Check,简称 AHC)工具。如需了解更多与 AHC 工具相关的信息,请参阅 第 6.3.3 节 “使用自动健康检查(Automated Health Check,简称 AHC)工具自动为节点加标签”。
为了通过添加标签把节点标记为特定的档案,把
profile
选项添加到每个节点的 properties/capabilities
参数中。例如,把环境中的两个节点分别标记为使用 controller 档案和 compute 档案,使用以下命令:
$ ironic node-update 58c3d07e-24f2-48a7-bbb6-6843f0e8ee13 add properties/capabilities='profile:compute,boot_option:local' $ ironic node-update 1a4e30da-b6dc-499d-ba87-0bd8a3819bc0 add properties/capabilities='profile:control,boot_option:local'
其中的
profile:compute
和 profile:control
选项会把节点标记为相关的档案。
这些命令同时也设置了
boot_option:local
参数,它定义了每个节点的引导模式。
6.2.4. 为基本使用情景创建 flavor
另外,director 还需要一组硬件档案(或称为 flavor)以供注册的节点使用。在这个使用情景中,我们会分别为 Compute 节点和 Controller 节点各创建一个档案。
$ openstack flavor create --id auto --ram 6144 --disk 40 --vcpus 4 control $ openstack flavor create --id auto --ram 6144 --disk 40 --vcpus 4 compute
这为您的节点创建了两个 flavor:
control
和 compute
。我们还为每个 flavor 设置了额外的属性。
$ openstack flavor set --property "cpu_arch"="x86_64" --property "capabilities:boot_option"="local" --property "capabilities:profile"="compute" compute $ openstack flavor set --property "cpu_arch"="x86_64" --property "capabilities:boot_option"="local" --property "capabilities:profile"="control" control
capabilities:boot_option
为 flavor 设置了引导模式,capabilities:profile
定义了要使用的档案。这会和在 第 6.2.3 节 “手工为节点添加标签” 中被添加了相同标签的相关节点进行连接。
6.2.5. 分离 External 网络
director 提供了配置分离 overcloud 网络的方法。这意味着,Overcloud 环境把不同类型的网络数据分离到不同的网络,从而可以把特定的网络数据分配给特定的网络接口或接口绑定。在配置完分离的网络后,director 会配置 OpenStack 服务来使用分离的网络。如果没有配置分离的网络,所有服务都会在 Provisioning 网络中运行。
这个使用情景使用两个分离的网络:
- 网络 1 - Provisioning 网络。Internal API、Storage、Storage Management 和 Tenant 网络也使用这个网络。
- 网络 2 - External 网络。这个网络使用一个专用的接口来连接 Overcloud 以外的环境。
以下小节介绍了如何创建 Heat 模板来把 External 网络和其它所有服务进行分离。
6.2.5.1. 创建自定义接口模板
Overcloud 网络配置需要一组网络接口模板。您可以对这些模板进行定制来基于角色对节点进行配置。这些模板是 YAML 格式的标准 Heat 模板(请参阅 第 5 章 了解 Heat 模板)。director 包括了一组模板实例以供参考:
/usr/share/openstack-tripleo-heat-templates/network/config/single-nic-vlans
- 这个目录中包括了基于角色的、带有 VLAN 配置的单独 NIC 的模板。/usr/share/openstack-tripleo-heat-templates/network/config/bond-with-vlans
- 这个目录中包括了基于角色的、绑定 NIC 配置的模板。
对于基本的 Overcloud 用户情景,我们使用默认的单独 NIC 示例配置。把默认的配置目录复制到
stack
用户的家目录,命名为 nic-configs
。
$ cp -r /usr/share/openstack-tripleo-heat-templates/network/config/single-nic-vlans ~/templates/nic-configs
这会创建一组本地的 Heat 模板,它们定义了 External 网络使用的一个单网络接口配置。每个模板都包括标准的
parameters
、resources
和 output
项。这里,我们只编辑 resources
项,每个 resources
以以下内容开始:
resources: OsNetConfigImpl: type: OS::Heat::StructuredConfig properties: group: os-apply-config config: os_net_config: network_config:
这会创建一个对
os-apply-config
命令和 os-net-config
子命令的请求来为一个节点配置网络属性。network_config
项中包括了自定义的接口配置,这些配置以类型的形式进行组织,它们包括:
- interface
- 定义一个单独网络接口。这个配置指定了每个接口需要使用实际的接口名("eth0"、"eth1"、"enp0s25")还是使用接口编号("nic1"、"nic2"、"nic3")。
- type: interface name: nic2
- vlan
- 定义一个 VLAN。使用从
parameters
项中传递来的 VLAN ID 和子网。- type: vlan vlan_id: {get_param: ExternalNetworkVlanID} addresses: - ip_netmask: {get_param: ExternalIpSubnet}
- ovs_bond
- 定义 Open vSwitch 中的绑定。一个绑定会把两个
interfaces
组合在一起来起到冗余和增加带宽的目的。- type: ovs_bond name: bond1 members: - type: interface name: nic2 - type: interface name: nic3
- ovs_bridge
- 在 Open vSwitch 中定义网桥。网桥把多个
interface
、bond
和vlan
对象连接在一起。- type: ovs_bridge name: {get_input: bridge_name} members: - type: ovs_bond name: bond1 members: - type: interface name: nic2 primary: true - type: interface name: nic3 - type: vlan device: bond1 vlan_id: {get_param: ExternalNetworkVlanID} addresses: - ip_netmask: {get_param: ExternalIpSubnet}
如需了解更详细的信息,请参阅 附录 D, 网络接口参数。
对于基本的使用情景,修改每个接口模板来把 External 网络移到
nic2
。这可以保证在每个节点上使用第二个网络接口作为 External 网络。例如,在 templates/nic-configs/controller.yaml
模板中:
network_config: - type: ovs_bridge name: {get_input: bridge_name} use_dhcp: true members: - type: interface name: nic1 # force the MAC address of the bridge to this interface primary: true - type: vlan vlan_id: {get_param: InternalApiNetworkVlanID} addresses: - ip_netmask: {get_param: InternalApiIpSubnet} - type: vlan vlan_id: {get_param: StorageNetworkVlanID} addresses: - ip_netmask: {get_param: StorageIpSubnet} - type: vlan vlan_id: {get_param: StorageMgmtNetworkVlanID} addresses: - ip_netmask: {get_param: StorageMgmtIpSubnet} - type: vlan vlan_id: {get_param: TenantNetworkVlanID} addresses: - ip_netmask: {get_param: TenantIpSubnet} - type: interface name: nic2 addresses: - ip_netmask: {get_param: ExternalIpSubnet} routes: - ip_netmask: 0.0.0.0/0 next_hop: {get_param: ExternalInterfaceDefaultRoute}
上面的实例创建了一个新接口(
nic2
),重新分配 External 网络地址,并路由到新的接口。
附录 E, 网络接口模板示例 中包括了更多网络接口模板示例。
请注意,许多参数使用了
get_param
功能。我们在一个针对于我们的网络所创建的一个环境文件中定义它们。
重要
禁用没有使用的接口来避免不必要的默认路由和网络回路。例如:
- type: interface name: nic1 use_dhcp: true
确定从所有网桥上删除了这些接口。
6.2.5.2. 创建一个基本 Overcloud 网络环境模板
网络环境文件描述了 Overcloud 的网络环境,并指向在前一节中提到的网络接口配置文件。我们在定义网络 IP 地址范围的同时还定义子网。我们需要根据本地环境对这些值进行定制。
这个使用情景使用以下网络环境文件(被保存为
/home/stack/templates/network-environment.yaml
):
resource_registry: OS::TripleO::BlockStorage::Net::SoftwareConfig: /home/stack/templates/nic-configs/cinder-storage.yaml OS::TripleO::Compute::Net::SoftwareConfig: /home/stack/templates/nic-configs/compute.yaml OS::TripleO::Controller::Net::SoftwareConfig: /home/stack/templates/nic-configs/controller.yaml OS::TripleO::ObjectStorage::Net::SoftwareConfig: /home/stack/templates/nic-configs/swift-storage.yaml OS::TripleO::CephStorage::Net::SoftwareConfig: /home/stack/templates/nic-configs/ceph-storage.yaml parameters: # Set to "br-ex" if using floating IPs on native VLAN on bridge br-ex Controller-1::NeutronExternalNetworkBridge: "''" parameter_defaults: ExternalNetCidr: 10.1.1.0/24 ExternalAllocationPools: [{'start': '10.1.1.2', 'end': '10.1.1.50'}] ExternalNetworkVlanID: 100 ExternalInterfaceDefaultRoute: 10.1.1.1
resource_registry
项包括了到每个节点角色的网络接口模板的连接。请注意,ExternalAllocationPools
参数只定义了一个小的 IP 地址范围。因此,我们可以在以后定义一个独立的浮动 IP 地址范围。
parameters
项为浮动 IP 地址定义了使用的网桥。如果浮动 IP 地址使用标记的 VLAN(tagged VLAN),把这个值设为一对单引号(这会使用默认值 br-int
)。在其它情况下,把它设置为默认的外部网桥值(通常是 br-ex
)。
重要
NeutronExternalNetworkBridge
参数需要 Controller-1::
前缀,并在创建一个基于计划的 Overcloud 时是 parameters
项的一般分。这是因为计划处理参数的方式。如果需要创建一个自定义的、基于 Heat 模板的 Overcloud(如高级 Overcloud 使用情景中提到的系统),这个参数只是 NeutronExternalNetworkBridge
,并被放置在 parameter_defaults
项中。如需了解这两者间的不同,请参阅 第 6.3.7.2 节 “创建一个高级的 Overcloud 网络环境模板”。
parameter_defaults
项包括了一组参数,它们被用来定义每个网络类型的网络选项。如需获得这些参数的详细信息,请参阅 附录 F, 网络环境选项。
在这个使用情景中只定义了 External 网络的选项。其它所有网络流量类型被自动分配到 Provisioning 网络。
重要
由于资源可用性的问题,在创建 Overcloud 后改变网络配置可能会出现配置问题。例如,一个用户在网络分离模板中修改了一个网络的子网范围,因为这个资源可能已在使用,重新配置操作会失败。
6.2.6. 创建基本的 Overcloud
创建 OpenStack 环境的最后一个阶段是运行相关的命令来创建它。默认的计划会安装一个 Controller 节点和一个 Compute 节点。
过程 6.7. 创建 Overcloud
- 运行以下命令来查看 Overcloud 计划:
$ openstack management plan list
这会显示计划以及它的 UUID。记录下 UUID 以供下一步使用。 - 运行以下命令开始基本 Overcloud 的创建。使用前一步获得的实际 UUID 值替换 [UUID]:
$ openstack overcloud deploy --plan "[UUID]" -e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml -e /home/stack/network-environment.yaml --control-flavor control --compute-flavor compute
这个命令包括以下的额外选项:--plan
- 指定创建 Overcloud 使用的计划。它的值是 Overcloud 计划的 UUID。-e /usr/share/openstack-tripleo-heat-templates/environments/network-isolation.yaml
--e
选项为 Overcloud 计划添加了一个额外的环境文件。在这里,它是一个初始化网络分离配置的环境文件。-e /home/stack/templates/network-environment.yaml
--e
选项为 Overcloud 计划添加了一个环境文件。在这里,它是在 第 6.2.5.2 节 “创建一个基本 Overcloud 网络环境模板” 中创建的网络环境文件。--control-flavor control
- 为 Controller 节点使用一个特定的 flavor。--compute-flavor compute
- 为 Compute 节点使用一个特定的 flavor。
注意
Overcloud 创建过程开始,director 会部署您的节点。这个过程需要一些时间完成。要查看 Overcloud 创建的状态,在另外一个终端窗口中以
stack
用户身份运行:
$ source ~/stackrc # Initializes the stack user to use the CLI commands $ heat stack-list --show-nested
heat stack-list --show-nested
命令会显示创建 Overcloud 的当前状态。
重要
请注意,这里使用了
-e
选项为 Overcloud 添加了环境文件。director 需要为 第 7 章 创建 Overcloud 后执行的任务 中的特定功能使用这些环境文件。
6.2.7. 访问基本的 Overcloud
director 产生一个文件来配置和验证 Overcloud 和 Undercloud 间的通讯。director 把这个文件保存为
stack
用户家目录的 overcloudrc
文件。运行以下命令来使用这个文件:
$ source ~/overcloudrc
这会加载从 director 主机的 CLI 访问 Overcloud 所需的环境变量。要返回 director 主机的原来的环境,运行以下命令:
$ source ~/stackrc
6.2.8. 完成基本的 Overcloud 创建
这包括创建基本的 Overcloud。如需了解更多创建后的功能,请参阅 第 7 章 创建 Overcloud 后执行的任务。