• enable multi-tenancy on openstack pike


    Multi-tenancy 是openstack ironic从Ocata版本开始支持的新特性,通过network-generic-switch插件控制交换机,Ironic可以实现在不同租户间机网络隔离,并且可以使得物理机和虚拟机工作在同一个二层中。之前在O版本折腾过一次,也写了对应的文档,但是现在因为工作需要,在Pike版本重新做了一遍这份工作,发现但是当时理解的不是很深入,走了不少弯路,另外p版本也引入了新的bug,所以重新写了一份文档,记录了在 kolla 部署出来的pike版本openstack上,如何配置相关服务,启用multi-tenancy功能。

    基础环境:

    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:**********
    
    
    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 ): 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
    

    3. 创建相关网络

    1.创建部署网络
    物理机部署过程中,需要访问ironic api,所以部署网络需要和管理网络打通,我们为了方便,直接使用管理网络作为部署网络,方法如下:
    在交换机上接一根网线到管理网连接到管理网,并且配置vlan id为102,在openstack创建一个网络,vlan id为102,将这个网络作为部署网络。

    这种方案的优点在于方便,缺点在于,部署网络的流量会影响管理网的网络质量,如果是大规模的生产环境,不建议这么做,建议拆分管理网和部署网络,配置交换机和或者虚拟路由打通管理网和部署网络。
    查看物理网络名称

    [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 102
    
    NET102=`neutron net-list|grep vlan102|awk '{print $2}'`
    
    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
    
    1. 创建实例网络,任选一个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
    
  • 相关阅读:
    乐在其中设计模式(C#) 享元模式(Flyweight Pattern)
    乐在其中设计模式(C#) 抽象工厂模式(Abstract Factory Pattern)
    新瓶旧酒ASP.NET AJAX(7) 客户端脚本编程(Sys命名空间下的类)
    [翻译]在GridView中针对鼠标单击的某一独立单元格进行编辑
    乐在其中设计模式(C#) 中介者模式(Mediator Pattern)
    [翻译]使用C#创建SQL Server的存储过程(Visual Studio 2005 + SQL Server 2005)
    [翻译]ASP.NET 2.0中的健康监测系统(Health Monitoring)(1) 基本应用
    厚积薄发,丰富的公用类库积累,助你高效进行系统开发(11)各种线程相关操作类
    Oracle如何实现创建数据库、备份数据库及数据导出导入的一条龙操作
    Winform分页控件支持表头全选操作实现
  • 原文地址:https://www.cnblogs.com/zhangyufei/p/8472923.html
Copyright © 2020-2023  润新知