Cloudify安装手册

Cloud foundry作为业务第一个开源的paas,给我们带来了难得的学习和借鉴的机会,得以窥视paas的盒子内部的构造。Cloud foundry是基于ruby开发的,ruby相比之下比java开发的速度更快,这也是CF发展很快的原因之一把(原因之二,架构稳健,容易扩展)。如果把CF看作是大象,功能齐全,结构完整,那cloudify就是灵活的豹子,号称上手最快的平台。

Cloudify是gigaspaces公司推出的基于java的paas平台。从语言习惯上看基于java的cloudify更贴近我们的开发习惯(其实我也愿意花点时间学点ruby或者groovy,赚点零花钱)。Gigaspaces是业界非常著名的paas提供商,也是高端产品XAP的厂家(eXtreme Application Platform,高端的Java 应用服务器)。有意思的是gigaspaces-cloudify-2.1.0-ga和gigaspaces-xap-premium-9.0.0-ga 的lib库是相同的。也就是说在同一个基本库的基础上开发了2套针对不同场景的应用。

但是我个人感觉cloudify并不能算是一个完整paas平台,我更强相遇cloudify是一个介于IaaS和PaaS之间的一个平台。

准备环境ubuntu 12.04 LTS

我最后把Cloudify3.1 CLI, 加上Cloudify Manager,再加它那个MongoDB加上Node.js的应用实例一起安装在一个1G内存的机器里。最后证明是可以成功,但是到最后一步的时候,的确变得很慢;所以还是建议有2G以上的内存。
如果是Cloudify 3.1版本,还是推荐ubuntu 12.04 precise,有试过14.04版本安装Cloudify 3.1,会提示报错。如果是Cloudify 3.2以上版本,推荐14.04,因为manager只有Docker安装一个选项,虽然理论上您也可能自已升内核。

1
2
3
4
root@localhost :~# cat /etc/issue
Ubuntu 12.04.4 LTS \n \l
root@localhost :~# uname –a
Linux localhost 3.19.1-x86_64-linode53 #1 SMP Tue Mar 10 15:30:28 EDT 2015 x86_64 x86_64 x86_64 GNU/Linux

添加用户和更新组件安装

不要对用户添加指定group,好象有一个组件会产生问题,为啥我也正在研究中:

1
useradd gary -d /home/gary -m -s /bin/bash

在sudoers里添加内容,以便有sudo功能:

1
2
vi /etc/sudoers
gary ALL=(ALL) NOPASSWD: ALL

然后更新组件安装 (个人感觉cd ~比cd更清楚一些):

1
2
3
4
su gary
cd ~
sudo apt-get update && sudo apt-get upgrade
sudo apt-get install openjdk-7-jdk

virtualenv是一个python的沙箱环境,对于Cloudify是必备件:

1
sudo apt-get install python-virtualenv && sudo apt-get install python2.7-dev && sudo apt-get install git

准备ssh用的key文件

1
2
sudo apt-get install openssh-client
/usr/bin/ssh-keygen -t rsa

在.ssh目录把key文件添加一下

1
cd ~/.ssh && cat id_rsa.pub >> authorized_keys && cd ~

创建python的一个沙盒环境

1
virtualenv cfy3.1

然后激活它:

1
source cfy3.1/bin/activate

这个时候which python命令将会出现以下:

1
2
3
which python
(cfy3.1)gary@hostname:~$ which python
/home/gary/cfy3.1/bin/python

Cloudify CLI的安装

开始安装Cloudify命令行:

1
pip install cloudify==3.1

查看一下CLI版本号:

1
2
(cfy3.1)gary@li538-77:~$ cfy –version
Cloudify CLI 3.1.0 (build: 85, date: )

bootstrap Cloudify manager

1
2
git clone https://github.com/cloudify-cosmo/cloudify-manager-blueprints
cd cloudify-manager-blueprints

注意CLI版本与Manager一致性,不然的话对于3.1以后版本会出错。

1
2
git tag –l
git checkout 3.1

初始化cloudify本地工作目录,以安装插件,单机环境下主要是会去安装

1
2
3
cloudify-fabric-plugin
cd ~ && cfy init
cfy local install-plugins -p cloudify-manager-blueprints/simple/simple.yaml

更改inputs.json文件

在3.2以后json文件已更改成yaml文件,意思差不多
~/cloudify-manager-blueprints/simple里面有个模板了,把它复制一下到inputs.json吧。

1
2
3
4
5
6
7
8
9
10
cd ~/cloudify-manager-blueprints/simple && cp inputs.json.template inputs.json
vi inputs.json
{
"public_ip": "127.0.0.1",
"private_ip": "127.0.0.1",
"ssh_user": "gary",
"ssh_key_filename": "/home/gary/.ssh/id_rsa",
"agents_user": "ubuntu",
"resources_prefix": ""
}

曾经用~/.ssh/id_rsa来指向,而不是绝对文件路径,结果在docker安装环境下变乱了。还是统一成绝对文件路径吧。然后开始安装Cloudify Manager:

1
2
cd ~
cfy bootstrap -p cloudify-manager-blueprints/simple/simple.yaml -i cloudify-manager-blueprints/simple/inputs.json

这个速度的很慢,下载文件包超过1G,大部分托管在Amazon的s3下,大部分时间可以接通但是很慢,少量时间不通。更改一下simple.yaml里的文件链接可以快一点。我安装过程多次出现openjdk-7-jdk安装出错, 后来有兄弟指出这个https://bugs.launchpad.net/ubuntu/+source/openjdk-7/+bug/1165292,说是一个BUG,然后我把jdk安装过程提前了下,就没有出错了。
接下来,我们来试一下成不成:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
(cfy3.1)gary@localhost :~$ cfy status
Getting management services status... [ip=127.0.0.1]
Services:
+--------------------------------+---------+
| service | status |
+--------------------------------+---------+
| Riemann | running |
| Celery Managment | running |
| RabbitMQ | running |
| Cloudify Manager | running |
| Elasticsearch | running |
| SSH | running |
| Webserver | running |
| Cloudify UI | running |
| Syslog | running |
| Logstash | running |
+--------------------------------+---------+

恭喜兄弟,您已经安装了CLI, Manager了。下步就开始开载那个Nodejs+MangoDB做的酒瓶子web服务应用了。
您也可以打开页面欣赏一下:
http://106.186.18.77/#/blueprints

加载nodecellar

1
2
3
cd ~
git clone https://github.com/cloudify-cosmo/cloudify-nodecellar-example
cd *le && git checkout 3.1

开始加载nodecellar应用的blueprints, blueprints是Cloudify的核心中的核心,这个蓝本也就是应用布署以及伸缩监控的所有的细节。

1
cfy blueprints upload -b nodecellar -p ~/cloudify-nodecellar-example/singlehost-blueprint.yaml

会出现在以下内容,你也可以点开那个web console页面看到:

1
2
3
4
Validating /home/feng/cloudify-nodecellar-example/singlehost-blueprint.yaml
Blueprint validated successfully
Uploading blueprint /home/feng/cloudify-nodecellar-example/singlehost-blueprint.yaml to management server 127.0.0.1
Uploaded blueprint, blueprint's id is: nodecellar

有了blueprint之后,我们还要准备一下输入参数文件:

1
2
3
cd ~/cloudify-nodecellar-example/inputs
cp singlehost.json.template singlehost.json
vi singlehost.json

大致是这个样子:

1
2
3
4
5
{
"host_ip": "127.0.0.1",
"agent_user": "gary",
"agent_private_key_path": "/home/gary/.ssh/id_rsa"
}

然后用blueprints产生一个deployments。deployments是blueprints的一个实例,类似于class与object之间的关系。

1
cfy deployments create -b nodecellar -d nodecellar --inputs ~/cloudify-nodecellar-example/inputs/singlehost.json

系统提示如下,从nodecellar的blueprints生成了一个deployments,这个deployment名字也叫nodecellar(个人感觉同名不太好,下回我改):

1
2
Creating new deployment from blueprint nodecellar at management server 127.0.0.1
Deployment created, deployment's id is: nodecellar

再后就开始在本机中布署这个应用了:

1
cfy executions start -w install -d nodecellar

问题一

Cloudify Manager原生的bootstrap yaml一定是要到Amazon s3去取安装包的,这个相当不靠谱,所以建议把yaml里安装包链接更改一下:

1
2
3
4
5
6
7
8
9
cloudify_packages:
server:
components_package_url: http://cloudify3x.oss-cn-hangzhou.aliyuncs.com/cloudify-components_3.1.0-ga-b85_amd64.deb
core_package_url: http://cloudify3x.oss-cn-hangzhou.aliyuncs.com/cloudify-core_3.1.0-ga-b85_amd64.deb
ui_package_url: http://cloudify3x.oss-cn-hangzhou.aliyuncs.com/cloudify-ui_3.1.0-ga-b85_amd64.deb
agents:
ubuntu_agent_url: http://cloudify3x.oss-cn-hangzhou.aliyuncs.com/cloudify-ubuntu-agent_3.1.0-ga-b85_amd64.deb
centos_agent_url: http://cloudify3x.oss-cn-hangzhou.aliyuncs.com/cloudify-centos-final-agent_3.1.0-ga-b85_amd64.deb
windows_agent_url: http://cloudify3x.oss-cn-hangzhou.aliyuncs.com/cloudify-windows-agent_3.1.0-ga-b85_amd64.deb

以上链接是临时的喔,自已可以先下载到本地,这样就快多了,成功概率大大增加。

问题二

整个过程有多次要去国外链接加载查证什么的,有时会发生失败的现象,建议多次一两次,一般都可以成功。在加载nodecellar过程,mongodb出错,它自已重试一下,又成功了。这个原因是里面的等待时间不够所致。这个与机器的速度和等持时间量设定有关。有兴趣的同学可以更改一下时间量。

本文作者:Qiu Qingyu
版权声明:本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 CN许可协议。转载请注明出处!
本文永久链接:http://qiuqingyu.cn/2015/12/16/Cloudify安装手册/