cord-in-a-box 2.0 安装指南
这篇文章简要介绍了 Ciab2.0 的安装. 包括硬件, 软件环境的选择, Ciab2.0的实际部署架构, 安装过程等. 下面就先对 Ciab2.0 部署环境做简要介绍.
1. 概述
这一部分来看看 Ciab2.0 部署环境以及部署的所需的软硬件环境.
1.1 整体部署情况
在正式介绍安装之前先说一下, cord-in-a-box2.0(Ciab2.0)的整体部署情况,我们服务器上部署的ciab2.0的各个虚拟机的嵌套情况如下:


上图说明:
prod虚拟机: CORD 官方文档叫这个虚拟机为 目标服务器(target server). 从上图中,我们可以看到CORD的主要组件ONOS, XOS, Openstack 全在prod虚拟机中,也就是 prod 其实几乎是 Ciab2.0 的实体,除了 Openstack 的计算节点
corddev虚拟机: CORD官方称这个主机为构建主机(build host),因为脚本安装过程的很多命令都是从这个主机进行的,该虚拟机为 prod 中各个组件建立提供所需要的 Docker镜像.
上述各组件的关系如下,详细见cord-in-the-cloud
1.2 服务器硬件配置要求
官方推荐配置:
- 64位 服务器
- 32GB+RAM
- 8+ CPU cores
- 200GB+ 硬盘
推荐配置(原因见下面 Exsi部分):
- 64位 服务器
- 64GB+RAM
- 12+ CPU cores
- 2TB+ 硬盘
2. 安装Ciab2.0详细步骤
安装步骤分为以下几个步骤:
- 安装 Vmware Exsi 6.0服务器端
- 使用 Exsi 客户端 vsphere 安装ubutu 14.04 server版本, 并使其支持嵌套虚拟化
- 下载ciab2.0安装脚本, 开始安装ciab2.0
2.1 安装Exsi6.0 (可选)
2.1.1 Exsi server端安装简介
基于以下原因选择安装Exsi6.0:
- 由于Ciab还处理开发阶段, 系统并不是很稳定,有时系统会崩溃
- Ciab安装过程耗时很长,崩溃再安装困难
- EXSI 6.0 一键操作就可以拍下虚拟机的快照,利于系统再恢复与开发
上面的推荐配置是根据我们这边服务器的情况推荐的, 因为安装了Exsi6.0,对于内存的要求可能就提高了,就我们这边服务器来说,推荐配置的性能刚刚好,不会很卡. 由于需要拍快照,ciab安装之后 虚拟机划分的虚拟磁盘大小大约为400GB, 为了能存储几个版本的快照,所以需要较大的硬盘空间
当然也可以不安装exsi, 直接在服务器上直接进行后续操作.
安装Exsi过程说明见: Exsi6.0安装手册
2.1.2 配置Exsi6.0 支持嵌套虚拟化
1. 服务器安装Exsi Server端之后, 在个人电脑上安装 客户端 Vsphere 5.5
2. 通过 vsphere 登陆 Exsi server端, 安装 Ubuntu14.04 server版本,为了便于描述, 我们称这个虚拟机为宿主机cord [安装教程]
(http://jingyan.baidu.com/article/bea41d439726c1b4c51be629.html)
CPU cores全部分配给该虚拟机
内存全部分配给该虚拟机
磁盘大小分配450GB
3. 虚拟机cord安装成功之后, 关闭cord虚拟机
4. 使用 vSphere Client 启用 ESXi Shell 访问
使用 vSphere Client 登录到 Exsi, 在清单面板中选择cord虚拟机,单击配置选项卡,再单击安全配置文件。
在服务部分中,单击属性。从下面的列表中选择 ESXi Shell:选择启动以启用此服务。选择与主机一起启动与停止选项, 点击启动,启动该服务


5. 配置Exsi6.0支持虚拟化
现在在物理服务器上操作, 按下Alt F2,进入Exsi shell; 输入命令:
find / -name *.vmx
该命令会返回一个文件名,vim编辑该文件,在最后一行添加 vhv.enable = "TRUE"
6. 回到vsphere client端开启cord虚拟机
$ kvm-ok #查看是否支持嵌套虚拟化
输出
INFO: /dev/kvm exists
KVM acceleration can be used
成功
2.1.3 在cord虚拟机上搭建VPN
原因: 由于Ciab中需要安装各种软件的特定版本, 所以他会在安装过程是使用各种国外的库;我们用的ubuntu14.04现在在添加国外库之后, apt-get update会出现错误导致安装错误, 参照ubuntu14.04 server使用pptp搭建vpn
如果vpn的服务器是站点在国内的话, 建议ubuntu把源换成清华的源.
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-security main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-proposed main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-security main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-updates main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-backports main restricted universe multiverse
deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ trusty-proposed main restricted universe multiverse
在上述一切步骤完成之后,进入正题
2.2 Ciab2.0安装
Ciab2.0安装采用的是一键脚本安装, 看起来很简单, 但是刚接触安装过程的时候, 报错了,也很难找到有效的解决方法
为了对于Ciab2.0有更好的了解,下面概述下安装的流程;
2.2.1 CORD软件结构
先来看看下图, 这张图显示了CORD的软件架构, XOS处于最高层, 通过调用OpenStack, ONOS的API实现其将SDN, NFV,Cloud融合的能力, 其中 ONOS, XOS的模块都封装Docker容器中, 这也决定了他们的安装的相对顺序.

2.2.2 Ciab2.0安装过程概括
| 阶段 | 耗时 | 虚拟机内部活动 |
|---|---|---|
| 阶段① | 20分钟+ | 配置宿主机cord,并下载 Ciab2.0安装过程中所需的配置与库(opencord文件夹中) |
| 阶段② | 20分钟+ | 通过vagrant建立并配置虚拟机corddev, prod |
| 阶段③ | 2小时+ | corddev虚拟机下载供prod使用的docker 镜像 |
| 阶段④ | 30分钟+ | 从corddev下载镜像, 并配置 prod虚拟机,为安装openstack,onos,xos搭建好环境 |
| 阶段⑤ | 2小时+ | 安装 openStack |
| 阶段⑥ | 10分钟+ | 安装ONOS |
| 阶段⑦ | 30分钟+ | 安装XOS |
| 阶段⑧ | 1小时+ | 安装openstack计算节点 |
| 阶段⑨ | 30分钟+ | 运行官方测试, 测试各个组件正常工作 |
上述时间建立在网速大约是100KB环境下
2.2.3 Ciab2.0 正式安装
下载并运行Ciab2.0的安装脚本
下载脚本
curl -o ~/cord-in-a-box.sh https://raw.githubusercontent.com/opencord/cord/cord-2.0/scripts/cord-in-a-box.sh
查看脚本选项
bash ~/cord-in-a-box.sh -h

我们选择安装两个计算节点(Ciab2.0最多支持2个),并运行测试案例
-c 选项清除了之前构建的环境, 谨慎使用, 具体如何清除之前构建环境? 看了脚本中的 cleanup 函数就清除了, 请务必看一下。
运行脚本
bash ~/cord-in-a-box.sh -t -n 2| tee ~/install.out
由于国内一些问题我们需要做更多的工作, 见下
2.2.4 安装过程详解
2.2.4.1 安装 juju-core
- Ciab2.0中 Openstack 是使用juju部署, 由于一些原因脚本中安装的版本会导致
阶段⑤juju bootstrap' 卡住很长时间,然后报错\(ERROR upgrade in progress - Juju functionality is limited\),所以我们可以在corddev下载镜像阶段③就把对应的juju版本安装好 (不知道这个问题改进没有:()
ssh prod
sudo apt-add-repository ppa:juju/1.25
sudo apt-get update
sudo apt-cache show juju-core |grep Version
# 下载最新版本,可能会有变化
sudo apt-get install juju-core=1.25.12-0ubuntu1~14.04.2~juju1
2.2.4.2 安装步骤分解
我们先来看下脚本中的安装过程; 我把脚本中的主体部分贴出来.具体见脚本
bootstrap
vagrant_vms_up
install_head_node
set_up_maas_user
if [[ $NUM_COMPUTE_NODES -gt 2 ]]
then
echo "currently max only two compute nodes can be supported..."
NUM_COMPUTE_NODES=2
fi
for i in `seq 1 $NUM_COMPUTE_NODES`;
do
echo adding the compute node: compute-node-$i
add_compute_node compute_node-$i build_compute_node-$i
done
exit 0
安装过程2.2.2
这里把安装过程分为
9个阶段, 并且后一个过程依赖于前一个过程一般来说, 前一个阶段安装成功之后,后面出错了,再次安装时就不需要再次执行出错前的部分了(在脚本中注释了对应函数),所以有必要了解脚本语句对应的安装阶段;
- 阶段① 对应于脚本中
bootstrap函数 - 阶段② 对应于脚本中
vagrant_vms_up函数
- 阶段① 对应于脚本中
现在详细说明
install_head_node
function install_head_node() {
cd $CORDDIR/build
# SSH config saved earlier allows us to connect to VM without running 'vagrant'
ssh corddev "cd /cord/build; ./gradlew fetch"
ssh corddev "cd /cord/build; ./gradlew buildImages"
ssh corddev "cd /cord/build; ping -c 3 prod; ./gradlew -PdeployConfig=$VMDIR/$CONFIG -PtargetReg=10.100.198.201:5000 publish"
ssh corddev "cd /cord/build; ./gradlew -PdeployConfig=$VMDIR/$CONFIG deploy"
}
下面命令对应于阶段③, 虚拟机corddev下载Docker镜像
ssh corddev "cd /cord/build; ./gradlew fetch"
ssh corddev "cd /cord/build; ./gradlew buildImages"
\(prod\) 从 \(corddev\) 下载一部分Docker镜像, 是阶段④的一部份,这一步一般来说,都会一步成功
ssh corddev "cd /cord/build; ping -c 3 prod; ./gradlew -PdeployConfig=$VMDIR/$CONFIG -PtargetReg=10.100.198.201:5000 publish"
阶段④ ~ 阶段⑦, 都在下面命令中执行
ssh corddev "cd /cord/build; ./gradlew -PdeployConfig=$VMDIR/$CONFIG deploy"
上述命令可以分解为下面命令:
# 登陆构建主机 corddev 并进入 /cord/build 文件夹
ssh corddev "cd /cord/build"
# 依次执行下面命令, 用下面命令
./gradlew –PdeployConfig=config/cord_in_a_box.yml deployBase
./gradlew –PdeployConfig=config/cord_in_a_box.yml deployPlatform
./gradlew –PdeployConfig=config/cord_in_a_box.yml deployOpenstack
./gradlew –PdeployConfig=config/cord_in_a_box.yml deployONOS
./gradlew –PdeployConfig=config/cord_in_a_box.yml deployXOS
./gradlew –PdeployConfig=config/cord_in_a_box.yml setupAutomation
更进一步了解安装
如果你不满足只用脚本安装或者想更进一步了解安装过程,这一部分就是为你写的. 不过在这里我不会详细说明, 算是抛砖吧.
在运行 cord-in-a-box.sh 脚本时, 脚本做的第一件事就是将构建 Ciab2.0 所需的配置,部署等文件下载到本机命名为 \(opencord\) 的目录下, 目录结构如下:
opencord
|--- build
|--- onos-apps
|--- orchestration
其中 \(onos-apps\), \(orchestration\) 文件夹包含的是 Ciab2.0 组件的库文件, 我们这里不予考虑. 与 Ciab2.0 构建过程相关的全在 \(build\) 文件夹中. 其中有两个重要的子目录是 \(maas\), \(platform-install\). 阶段⑤之前的构建脚本基本都在\(maas\)文件夹下, 之后的基本都在\(platform-install\)中. 当然最清楚的理解构建过程的方式就是看构建脚本了, 这里采用的是 Gradle项目自动化构建工具 和 Ansible自动化运维工具结合构建起整个 Ciab2.0. 所以简单学习下这两个构建工具将会事半功倍.
关于Ciab2.0的安装就介绍到这里了, 当然安装过程中踩到了各种坑, 其中有一些在CORD的google论坛找到了答案. 由于个人知识水平有限, 难免有纰漏和表述不当的地方, 还望谅解.
cord-in-a-box 2.0 安装指南的更多相关文章
- virtual box 6.0 扩容原有磁盘空间 ubuntu18.04
virtual box 6.0 扩容原有磁盘空间 ubuntu18.04 1虚拟介质管理 1.1点击菜单 1.2 修改磁罗容量大小(需要关闭虚拟机),点击应用 2使用ubuntu安装镜像将新加容量添加 ...
- FlowNet2.0 安装指南
 \(安装环境: \color{red}{Ubuntu16.04 + CUDA8.0 + cuDNN5.0}\) 安装 CUDA CUDA 安装准备 CUDA 官方安装文档 首先查看是否电脑具有支持 ...
- Hive 0.12.0安装指南
目录 目录 1 1. 前言 1 2. 约定 1 3. 服务端口 2 4. 安装MySQL 2 4.1. 安装MySQL 2 4.2. 创建Hive元数据库 2 5. 安装步骤 3 5.1. 下载Hiv ...
- HBase-1.2.1和Phoenix-4.7.0分布式安装指南
目录 目录 1 1. 前言 2 2. 概念 2 2.1. Region name 2 3. 约定 2 4. 相关端口 3 5. 下载HBase 3 6. 安装步骤 3 6.1. 修改conf/regi ...
- Spark 0.9.1和Shark 0.9.1分布式安装指南
目录 目录 1 1. 约定 1 2. 安装Scala 1 2.1. 下载 2 2.2. 安装 2 2.3. 设置环境变量 2 3. 安装Spark 2 3.1. 部署 2 3.2. 下载 3 3.3. ...
- HBase-0.98.0和Phoenix-4.0.0分布式安装指南
目录 目录 1 1. 前言 1 2. 约定 2 3. 相关端口 2 4. 下载HBase 2 5. 安装步骤 2 5.1. 修改conf/regionservers 2 5.2. 修改conf/hba ...
- CSS3与页面布局学习总结(二)——Box Model、边距折叠、内联与块标签、CSSReset
一.盒子模型(Box Model) 盒子模型也有人称为框模型,HTML中的多数元素都会在浏览器中生成一个矩形的区域,每个区域包含四个组成部分,从外向内依次是:外边距(Margin).边框(Border ...
- Box Model,边距折叠,内联和块标签,CSSReset
一.盒子模型(Box Model) 1.1.宽度测试 1.2.溢出测试 1.3.box-sizing属性 1.4.利用CSS画图 二.边距折叠 2.1.概要 2.2.垂直方向外边距合并计算 三.内联与 ...
- 当display=none时,元素和子元素高度为0的解决办法
在前端中为了某种需要,我们需要获取display=none的元素或者子元素的实际高度来进行某些处理,然而html对display=none的元素和子元素是不进行渲染的,如果我们没有规定这些元素的高度那 ...
随机推荐
- [Luogu2617]Dynamic Ranking
题面戳这 类似算法总结 1.静态整体Kth 滑稽吧...sort一遍就好了. 时间复杂度\(O(nlogn)\) 空间复杂度\(O(n)\) 2.动态整体Kth 离散化后开一棵权值线段树,每个位置的值 ...
- [cogs2701]动态树
题面戳我 sol 比较裸啊. 注意操作顺序就行了. code #include<cstdio> #include<algorithm> using namespace std; ...
- Entity Framework Core 之数据库迁移
前言 最近打算用.NET Core写一份开源的简易CMS系统,来练练手 所以又去深入研究了一下Entity Framework Core 发现其实有些细节园子里还是很少讲到. 特意整理了几个细节. 正 ...
- LeetCode之Easy篇 ——(7)Reverse Integer
7.Reverse Integer Given a 32-bit signed integer, reverse digits of an integer. Example 1: Input: Out ...
- 分布式协调服务-Zookeeper
什么是 zookeeper? Zookeeper 是google的chubby一个开源实现,是hadoop的分布式协调服务 它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名 ...
- .NET Core开源API网关 – Ocelot中文文档
Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由.请求聚合.服务发现.认证.鉴权.限流熔断.并内置了负载均衡器与Service Fabric.Butterfly ...
- Windows 8 系统快捷键热键列表收集
值得收藏参考的 Windows 8 系统快捷键热键列表收集大全汇总,键盘党效率党必备啊! 相信不少喜欢接触新鲜软件的同学都已经给电脑安装上Windows 8 操作系统了吧!这个系统优秀与否我们暂且不讨 ...
- 《深入理解Bootstrap》读书笔记(一)
栅格系统 实现原理 通过定义容器大小,平分12份,再调整内外边距,最后结合媒体查询. 通过一系列包含内容的行和列来创建页面布局.下面列出了 Bootstrap 栅格系统是如何工作的: 1.行必须放置在 ...
- linux 目录详解
/bin bin是binary的缩写.这个目录沿袭了UNIX系统的结构,存放着使用者最经常使用的命令.例如cp.ls.cat,等等. /boot 这里存放的是启动Linux时使用的一些核心文件. /d ...
- http状态码是什么,有什么用,在哪里查看,分别代表什么意思?
写在前面: 当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求.当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头用以响应浏览器的请求.本文主要是:关于ht ...