enable multi-tenancy on openstack pike

Multi-tenancy 是openstack ironic從Ocata版本開始支持的新特性,經過network-generic-switch插件控制交換機,Ironic能夠實如今不一樣租戶間機網絡隔離,而且可使得物理機和虛擬機工做在同一個二層中。以前在O版本折騰過一次,也寫了對應的文檔,可是如今由於工做須要,在Pike版本從新作了一遍這份工做,發現可是當時理解的不是很深刻,走了很多彎路,另外p版本也引入了新的bug,因此從新寫了一份文檔,記錄了在 kolla 部署出來的pike版本openstack上,如何配置相關服務,啓用multi-tenancy功能。node

基礎環境:

  1. kolla pike openstack集羣
  2. cisco 300 交換機
  3. dell r720 服務器

實驗步驟:

### 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

5. 更新networking-generic-switch代碼

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

6. 將交換機信息配置給配置neutron

自動部署已經作好,此步驟能夠忽略
配置 /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}'

設置node driver信息

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

設置node 屬性

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 ```

相關文章
相關標籤/搜索