Multi-tenancy 是openstack ironic从Ocata版本开始支持的新特性,经过network-generic-switch插件控制交换机,Ironic能够实如今不一样租户间机网络隔离,而且可使得物理机和虚拟机工做在同一个二层中。本文记录了在基于kolla 的OpenStack Ocata版本上,如何配置相关服务,启用multi-tenancy功能。阅读本文须要有必定ironic基础。html
网络拓扑图以下:node
### 1. 网络设置
将网线按照拓扑图接好,并配置好被部署机器的IPMI信息,cisco交换机对应的管理口ip,打开交换机的ssh权限。建立出要使用的vlan。配置GE5为trunk 模式:
```
[root@kolla-aio ~]# telnet 10.200.43.200
Trying 10.200.43.200...
Connected to 10.200.43.200.
Escape character is '^]'.
User Name:cisco
Password:**********python
switch797d1f#configure
switch797d1f(config-if)#vlan 2-1024
switch797d1f(config)#interface GE 3
switch797d1f(config-if)#switchport mode trunk
switch797d1f(config-if)#switchport trunk allowed vlan add all
switch797d1f(config-if)#do show interfaces switchport GE 3
Port : gi3
Port Mode: Trunk
Gvrp Status: disabled
Ingress Filtering: true
Acceptable Frame Type: admitAll
Ingress UnTagged VLAN ( NATIVE ): 1ios
### 2. 主机调整 关闭主机防火墙 : systemctl stop iptables.service systemctl disable iptables.service 关闭主机iscsi服务: systemctl stop iscsid.socket systemctl stop iscsid systemctl disable iscsid.socket systemctl disable iscsid ### 2. 配置neutron 咱们使用kolla-aio eth0的10.200.43.196做为管理ip,全部的openstack服务都监听这个地址。裸机在部署过程当中,要经过访问10.200.43.196的地址 call-back到控制节点上,因此部署网络要和10.200.43.196打通。因为本人不熟悉该交换机的配置,这里选择使用openstack的虚拟路由器功能,打通网络。咱们须要在neutron额外配置一个flat网络,链接到kolla-aio的eth0上。 修改 /etc/kolla/neutron-server/ml2_conf.ini,和 /etc/kolla/neutron-openvswitch-agent/ml2_conf.ini 配置虚拟机使用的网桥是br-data,配置flat网络使用的网桥是br-ex。
[ml2_type_vlan]
network_vlan_ranges = defaultgit
[ml2_type_flat]
flat_networks = externalgithub
[ovs]
bridge_mappings = default:br-data,external:br-exdocker
在openvswitch容器中,要保证eth0在br-data网桥中,eth1在br-ex网桥中:
ovs-vsctl add-port br-data eth1vim
ovs-vsctl add-port br-ex eth0
ifconfig eth0 0.0.0.0
ifconfig br-ex 10.200.43.196/24 upcentos
### 3. 建立相关网络和路由 咱们选择vlan102做为部署网络,须要建立虚拟路由和相关网络,打通部署网络和管理网,步骤以下: 1. 在horizon上,分别建立vlan id为100,101,102的网络,子网信息能够随意分配,只要避免ip冲突就好。此例中咱们为vlan102建立了子网192.168.102.0/24 2. 建立一个flat网络,禁用网关,分配数个和kolla-aio同网段的ip,数量等于1+你想同时支持部署的裸机数量,在此例中,分配的ip是 10.200.43.197和10.200.43.198 3. 建立router,不设置网关 4. 在router中添加到vlan102网络的接口,接口ip不输入 5. 5在router中添加到flat网络的接口,接口ip输入一个咱们分配的ip,此例中输入了10.200.43.197 6. 在控制器上添加一条路由router add -net 192.168.102.0/24 gw 10.200.43.197 ### 4. 配置ironic 配置ironic,enable multi-tenancy,要修改的内容以下:
[DEFAULT]
enabled_drivers = pxe_ipmitool,pxe_ilo
enabled_network_interfaces=noop,flat,neutronbash
[neutron]
url = http://10.200.43.196:9696
cleaning_network = vlan102
provisioning_network = vlan102
[pxe]
pxe_append_params = nofb nomodeset vga=normal console=tty0 console=ttyS0,115200n8
tftp_server=10.200.43.196
tftp_root=/tftpboot
```
配置完成后须要重启ironic-conductor服务
O版本networking-generic-switch插件不支持此例中使用的cisco300交换机,须要backport最新的代码来支持。
docker exec -u 0 -it neutron_server bash cd /var/lib/kolla/venv/lib/python2.7/site-packages/networking_generic_switch/devices/netmiko_devices curl -o cisco300.py https://raw.githubusercontent.com/openstack/networking-generic-switch/master/networking_generic_switch/devices/netmiko_devices/cisco300.py vim /var/lib/kolla/venv/lib/python2.7/site-packages/networking_generic_switch-0.2.1.dev9-py2.7.egg-info/entry_points.txt 在generic_switch.devices 段 插入: netmiko_cisco_s300 = networking_generic_switch.devices.netmiko_devices.cisco300:Cisco300
配置 /etc/kolla/neutron-server/ml2_conf.ini,添加交换机的信息,此例中的交换机信息是:
型号: cisco 300系列
主机名:switch797d1f
ip: 10.200.43.200
用户名:cisco
密码: ***
对应的配置文件内容是:
[genericswitch:switch797d1f] device_type = netmiko_cisco_s300 username = cisco password = *** ip = 10.200.43.200
重启neutron_server使得咱们的配置生效。
### 7.建立ironic node
建立支持multi-tenancy功能的ironic node,和建立普通node几乎没有区别,惟一的区别是,须要指定网卡参数 --network-interface neutron,示例以下:
``#建立部署镜像 glance image-create --name deploy-vmlinuz --visibility public --disk-format aki --container-format aki < ironic-agent.kernel glance image-create --name deploy-initrd --visibility public --disk-format ari --container-format ari < ironic-agent.initramfs DEPLOY_VMLINUZ_UUID=
glance image-list |grep deploy-vmlinuz|awk '{print $2}'DEPLOY_INITRD_UUID=
glance image-list |grep deploy-initrd|awk '{print $2}'`
#建立node
ironic node-create -d pxe_ipmitool -n 197test --network-interface neutron
NODE_UUID=ironic node-list|grep 197test|awk '{print $2}'
USER=admin
PASS=***2014
ADDRESS=10.200.43.197
ironic node-update $NODE_UUID add driver_info/ipmi_username=$USER driver_info/ipmi_password=$PASS driver_info/ipmi_address=$ADDRESS
CPU=4
RAM_MB=8192
DISK_GB=80
ARCH=x86_64
ironic node-update $NODE_UUID add properties/cpus=$CPU properties/memory_mb=$RAM_MB properties/local_gb=$DISK_GB properties/cpu_arch=$ARCH
```
### 8.建立ironic port
建立multi-tenancy功能的port和建立普通ironic port差别较大,须要额外提供此网卡所接入的交换机的端口信息,包括:交换机主机名,交换机mac地址,经过网线接入的交换机接口名。
因为默认ironic client的使用的API版本比较旧,不支持建立含有交换机信息的得port,因此还须要先设置API版本,示例以下:
```
export IRONIC_API_VERSION=1.20
#r720 网口2 mac地址
HW_MAC_ADDRESS=b8:2a:72:ce:10:c6
#网口2接入的交换机信息
SWITCH_MAC_ADDRESS=00:af:1f:79:7d:1f
SWITCH_HOSTNAME=switch797d1f
SWITCH_PORT=GE7
ironic port-create -a $HW_MAC_ADDRESS -n $NODE_UUID -l switch_id=$SWITCH_MAC_ADDRESS -l switch_info=$SWITCH_HOSTNAME -l port_id=$SWITCH_PORT --pxe-enabled true --physical-network physnet1
ironic port-show $PORT_UUID
```
### 9.建立裸机对应的flavor
首先要建立与裸机对应的flavor,并添加元数据,示例以下:
nova flavor-create my-baremetal-flavor auto $RAM_MB $DISK_GB $CPU nova flavor-key my-baremetal-flavor set hypervisor_type=ironic
使用上文建立的flavor和一个非部署网络(vlan102)的vlan网络,建立实例,示例以下:
nova boot --image centos --flavor 13bd7f12-27b6-4d6e-ae1b-393e63124595 --nic net-id=4745aadc-c201-4409-b4b8-0e8dae346d5e test
测试发现,10.200.43.196环境,当开启主机iptables的时候,即便是同一个宿主机上同一个网络内的两台虚拟机,也不能相互通讯,这是不正常的,原理未知。
配置uefi成功后,发现经过tftp拿不到镜像,缘由是:我使用虚拟路由器打通flat网络和vlan网络时,将10.200.43.197设置成路由器的网关,这样从部署网络访问tftp服务时须要通过nat, tftp是局域网协议,不能经过nat访问。清除网关,将10.200.43.197做为接口加入路由器后,tftp能正常访问。(2018.07.26更新,以前的记录不够准确,tftp是否支持nat取决于路由器的设置,当咱们不设置网关,而是经过添加接口到路由器中的方式来打通部署网络和管理网络,这种状况是不走nat的,因此没问题。当tftp经过nat访问的时候,由于tftp使用的是udp协议,这会出现一些问题,tftpclient向tftpserver的69端口发送请求,可是tftp server会随便选择一个本身的端口好比4362来向客户端创建链接发送回应,可是不少路由器/防火墙会丢弃这个回应,由于没有人请求tftpsever的4362端口,因此tftp链接没法创建成功。tftp跨网段拿不到镜像,还多是tftp客户端的实现问题,tftp是刻在rom里面的,有的tftp实现不支持跨网段的tftp下载,好比这个bug,另外细节能够参考阅读tftp和rfc1350)
拿到镜像后,uefi进入系统部署流程,部署失败,HP机器的默认license只能在系统引导界面使用remote console,没法调试。
改用dell机器测试,dell机器 网口1只支持uefi启动,部署过程当中出现,LBR not supported错误,查看bios发现,dell r720上的网卡,网口1只支持从uefi启动,网口2只支持从pxe启动。将网线改插入eth2,更改dell机器bios设置,令机器从bios启动,pxe拿到镜像。
部署过程当中ironic报告:没法链接到iscsi服务,发现是由于宿主机上启动了iscsi服务,kolla的容器没有启动iscsi服务,致使iscsi容易不能正常工做,关闭宿主机iscsi服务,从新部署,部署成功
进入部署成功的虚拟机,发现网络不通,缘由是咱们使用的镜像只有eth0网卡的配置文件,咱们为了让虚拟机从pxe启动,把网线插到了网口2上,因此网络不通,手动更改网络后没问题。