Enable multi-tenancy on ironic
Multi-tenancy 是openstack ironic从Ocata版本开始支持的新特性,通过network-generic-switch插件控制交换机,Ironic可以实现在不同租户间机网络隔离,并且可以使得物理机和虚拟机工作在同一个二层中。本文记录了在基于kolla 的OpenStack Ocata版本上,如何配置相关服务,启用multi-tenancy功能。阅读本文需要有一定ironic基础。
基础环境:
- ALL-IN-ONE openstack ocata 集群
- cisco 300 交换机
- dell r720 服务器
网络拓扑图如下:
实验步骤:
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:**********
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 ): 1
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 = default
[ml2_type_flat]
flat_networks = external
[ovs]
bridge_mappings = default:br-data,external:br-ex
在openvswitch容器中,要保证eth0在br-data网桥中,eth1在br-ex网桥中:
ovs-vsctl add-port br-data eth1
#接下来的操作会导致网络中断,需要到机房执行
ovs-vsctl add-port br-ex eth0
ifconfig eth0 0.0.0.0
ifconfig br-ex 10.200.43.196/24 up
3. 创建相关网络和路由
我们选择vlan102作为部署网络,需要创建虚拟路由和相关网络,打通部署网络和管理网,步骤如下:
- 在horizon上,分别创建vlan id为100,101,102的网络,子网信息可以随意分配,只要避免ip冲突就好。此例中我们为vlan102创建了子网192.168.102.0/24
- 创建一个flat网络,禁用网关,分配数个和kolla-aio同网段的ip,数量等于1+你想同时支持部署的裸机数量,在此例中,分配的ip是 10.200.43.197和10.200.43.198
- 创建router,不设置网关
- 在router中添加到vlan102网络的接口,接口ip不输入
- 5在router中添加到flat网络的接口,接口ip输入一个我们分配的ip,此例中输入了10.200.43.197
- 在控制器上添加一条路由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,neutron
[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服务
5. 更新networking-generic-switch代码
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
6. 将交换机信息配置给配置neutron
配置 /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}'`
#设置node driver信息
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
#设置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
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
10. 创建裸机实例
使用上文创建的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的时候,即使是同一个宿主机上同一个网络内的两台虚拟机,也不能相互通信,这是不正常的,原理未知。
测试时起初打算使用hp机器作为被部署机器测试,测试过程中发现HP机器ipmi命令和通用ipmi命令不一致,所以无法使用ironic pxe-ipmitool driver管理该机器。
只能使用pxe-ilodriver,此driver又限制了启动时只能使用UEFI启动,需要配置uefi后
配置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上,所以网络不通,手动更改网络后没问题。
Enable multi-tenancy on ironic的更多相关文章
- OpenStack Ironic 常见问题
whole disk和partition 镜像 whole disk镜像部署可以支持windows,但是不能自定义分区(可以通过cloud-init实现),分区表是做镜像的人确定好的,partitio ...
- Phoenix综述(史上最全Phoenix中文文档)
个人主页:http://www.linbingdong.com 简书地址:http://www.jianshu.com/users/6cb45a00b49c/latest_articles 网上关于P ...
- ABP框架系列之三十四:(Multi-Tenancy-多租户)
What Is Multi Tenancy? "Software Multitenancy refers to a software architecture in which a sing ...
- ABP框架系列之十七:(Data-Filters-数据过滤)
Introduction It's common to use the soft-deletepattern which is used to not delete an entity from da ...
- Filebeat+Kafka+Logstash+ElasticSearch+Kibana 日志采集方案
前言 Elastic Stack 提供 Beats 和 Logstash 套件来采集任何来源.任何格式的数据.其实Beats 和 Logstash的功能差不多,都能够与 Elasticsearch 产 ...
- wazuh官方安装指南(中文译版本)
安装Wazuh服务器 Wazuh服务器可以安装在任何类型的Unix操作系统上.最常见安装在Linux上.如果可以为您的系统提供自动化脚本,则安装过程会更容易,但是,从源码构建和安装也非常简单. 通 ...
- Deploying Cloud Foundry on OpenStack Juno and XenServer (Part I)
link http://rabbitstack.github.io/deploying-cloud-foundry-on-openstack-juno-and-xenserver-part-i/ Cl ...
- phoenix从入门到精通
第一章.phoenix入门简介 1. Phoenix定义 Phoenix最早是saleforce的一个开源项目,后来成为Apache基金的顶级项目. Phoenix是构建在HBase上的一个SQL ...
- ABP文档 :Overall - Introduction
介绍 我们基于不同的需求创建不同的应用,但却在一次又一次地实现相同或相似的结构.至少在某种程度上,授权.验证.异常处理.日志.本地化.数据库连接管理.配置管理.审计日志属于通用的结构. 另外我们总是在 ...
- java:提示Could not initialize class sun.awt.X11GraphicsEnvironment
前几天发现tomcat提示 Could not initialize class sun.awt.X11GraphicsEnvironment 问题.以为不验证,就没太关注,今天发现,有同事提示了个 ...
随机推荐
- JAVA学习,是一条漫长的道路
我在Java 1.0正式问世前就开始学习Java,这么多年过去了,到现在我的Java学习历程还没有停过.我阅读原文书,研究原始码,撰写程序,自认为走得扎实,不奢望一步登天.像我这样老式的学习方式,显然 ...
- MYSQL 5.7 修改密码、登录问题
mysql5.7 关于密码问题 报错: ERROR 1862 (HY000): Your password has expired. To log in you must change it usin ...
- Android Studio 下获取debug sha1和md5
Open Android Studio Open Your Project Click on Gradle (From Right Side Panel, you will see Gradle Ba ...
- html页面不显示中文
问题:HTML编辑中文后无法在网页上显示中文 原因:是适用的 Cufon字体包不支持中文造成的. 简单粗暴的解决方法:如果你本来打算是去掉Cufon,可以看一看<如何禁用Cufon功能>. ...
- 选择结构if、switch
选择结构if.switch 一.if三种形式 if if-else 3.if -else if -else 二.switch 针对某个表达式的值做出判断,成为决定执行代码块 switch 语句特点: ...
- sizeof和strlen的使用
sizeof和strlen的使用 1. sizeof 其值在编译时就计算好了,所以不能用来返回动态分配的内存空姐的大小. 当参数为下面内容是,所表达的含义: 数组——编译时分配的数组空间大小: 指针— ...
- ASP.NET没有魔法——ASP.NET MVC 模型验证
在前面的文章中介绍了用户的注册及登录功能,在注册用户时可以通过代码的形式限制用户名及密码的格式,如果不符合要求那么就无法完成操作,如下图: 该功能的原理是Identity基于的Entity Frame ...
- Linux下使用skipfish扫描网站漏洞步骤
skipfish是谷歌开发的网站安全扫描工具. 下载地址:http://pan.baidu.com/s/1kTC66lL svn更新地址(一般链接不上,网速很慢): http://skipfish.g ...
- ABP官方文档翻译 7.1 后台Jobs和Workers
后台Jobs和Workers 介绍 后台Jobs 关于Job持久化 创建后台Job 在队列中添加一个新Job 默认的后台Job管理器 后台Job存储 配置 禁用Job执行 异常处理 Hangfire集 ...
- 51NOD 1227 平均最小公倍数 [杜教筛]
1227 平均最小公倍数 题意:求\(\frac{1}{n} \sum_{i=1}^n lcm(n,i)\) 和的弱化版? \[ ans = \frac{1}{2}((\sum_{i=1}^n \su ...