跳转到: 导航, 搜索

GroupBasedPolicy/InstallODLIntegrationDevstack

安装和运行 GBP

以下是一系列安装和使用 GBP/ODL 集成的说明


虚拟机设置

  • 在 virtualbox 或 vmware fusion 中设置 Ubuntu 14.04 虚拟机,可以使用一个虚拟机或两个虚拟机。 在示例中,为 devstack 设置一个虚拟机(2 核,4G 内存),为 opendaylight 控制器设置第二个虚拟机(2 核,6G 内存)。
  • 运行 OVS 2.1 或更高版本!(我们推荐 2.3)。

OpenDaylight 设置

1. sudo apt-get install git-core maven openjdk-7-jre openjdk-7-jdk

1.1 手动将 maven 从 3.0.5 升级到 3.1.1

  cd ~/Downloads
  wget http://apache.mirrors.timporter.net/maven/maven-3/3.1.1/binaries/apache-maven-3.1.1-bin.tar.gz
  sudo mkdir -p /usr/local/apache-maven
  sudo mv apache-maven-3.1.1-bin.tar.gz /usr/local/apache-maven
  cd /usr/local/apache-maven
  sudo tar -xzvf apache-maven-3.1.1-bin.tar.gz
  sudo rm /usr/bin/mvn
  sudo ln -s /usr/local/apache-maven/apache-maven-3.1.1/bin/mvn /usr/bin/mvn
  cd

2. git clone https://github.com/opendaylight/groupbasedpolicy.git

3. cd groupbasedpolicy

4. mvn clean install

5. cd distribution-karaf/target/assembly/bin/

6. ./karaf

7. 在 karaf 内部,运行以下命令

  feature:install odl-restconf odl-groupbasedpolicy-base odl-groupbasedpolicy-ofoverlay

一体化 Devstack 安装

1. 从 github 获取 devstack

    git clone https://github.com/group-policy/devstack.git -b stable/juno-gbp-odl
    cd devstack
    cp local.conf.controller local.conf


2. 修改 local.conf 文件末尾的 'odl_host',使其为

  • ODL_MGR_IP = <odl-controller-ip>
  • HOST_IP = <openstack 控制器 ip>
  • odl_host = <odl-controller-ip>


3. ./stack.sh

注册 OFOverlay

从您的 POSTMAN 应用程序,设置以下 RESTful 调用:PUT http://<controller_IP>:8181/restconf/config/opendaylight-inventory:nodes

 {
   "opendaylight-inventory:nodes": {
       "node": [
           {
               "id": "openflow:XXXX", 
               "ofoverlay:tunnel-ip": "<ovs IP address>"
           }
       ]
   }
 }

其中 XXXX 是从 <sudo ovs-ofctl show br-int -OOpenFlow13> 转换的 DPID,从十六进制转换为长整型

GBP 实际操作

使用 "gbp" CLI 二进制文件("gbp --help" 将为您提供命令)

示例场景:使用 GBP 建模 Web Tier 和 App Tier 之间的连接

 # Authenticate with admin user, demo project. This is for availabilty-zone
 source openrc admin demo
 # Create allow action that can used in several rules
 gbp policy-action-create allow --action-type allow
 # Create ICMP rule
 gbp policy-classifier-create icmp-traffic --protocol icmp --direction bi
 gbp policy-rule-create ping-policy-rule --classifier icmp-traffic --actions allow
 # Create HTTP Rule
 gbp policy-classifier-create web-traffic --protocol tcp --port-range 80 --direction in
 gbp policy-rule-create web-policy-rule --classifier web-traffic --actions allow
 # ICMP policy-rule-set
 gbp policy-rule-set-create icmp-policy-rule-set --policy-rules ping-policy-rule
 # WEB policy-rule-set
 gbp policy-rule-set-create web-policy-rule-set --policy-rules web-policy-rule
 # Policy Target Group creation and policy-rule-set association
 gbp group-create  web --provided-policy-rule-sets "icmp-policy-rule-set=true,web-policy-rule-set=true"
 gbp group-create  client-1 --consumed-policy-rule-sets "icmp-policy-rule-set=true,web-policy-rule-set=true"
 # Policy Target ceation and launching VMs
 WEB1=$(gbp policy-target-create web-ep-1 --policy-target-group web | awk "/port_id/ {print \$4}")
 CLIENT1=$(gbp policy-target-create client-ep-1 --policy-target-group client-1 | awk "/port_id/ {print \$4}")
 nova boot --flavor m1.tiny --image cirros-0.3.2-x86_64-uec --nic port-id=$WEB1 web-vm-1
 nova boot --flavor m1.tiny --image cirros-0.3.2-x86_64-uec --nic port-id=$CLIENT1 client-vm-1
 #Check your availability zone using <nova service-list>
 #For multi-node setup, this will launch extra VMs on compute node
 WEB2=$(gbp policy-target-create web-ep-2 --policy-target-group web | awk "/port_id/ {print \$4}")
 CLIENT2=$(gbp policy-target-create client-ep-2 --policy-target-group client-1 | awk "/port_id/ {print \$4}")
 nova boot --flavor m1.tiny --image cirros-0.3.2-x86_64-uec --nic port-id=$WEB2 web-vm-2 --availability-zone=nova:osgbp2
 nova boot --flavor m1.tiny --image cirros-0.3.2-x86_64-uec --nic port-id=$CLIENT2 client-vm-2 --availability-zone=nova:osgbp2
 ####CHECKPOINT: ICMP and HTTP work from app to web and vice versa

取消堆叠和重新堆叠

停止 OpenDaylight 控制器并删除任何持久数据

 logout
 rm -rf ../data

修改 local.conf 取消注释 "OFFLINE=True",开始取消堆叠和重新堆叠

 ./unstack.sh --all
 rm -rf /opt/stack/horizon/openstack_dashboard/enabled/*gbp*.py
 sudo service rabbitmq-server restart
 sudo service mysql restart

启动 OpenDaylight 控制器

 ./karaf
 feature:install odl-groupbasedpolicy-openstackgbp odl-restconf

启动 Devstack

 ./stack.sh

多节点 Devstack 安装

  1. 启动 ODL 控制器 OpenDaylight 设置
  2. 启动 Openstack 控制器节点:遵循 一体化 Devstack 安装
  3. 创建计算节点 VM 虚拟机设置。 注意:此 VM 大小可以更小,CPU 2 核,内存 2GB 即可。
  4. 按照此链接设置计算节点 设置计算节点
  5. 在控制器节点上,注册 OFOverlay OFOverlay
  6. 在控制器节点上,运行 GBP 实际操作脚本 GBP 实际操作

设置计算节点

1. 从 github 获取 devstack

    git clone https://github.com/group-policy/devstack.git -b stable/juno-gbp-odl
    cd devstack
    cp local.conf.compute local.conf


2. 修改 local.conf 文件中的 IP 地址,使其为

  • ODL_MGR_IP = <odl-controller-ip>
  • HOST_IP = <openstack 计算 ip>
  • SERVICE_HOST = <openstack 控制器 ip>
  • odl_host = <odl-controller-ip>


3. ./stack.sh

使用 devstack 启用实时虚拟机迁移

该过程与多节点设置类似

  1. 启动 ODL 控制器 OpenDaylight 设置
  2. 使用 ODL 控制器作为 NFS 服务器。 NFS 服务器将由 devstack 控制器和计算用作 VM 实例数据共享存储。 NFS 服务器设置
  3. 启动 Openstack 控制器节点:参考 一体化 Devstack 安装。 在启动 ./stack.sh 之前,需要确保主机配置 主机配置,NFS 共享已挂载 NFS 客户端配置 并确保 libvirt 已正确配置 Libvirt 配置
  4. 创建计算节点 VM 虚拟机设置。 注意:此 VM 大小可以更小,CPU 2 核,内存 2GB 即可。
  5. 按照此链接设置计算节点 设置计算节点。 在启动 ./stack.sh 之前,需要确保主机配置 主机配置,确保 NFS 共享已挂载 NFS 客户端配置 并确保 libvirt 已正确配置 Libvirt 配置
  6. 在控制器节点上,注册 OFOverlay OFOverlay
  7. 在控制器节点上,运行 GBP 实际操作脚本 GBP 实际操作
  8. 启动 VM 后,启动 VM 迁移
   # check which compute node the instance is running
   nova-manage vm list   | awk '{print $1,$2,$4,$5}' | column -t
   
   # Run nova live-migration command to move the VM to another compute node:
   nova live-migration web-vm-1 <replace with the destination compute node>
   # check the VM state
   nova list
   # validate which compute node the instance is running
   nova-manage vm list   | awk '{print $1,$2,$4,$5}' | column -t
   

NFS 服务器设置

  • 安装 NFS 服务器软件包
    sudo adduser stack
    sudo apt-get install nfs-kernel-server
    sudo mkdir -p /srv/demo-stack/instances
    sudo chmod o+x /srv/demo-stack/instances
    sudo chown stack:stack /srv/demo-stack/instances
  • 在 /etc/exports 中添加以下条目
    /srv/demo-stack/instances 192.168.0.0/16(rw,fsid=0,insecure,no_subtree_check,async,no_root_squash)
  • 启动 NFS 服务器守护程序
    sudo exportfs -ra
    sudo service nfs-kernel-server restart

主机配置

  • 编辑您的 DNS 或 /etc/hosts,以确保 devstack 控制器节点和计算节点可以相互执行名称解析。
    $ ping HostA
    $ ping HostB

NFS 客户端配置

  • 安装 NFS 客户端软件包
    sudo apt-get install rpcbind nfs-common
  • 创建实例数据文件夹并挂载 NFS 文件共享
    sudo mkdir /opt/stack
    sudo chown stack:stack /opt/stack
    mkdir -p /opt/stack/data/instances
    sudo mount <your NFS server ip address>:/srv/demo-stack/instances /opt/stack/data/instances

Libvirt 配置

  • 修改 /etc/libvirt/libvirtd.conf 文件以包含以下内容
    listen_tls = 0
    listen_tcp = 1
    auth_tcp = “none”
  • 修改 /etc/default/libvirt-bin 文件
    libvirtd_opts = “ -d -l”
  • 重启 libvirt
    sudo service libvirt-bin restart

参考资料

1: OpenStack Live Migration