Openstack+Opencontrail安装与部署初级教程

来源:互联网 发布:淘宝crm客户管理系统 编辑:程序博客网 时间:2024/04/28 19:59

本文来自:SDNAP.com - SDN联合播报

11月份受邀访问了汉柏科技,据他们开发SDN小组介绍他们也正在SDN上面花大量人力物力,将会为数据中心提供一整套SDN解决方案。不久将有这方面DEMO,到时希望能在SDNAP沙龙做些分享,或是做些技术上的分享。本文是汉柏SDN产品线经理曾红李参加SDNAP沙龙听KkBluE做了这方面介绍,特意组织出这方面的一个教程分享。非常感谢大家的有心分享。

openstack_opencontrail安装与部署

1 安装准备

本文主要介绍了openstack+contrail的安装过程,用户界面还是openstack的界面,只是openstack的网络功能由contrail 完成(可以从测试中对VM之间通信的抓包可以看出使用了mpls over GRE 隧道)。由于开源版本contrail 安装部署的文档较少,搭建这个环境比较复杂,在此我们分享一下安装和编译过程中遇到的问题和解决方案。由于代码开源,我们也简单介绍了一些调试的手段。如果有什么问题联系 chensheng(at)opzoon.com,或是SDN QQ群#汉柏-树袋熊,或@holly77r25

1.1 硬件环境

  • 服务器两台:操作系统fedora17(18,19应该也没问题)
  • 以太网交换机:1台

逻辑组网拓扑图如下:

openstack_opencontrail安装与部署2

1.2 安装软件准备

(1)安装fedora系统(略);

(2)设置普通用户的sudo权限,openstack的安装是以普通用户的身份安装的(建议不要 以root身份执行安装脚本)

编译sudoers文件

$sudo chmod 777 /etc/sudoers

$vi /etc/sudoers

找到如下行

 root    ALL=(ALL)       ALL

添加普通用户的sudo权限,如下

root    ALL=(ALL)       ALL

opzoon   ALL=(ALL)       NOPASSWD:ALL

把sudoers文件权限复原,否则执行安装脚本会报错

$sudo chmod 440 /etc/sudoers

(3)配置两台服务器的网络,其中一台配置如下(最简单的配置),另外一台的配置需要根据两个服务器是否在一个网段,进行IP地址的修改,在本例子中,两台服务器在同一个网段,IP地址分别为:10.0.0.11 和10.0.0.12

$sudo vi /etc/sysconfig/network-scripts/ifcfg-em1

UUID=”fcc9fad3-4b99-4a02-b02a-adfd6d8f0f64″

NM_CONTROLLED=”yes”

HWADDR=”D0:67:E5:EC:E9:08″

IPADDR=10.0.0.11

NETMASK=255.255.255.0

GATEWAY=10.0.0.1

DNS1=8.8.8.8

DEVICE=”em1″

ONBOOT=”yes”

 

(4)添加ssh认证

脚本安装过程会下载contrail源码,其下载过程需要ssh认证,需要去https://github.com网站注册个账户,然后在注册的账户里添加ssh公匙。步骤如下:

(1)安装ssh

$sudo yum install -y openssh-server

(2)生成公匙和私匙

$ssh-keygen

(3)显示生成的公匙

$cat ~/.ssh/id_rsa.pub

(4)网页登陆https://github.com上注册的账户,点击右上角的设置图标,进入设置界              面后,在左侧栏找到SSH-Keys,就可以添加SSH公匙了。把上面打印的公匙复制            到 key里点击add key就能可以了。

(5)验证密匙是否生效

$ssh -T git@github.com

如果打印如下信息,说明添加成功了。

Hi opzoon! You’ve successfully authenticated, but GitHub does not provide shell                   access.

 

(5)下载devstack(openstack 安装脚本)

Juniper公司把contrail的安装集成到了devstack脚本里,下载地址为https:github.com/dsetia/devstack,可以直接上网页下载zip包,也可以在命令行下用git clone命令下载。git下载方式如下:

$sudo yum install git -y

$cd ~/

$git clone https://github.com/dsetia/devstack.git

(6)下载相应系统内核源码和更新必要库文件

$sudo yum install -y kernel-devel  #编译内核模块vrouter需要

$sudo yum update libtasn1       #运行openstack-compute时,不更新该库会出错

 

2. 安装和编译

根据前面的拓扑图,我们对服务节点和计算节点进行安装。

1.进入下载好的devstack目录,根据需要修改安装节点启动脚本(之后的步骤是一样的)。

(1)服务节点的安装脚本

把contrail目录下的localrc-multinode-server复制一份到devstack目录,并命名为            localrc, 如下:

$cd ~/devstack

$cp contrail/localrc-multinode-server ./localrc

修改localrc里的参数,例如:

PHYSICAL_INTERFACE=em1

HOST_IP=10.0.0.11

CONTRAIL_VGW_PUBLIC_SUBNET=10.0.0.240/28,建议IP范围和样本保持一致 (240     to 255)。

 

(2)计算节点的安装脚本

把contrail目录下的localrc-multinode-compute复制一份到devstack目录,并命名为        localrc,如下:

$cd ~/devstack

$cp contrail/localrc-multinode-compute ./localrc

修改localrc里的参数,例如:

PHYSICAL_INTERFACE=em1

HOST_IP=10.0.0.12

SERVICE_HOST=10.0.0.11

CONTRAIL_VGW_PUBLIC_SUBNET=10.0.0.240/28,建议IP范围和样本保持一致 (240     to 255)。

最后,再把enable_service contrail添加到localrc里。

2.脚本安装里下载的源码存放在了/opt/stack目录里,脚本可能没有权限创建stack目    录,需要手动创建,并设置权限。如下:

$sudo mkdir /opt/stack
$sudo chmod 777 /opt/stack

3.执行安装脚本,安装openstack和contrail。

$./stack.sh

第一次执行脚本,会下载源码和依赖包,安装时间比较长。安装结束后,会打印网页访问地址,用户及密码。一般情况下,很难一次就安装成功的,中间多少会出现一些问题。如果出现安装中断和失败,接着看后面的内容。如果安装失败或者安装提示完成了却仍然有问题,可以看看调试章节的内容定位问题的原因。脚本执行到下载contrail源码时,容易出问题,一般表现为认证、访问网址等诸多原因失败,如果出现这种情况后,需要手动下载(还用脚本下载有可能被跳过),下载方法看后面章节。

4.重新执行安装脚本之前,先执行卸载脚本。

$./unstack.sh

 

3 安装过程遇到的问题及解决方式

1) 如果安装过程遇到HOST_IP无法确定的问题,查看stack.sh里的       FLOATING_RANGE或FIXED_RANGE是否与你的IP地址有冲突。如果有冲突,把它  修改成其它的网段。

2)  如果以前下载过devstack,需要重新下载,新版本补丁做了修改,并修复了一些     BUG。

3)  contrail源码下载出现问题,大概会长时间停留在如下打印处(后面可能还会打印   认证失败或访问被拒绝之类的):

repo init -u git@github.com:Juniper/contrail-vnc

repo init -u git@github.com:Juniper/contrail-vnc

Get https://gerrit.googlesource.com/git-repo

长时间无反应情况下,多按几次ctrl+c让脚本完全退出安装,执行手动下载,步骤        如下:

4) 首先判断是否有repo命令,如果没有,按如下步骤安装:

$wget http://commondatastorage.googleapis.com/git-repo-downloads/repo

$chmod 0755 repo

$sudo mv repo /usr/bin

5) 下载contrail源码(前提是前面的ssh认证通过了):

$sudo rm -rf /opt/stack/contrail

$sudo mkdir /opt/stack/contrail

$sudo chmod 777 /opt/stack/contrail

$cd /opt/stack/contrail

$git config –global user.name “Anonymous”

$git config –global user.email “anonymous@nowhere.com”

$repo init -u git@github.com:Juniper/contrail-vnc

如果上面这步出现问题,ctrl+c退出后,进行如下操作后重新执行(不行就多试几次,直到成功下载完)。

$rm -rf .repo*

$repo init -u git@github.com:Juniper/contrail-vnc

最后,同步源码

 $repo sync

下载完contrail源码,就可以重新执行安装脚本了

$cd ~/devstack

$./stack.sh

6) contrail的编译和安装需要下载一些依赖,当脚本执行到编译contrail或安装contrail       时出现问题,先确认如下目录文件是否都下载成功。如发现某些文件大小为0的情况,    直接删除,下次执行安装脚本时会重新下载。

$ls -l  /tmp/cache/third_party/
bind-9.9.2-P1.tar.gz
fysom-1.0.8.tar.gz
hiredis-master.zip
libxml2-2.8.0.tar.gz
tbb40_20111130oss_src.tgz
boost_1_48_0.tar.gz
gmock-1.6.0.zip
hiredis-v0.11.0.tar.gz
log4cplus-1.1.1.tar.bz2
thrift-0.8.0.tar.gz
bottle-0.11.6.tar.gz
gperftools-2.1.tar.gz
http-parser-v2.1.tar.gz
pugixml-1.2.tar.gz
curl-7.24.0.tar.gz
gtest-1.6.0.zip
ifmap-python-master.zip
rapidjson-0.11.zip
$ls -l /opt/stack/contrail/third_party
apache-cassandra-2.0.2
bottle-0.11.6
hiredis-0.11.0
irond-0.3.0-bin.zip
bottle_patch1.diff
hiredis-asio-patch1.diff
libxml2-2.8.0
tbb40_20111130oss
apache-cassandra-2.0.2-bin.tar.gz
curl-7.24.0
hiredis-boostasio-adapter
log4cplus-1.1.1
thrift-0.8.0
bind-9.9.2-P1
fetch_packages.py
hiredis-patch1.diff
ncclient-v0.3.2.tar.gz
thrift_autoconf.patch
bind_patch1.diff
fysom-1.0.8
http-parser-2.1
ncclient-v0.3.2.tar.gz.1
thrift_patch1.diff
boost_1_48_0
gmock-1.6.0
ifmap-python-client
packages.xml
zookeeper-3.4.5
boost_1_48_patch1.diff
gperftools-2.1
ifmap-python-patch1.diff
pugixml
zookeeper-3.4.5.tar.gz
boost_time_utc.patch
gtest-1.6.0
irond-0.3.0-bin
rapidjson

另外,把pache-cassandra-2.0.2复制一份命名为apache-cassandra-2.0.2-bin或者修改devstack/lib/neutron_thirdparty/contrail里对该文件存在的判断,以避免每次执行安装脚本都要下载。
7) 新版本的devstack安装后,好像没有安装config_parser命令(连它的本名都修改为 了contrail_parser.py),没有它contrail创建不了接口,创建虚拟机会失败。按如下方法     修复(前提是安装脚本至少执行到了给nova源码打补丁的地方,即执行完了    nova_v4.patch。否则没有这个文件):

$sudo cp -rf /opt/stack/nova/plugins/contrail/contrail_parser.py  /usr/sbin/config_parser

$sudo chmod a+x /usr/sbin/config_parser

8) 安装过程可能还会遇到一些文件创建权限问题,对于这些情况,参照调试部分定位问题,设置权限。

 

4 如何调试

1.如果遇到了上面没有提到的问题,就需要看程序执行的情况来定位问题出现原因。  用devstack安装openstack和contrail后,会创建两个screen,在这两个screen中调试比       较方便,定位问题也方便多了。调试步骤如下(如果是root用户安装的,需要切换到       stack账户下调试):

(1)列出screen

$screen -ls

打印如下信息,说明两个screen都创建成功了。

4810.contrail   (Detached)

4670.stack      (Attached)

2 Sockets in /var/run/screen/S-opzoon.

(2)进入到contrail界面

$screen -x contrail

正常情况下,单节点和服务节点最后一行显示如下(计算节点只有agent和vif):

0$ shell 1$(L) redis  2$(L) cass  3$(L) zk  4$(L) ifmap  5$(L) disco  6$(L) apiSrv               7$(L) schema  8$(L) control  9$(L) agent  10$(L) vif*

其中显示有*号的表示现在正处于这个界面,切换到其它程序执行界面的方法:按  一下ctrl+a后,按数字进入对应的程序界面或按p和n进行前、后界面的切换。

(3)进入stack界面的方法及操作和contrail相同。

2.当发现有程序执行异常时,无法通过异常结果判断原因,可以用pdb进行调试查看  问题原因。pdb的使用方法,网上有许多教程,我就不多说了。

3.出现ERROR:Address already in use之类的错误时,大部分情况下表示该程序在另   一个地方运行,这种情况说明程序是正常的,小部分情况是你运行了一些其它的程序,    占用了该端口号。

4.每个程序运行界面,都可以ctrl+c退出程序的执行。不管程序异常退出,还是ctrl+c 退出的,都可以通过按向上的方向键找到运行程序的命令,重新运行程序。

 

5 实际测试

按照前面提到的拓扑进行测试环境安装过程,使用两台设备,一台安装服务节点(包含了计算节点),一台安装计算节点。在这个测试环境里,暂时没有涉及L3层网络,无法保证ssh能登陆虚拟机。登陆虚拟机的方式可以安装virt-manager,通过GUI界面登陆进去测试互通情况,不过在计算节点中创建的虚拟机无法登陆(可以在服务节点中的虚拟机通过ssh登陆),只能看到一个光标在闪,刚开始还以为创建虚拟机有问题,后来ping它里面的虚拟机才知道创建成功了。下面贴上两台主机里的虚拟机互ping抓包的结果,可以看出其隧道封装为MPLS over GRE

openstack_opencontrail安装与部署3

本文链接:http://www.sdnap.com/sdnap-post/3326.html \ 本文标签:opencontrail,openstack


0 0
原创粉丝点击