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上,因此網絡不通,手動更改網絡後沒問題。