Multi-tenancy 是openstack ironic從Ocata版本開始支持的新特性,經過network-generic-switch插件控制交換機,Ironic能夠實如今不一樣租戶間機網絡隔離,而且可使得物理機和虛擬機工做在同一個二層中。以前在O版本折騰過一次,也寫了對應的文檔,可是如今由於工做須要,在Pike版本從新作了一遍這份工做,發現可是當時理解的不是很深刻,走了很多彎路,另外p版本也引入了新的bug,因此從新寫了一份文檔,記錄了在 kolla 部署出來的pike版本openstack上,如何配置相關服務,啓用multi-tenancy功能。node
### 1. 網絡設置
ipmi和交換機默認已經配好,此步驟可忽略
配置好被部署機器的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 100-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 ): 1docker
### 2. 主機調整 自動部署已經作好,此步驟能夠忽略
關閉主機防火牆 :
systemctl stop iptables.service
systemctl disable iptables.serviceapi
關閉主機iscsi服務:服務器
systemctl stop iscsid.socket
systemctl stop iscsid
systemctl disable iscsid.socket
systemctl disable iscsid
```網絡
### 3. 建立相關網絡python2.7
1.建立部署網絡
物理機部署過程當中,須要訪問ironic api,因此部署網絡須要和管理網絡打通,咱們爲了方便,直接使用管理網絡做爲部署網絡,方法以下:
在交換機上接一根網線到管理網鏈接到管理網,而且配置vlan id爲102,在openstack建立一個網絡,vlan id爲102,將這個網絡做爲部署網絡。ssh
這種方案的優勢在於方便,缺點在於,部署網絡的流量會影響管理網的網絡質量,若是是大規模的生產環境,不建議這麼作,建議拆分管理網和部署網絡,配置交換機和或者虛擬路由打通管理網和部署網絡。
查看物理網絡名稱
[root@contrl01 ~]# grep network_vlan_ranges /etc/kolla/neutron-server/ml2_conf.ini network_vlan_ranges = physnet_vlan:100:900
物理網絡名稱是physnet_vlan,在此物理網絡中建立vlanid爲 102的網絡,ip範圍爲10.200.43.50,10.200.43.59,網關爲10.200.43.254。命令以下:
```
neutron net-create vlan102 --provider:network_type vlan --provider:physical_network physnet_vlan --provider:segmentation_id 102socket
NET102=neutron net-list|grep vlan102|awk '{print $2}'
ide
neutron subnet-create --name public_subnet --ip-version 4 --gateway 10.200.43.254 --allocation-pool start=10.200.43.50,end=10.200.43.59 $NET102 10.200.43.0/24
2. 建立實例網絡,任選一個103-900之間的vlanid,這裏選擇103,任選一個ip範圍,只要規避網絡衝突就好,這裏選擇192.168.0.0/24,命令以下:
neutron net-create vlan103 --provider:network_type vlan --provider:physical_network physnet_vlan --provider:segmentation_id 103
NET103=neutron net-list|grep vlan103|awk '{print $2}'
neutron subnet-create --name vlan103_subnet --ip-version 4 $NET103 192.168.0.1/24
```
### 4. 配置ironic
在全部控制節點上配置ironic,enable multi-tenancy,要修改的內容以下:
[DEFAULT] enabled_drivers = pxe_ipmitool enabled_network_interfaces=noop,flat,neutron [neutron] cleaning_network = vlan102 provisioning_network = vlan102
配置完成後執行docker restart ironic_conductor ironic_api
P版本networking-generic-switch插件有bug,須要修改部分代碼,在全部控制節點上執行如下命令
docker exec -u 0 neutron_server sed -i 44,46d /var/lib/kolla/venv/lib/python2.7/site-packages/networking_generic_switch/devices/netmiko_devices/cisco300.py docker restart neutron_server
自動部署已經作好,此步驟能夠忽略
配置 /etc/kolla/neutron-server/ml2_conf.ini,添加交換機的信息,此例中的交換機信息是:
型號 | cisco 300系列 |
---|---|
主機名 | switch797d1f |
ip | 10.200.43.200 |
用戶名 | cisco |
密碼 | **** |
對應的配置文件內容是:
/etc/kolla/neutron-server/ml2_conf.ini [ml2] mechanism_drivers = openvswitch,l2population,genericswitch [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,示例以下:
```
# 設置API版本 1.34
export IRONIC_API_VERSION=1.34
#建立部署鏡像,此步驟部署腳本已經作掉,能夠忽略
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
#建立node
ironic node-create -d pxe_ipmitool -n 197test --network-interface neutron
NODE_UUID=ironic node-list|grep 197test|awk '{print $2}'
DEPLOY_VMLINUZ_UUID=glance image-list |grep deploy-vmlinuz|awk '{print $2}'
DEPLOY_INITRD_UUID=glance image-list |grep deploy-initrd|awk '{print $2}'
USER=admin
PASS=****
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 driver_info/deploy_kernel=$DEPLOY_VMLINUZ_UUID driver_info/deploy_ramdisk=$DEPLOY_INITRD_UUID
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
ironic node-set-provision-state $NODE_UUID manage
### 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=GE9
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
ironic node-set-provision-state $NODE_UUID provide
### 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
### 10. 建立裸機實例 使用上文建立的flavor和一個非部署網絡(vlan102)的vlan網絡,建立實例,示例以下:
nova boot --image cirros --flavor $FLAVORID --nic net-id=$NET103 test ```