1 前言
本文详细介绍使用OPNFV 的 Fuel部署工具部署Euphrates版本。OPNFV社区从E版本开始全面采用XCI跨社区集成[1]方式,能够最快的获取并集成上游社区项目的最新代码同时可以减少等待BUG修复的时间,2017年10月Euphrates版本首发时还是基于Openstak的Ocata版本,而Ocata是在2017年2月份发布,但是到2017年8月底最新的Pike版本也发布了,由于OPNFV的版本发布周期与Openstack版本的发布周期不一致,也就意味着OPNFV的新版本永远是基于Openstack的上一个版本,OPNFV社区的测试项目将会一直滞后于Openstack的版本,在OPNFV社区引入XCI后我们看到在17年的11月份OPNFV已经支持Pike版本的虚拟POD安装。
在Danube版本时Fuel还是可视化的界面安装对于新接触OPNFV的新手或多或少还能慢慢学习研究。但是E版本的Fuel完全使用脚本命令的方式,无疑是加大了新手的入门难度以及学习难度,在研究Fuel的安装过程中遇到了许多坑也确实也学到了许多东西。
2 安装环境准备
社区在Fuel的安装指导[2]里介绍了如何使用Fuel安装Euphrates,但是这里不得不吐槽一下写这个wiki的人肯定认为阅读文档的人跟他一样是大神,文档写的太简单了,即使是一个环境配置的PDF(pod describe file)如果没有一定了解也是无从下手。
官方推荐的jumphost系统版本为 Ubuntu Xenial或 CentOS 7,本文采用的ubuntu 16.04 64b server版本,若采用CentOS软件安装的命令及版本名会稍有不同请自行搜索解决。
Fuel安装代码仓库:https://git.opnfv.org/fuel
Note:部署时一定要选用最新的stable/euphrates
稳定分支代码,该分支会持续修改部分部署BUG。
2.1 POD配置文件-PDF
官方给的参考POD文件是Fuel仓库里的LF(Linux Foundation)的pod1在fuel/mcp/config/labs/local
目录下,接下来笔者以自己部署的baremetal POD来讲解PDF的内容。PDF采用Yaml格式,包含两部分文件,一部分是IDF用来描述部署工具节点也叫jumphost(这个地方的理解错误导致我出现了文末的部署问题2)节点的网络描述,内容相对简单,需要注意的是网卡名应与节点的网卡名称一致,一般是enoX或enpXs0,如果使用了DPDK则需要正确填写busaddr信息;另一部分是描述整个OPNFV各节点的详细网络、硬件资源等配置信息内容相对多。不熟悉Yaml格式的可以先预习一下Yaml格式:http://www.ruanyifeng.com/blog/2016/07/yaml.html
本次安装的PDF文件下载链接为:idf-pod1.yaml,pod1.yaml
fuel/mcp/config/labs/bii/idf-pod1.yaml
的内容如下,网桥的配置与后续安装执行的命令相关,网桥名字可以任取但是需要与安装时的命令参数保持一致。
1 | ############################################################################## |
fuel/mcp/config/labs/bii/pod1.yaml
的内容如下,detail部分的描述属于非必填内容,net_config中的内容为各节点的描述信息,非常重要。可以配合拓扑图一起查看,部分配置的可选参数参考官方的示例文件。
oob指的的服务器的电源管理IP地址,Fuel安装过程中使用了Maas服务需要通过该地址去对服务器进行裸机管理,包括重启、开关机管理的,Maas是ubuntu社区开发的裸机管理工具支持IPMI、虚拟机管理等,有兴趣的可以研究一下。这里也提一点这是NFV架构中针对PIM(Physical Infrastructure Management)物理基础设施的管理与Openstack的VIM(Virtual Infrastructure Management)虚拟设施管理相对。本次安装的服务器使用的是IPMI的2.0版本,这里有一个坑①是注意查看服务器的IPMI LAN 是否启用,对于DELL服务器在
iDRAC config->networking->IPMI config
,如果未开启安装时将会出现mas01节点无法连接其他节点(Ps. 这个坑我爬了三天才发现);interface参数指的的该段网络使用的是哪个网卡,与idf-pod1.yaml中的
interfaces
网卡顺序以及busaddr
严格匹配,但是oob的interface不受此参数控制;vlan标记该网络是否有vlan tag,如果没有则用’native’标记;
remote_params是前面提到的IPMI管理,填入相应的IP、用户名、密码、mac地址,实际安装中该项的mac地址并没有使用到,该项的另一个参数是AMT,是英特尔的远端管理方式;
网卡特征中支持的参数是sriov和dpdk,笔者使用的服务器较老因此没有这些特性就选择空着;
剩下的一些服务器类型相关的信息,依据实际的服务器参数填写即可。需要指明的是节点的角色并不是按照配置文件中的命名来的,是按照节点的顺序来分配的依次是kvm01
03,cmp0102,同时目前的安装方式对于节点的IP都是在指定的CIDR内随机分配的参看脚本pod_config.yml.j2。
1 |
|
坑①:如下图所示:
需要开启IPMI的LAN,另外还有一点关于密钥的,我的某一台服务器的不是0000000000000000000000000000000000000000
,出现过maas无法连接节点的情况。
本次安装的拓扑图如下
2.2 安装过程
2.2.1 网桥配置
配置jumphost的网桥保证运行其上的虚拟机与其它物理节点的联通,必要的网桥是pxe和ctl,public的网桥可以不用设置,脚本会主动添加nat转换。可以直接在/etc/network/interfaces
中配置网桥
1 | This file describes the network interfaces available on your system |
网桥拓扑如下
1 | bridge name bridge id STP enabled interfaces |
PS:之前采用过在EXSI虚拟机之上安装ubuntu16.04作为jumphost然后进行部署,部署过程中出现过mas01的dhcp应答node节点无法收到的情况导致安装一直不成功,最后不得使用裸机安装ubuntu16.04然后在进行部署(这个坑爬了一个星期,因为一直怀疑是自己的网桥配置错误),这里并不确认是否在虚拟机上一定无法部署成功只是写出来留意一下。
2.2.2 运行部署脚本
将准备好的PDF文件放置在opnfv/fuel/mcp/config
下的目录中,安装脚本会自动查找相应PDF文件,可以使用ci/deploy.sh -h
命令来查看个参数的含义,上一篇文章也讲解了各参数的含义。
1 | sudo ci/deploy.sh -D -b file:///home/opnfv/fuel/mcp/config/ \ |
部署策略的配置在mcp/config/scenario/baremetal
目录中查看,默认分配给安装时的虚拟机cfg01和mas01的资源是4核、6G内存,若jumphost的资源较足可以适当扩大安装虚拟机分配的资源。Fuel的安装过程中会调用fuel/mcp/scripts
下的相关脚本完成具体的安装任务,其中lisb.sh
负责相关的网络配置等,globals.sh
是一个全局变量配置文件,由于之前使用Danube版本的fuel安装时习惯了将openstack各节点的管理IP分配到10.20.0.0/24段因此为了避免与Fuel安装过程中的虚拟机冲突这里修改了默认的mcpcontrol虚拟机网络段。
安装过程中jumphost的cfg01(10.0.0.2)是用来下发安装时的相关配置的以及同步文件,mas01(10.0.0.3)是用来进行裸机管理的。使用命令
1 | ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i /var/lib/opnfv/mcp.rsa ubuntu@10.0.0.3 |
可以查看安装过程的状态,尤其是mas01的裸机管理,如果相应的配置没有设置好需要在这里排错,在mas01的/var/lib/maas
目录下(若无该目录说明Maas服务未安装,需要等待一段时间),当Maas服务安装后可以使用tail -f /var/log/maas/maas.log
查看各节点的安装状态,同时可以登录Maas的web界面查看各节点的状态。登录方式有两种:
1) jumphost中做NAT转发
关于nat转发不熟悉的可以查看这篇博客,博客中关于ipatables讲解十分详细。本文中192.168.20.5为jumphost的public IP,既可以访问外网也可以与局域网其他主机访问,10.20.0.1/24为jumphost 部署OPNFV环境的PXE网桥地址,仅限OPNFV环境的各节点访问。
1 | iptables -t nat -A PREROUTING -d 192.168.20.5 -p tcp --dport 80 -j DNAT --to 10.20.0.3:80 |
在本机上访问http://192.168.20.5:8000/MAAS
账号/密码:opnfv/opnfv_secret,即可查看。
2) 终端开启隧道
该方式如上一篇虚拟安装中讲解到,添加一个本机的80端口到mas01的80端口映射即可。访问本机的http://localhost/MAAS/
MAAS的dashboard会显示安装过程以及各节点的信息。
2.2.3 修改虚拟机登录密码
1)简单的修改密码
部署过程中生成的虚拟机只能使用ssh+key的方式登录,因此需要修改一下密码方便后续的登录,使用下面的命令修改密码
1 | ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i /var/lib/opnfv/mcp.rsa ubuntu@10.0.0.3 "sudo passwd root<<EOF |
2)修改密码和运行ssh密码登录
登录脚本准备cat node_init.sh
1 | ######################################################################## |
然后运行以下命令后,即可直接使用密码进行ssh登录
1 | ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -i /var/lib/opnfv/mcp.rsa ubuntu@10.0.0.2 < node_init.sh |
各虚拟机的IP可以在fuel/mcp/deploy/images/pod_config.yml
中查看或在任意虚拟机的/etc/hosts
中查看,登陆http://Proxy vip
与openstack的dashboard访问IP一致。
2.3 部署中出现的问题
部署过程中如果发现不太正常的情况可以对比一下OPNFV官方Jeklins的构建历史日志,便于确认问题所在。
1)部署超时
如果部署过程中在maas.log中出现部署超时如下所示,可能是软件安装未完成或者其他安装操作耗时超过设置的15分钟
1 | Dec 13 09:27:00 mas01 maas.node: [error] kvm01: Marking node failed: Node operation 'Deploying' timed out after 15 minutes. |
可以修改mcp/patches/0010-maas-region-allow-timeout-override.patch
文件第46行适当延长deploy时间,如果延长时间仍然有问题这需要依据maas.log再次排查错误了。
2018年1月20日更新:官方已经将此处的部署时间做了适当延长,git show f25c19f7a3f90
查看。
2)节点网卡名配置
2017年12月21日更新
部署过程中脚本提示如下信息,经过对比官方的构建历史日志,如下信息输出是正常的,但是等待时间太长,就可能出现问题。
1 | cmp002.baremetal-mcp-ocata-odl-ha.local: |
登录到相应节点(需要注意的是节点的登录与mas01的登录一样是使用密钥登录的,不能通过密码直接登录,因此需要在节点安装系统时就尝试登录进去修改密码,否则一旦出现上述错误可能没法通过ssh登录只能在终端输入用户密码登录,此时还可以通过在cfg01节点上用salt-stack的命令来查看各节点信息,如salt -C "ctl* or cmp*" cmd.run "ifconfig -a"
)查看网卡信息,本次出现的问题是节点在自动配置网络后没有PXE/admin的IP,打开/etc/network/interfaces
发现其配置的网卡名为ethX
而节点的网卡名为enoX
,因此需要修改部署PDF中idf-pod1.yaml中的网卡名称,
3)openstack的dashboard无法访问
部署完成后再访问dashboard时出现无法访问的情况,查找了一下发现是代理虚拟机prx不正常,尝试ssh登录prx,无法访问(原因是代理虚拟机内没有传入密钥)。登录到相应的控制节点上使用virsh list查看虚拟机名称,尝试通过virsh reboot prx02.baremetal-mcp-ocata-odl-ha.local
后发现可以访问dashboard。至于prx的访问可以使用virsh console prx02.baremetal-mcp-ocata-odl-ha.local
免密访问。
安装完成就可以愉快的玩耍了,初次安装会有一些麻烦,一旦安装完成后续的重新部署就会简单许多。
参考文献: