关于chef安装rackspace的openstack,rackspace的官网和陈沙克的日志都有所介绍,但是他们都精简掉了很多操作,对于一个有经验的人来说大概已经足够,但是对于像我这样只装过devstack又没听说过chef的菜鸟来说,中间实在是一段黑暗的记忆啊,所以写了这个傻瓜式的文档,也算是向前辈们学习,回报社会。主要给一些像我一样刚接触openstack的新手用吧,本人经验比较少,有的内容不能保证正确,必然有错漏的地方,欢迎指正,也请轻拍。
陈沙克日志:http://www.chenshake.com/rackspace-rackspace-private-cloud-public-cloud-testing-openstack/
rackspace:http://www.rackspace.com/knowledge_center/article/installing-openstack-with-rackspace-private-cloud-tools
张华博客:http://blog.csdn.net/quqi99/article/details/21247111
首先要知道chef是什么:
chef是一个配置管理工具,给我一台机器,我定义这个机器上的mysql版本和运行状态,rabbitmq的版本和状态,包括它的配置文件,这些软件的状态组合起来,叫做食谱,就好像一顿大餐有那些菜,每种菜的口味。chef安装食谱上的规定,把这些软件调成了指定的状态之后,自动化的完成openstack的安装。有想详细了解的,可以看上面张华的博客中参考部分的第一篇,很详细。
环境准备:
需要一台机器做chefserver,两台机器做chefclient,一台client做openstack的controller,一台做compute,这些都可以用虚拟机。chefclient也可以只有一台,最后安装的时候像devstack一样allinone。
基本配置:
1.首先在各个机器上selinux干掉,这东西对我们openstack没用,他做的一些东西又会影响我们openstack的安装,顺便说一句,cloudstack也是得先把他干掉。恩,如果你忘记干掉他,安装到后面会遇到这样的问题:ERROR: Server returned error forhttps://localhost/cookbooks/apache2/1.8.5, retrying 1/5 in 3s
这个时候,你把selinux干掉也来不及了,还是报原来的错误,只好重新做。
关闭selinux的方法:
执行setenforce 0 临时关闭selinux
修改/etc/selinux/config 文件
将SELINUX=enforcing改为SELINUX=disabled2.在各个机器上配置hosts文件
/etc/hosts文件配置
在chefsever和chefclient上均配置主机名和对应的ip,如,服务器端配置如下:
3.配置无密码登录
ssh-keygen一路回车,制造密钥
ssh-copy-id osk2.localdomain 这里osk2.localdomain为上一步中hosts文件里所配置的主机名
在服务器端,对所有的客户端重复上一步操作,使得,服务器端能够无密码登录到所要控制的所有chefclient上4.防火墙
如果你不打算用openvswitch,neutron,直接干掉防火墙,如果用neutron的话,比较复杂,这里不说了,过段时间写另一篇
service iptables stop
chkconfig iptables off
如果你打算用,也可以先干掉,安装openstack的时候再打开,因为chefsever和client安装的过程是不需要这个的,开着防火墙,你会发现各种坑。5.网桥配置:
如果你打算使用openvwitch,参考上面张华的博客,如果只使用最简单的网络,如下即可
在服务器端和客户端均配置eth0桥接到br100,示例如下:
这里要注意网关和掩码,根据各人环境的不同而不同,一定要保证正确
chefserver安装:
1.执行通用配置
2.虚拟机上不能直接联网,配置yum代理使yum可用
3.再次关闭防火墙 service iptables stop
chkconfig iptables off
4.升级系统yum update
5.官方的安装脚本要联网下载一个195MB的rpm包,每次失败都要重新下载,我最后注释掉了脚本中的下载部分,把提前下载好的包更名为chef-server.rpm放到/tmp目录下,能够提高执行成功概率。我把rpm包和更改后的脚本都放到了我本机的httpd服务器上地址为:内网地址,省略
6.将chef-server.rpm包放到/tmp目录下,执行bash install-chef-server.sh
7.如果执行失败,删除/root/.chef/knife.rb重新执行
8.
git clone https://github.com/rcbops/chef-cookbooks.git
cd chef-cookbooks
git checkout <version> #这里检出Havana版本
git submodule init
git submodule sync
git submodule update
9.
knife cookbook upload -a -o cookbooks
knife role from file roles/*rb
如果一切正常,则安装成功,可以用浏览器进入https://服务器ip/ 查看chefserver是否一切正常
chefclient安装:
到各个client机器上运行此安装脚本即可http://内网地址省略/chef/install.sh,参考上面的博客
使用chef完成openstack安装:
服务器端配置:
(1).在服务器端新建文件内容如下面的/root/rpc2.json,注释不要包含进去,按个人配置不同更改,这个文件一定要仔细编辑,有问题的话,后面会报很多坑爹错误。
执行knife environment from file /root/rpc2.json创建一个名为rpc2的环境
{
"name": "rpc2", #environment name
"description": "Environment for Rackspace Private Cloud (Havana)",
"cookbook_versions": {
},
"json_class": "Chef::Environment",
"chef_type": "environment",
"default_attributes": {
},
"override_attributes": {
"nova": {
"network": {
"public_interface": "br100" #上一步配置的网桥名称
},
"libvirt": {
"virt_type": "qemu"
},
"networks": {
"public": {
"label": "public",
"bridge_dev": "eth0", #按上一步被桥接的网卡名配置
"dns1": "192.168.131.203", #取决于网络环境
"dns2": "192.168.131.203",
"ipv4_cidr": "10.27.23.0/27",
"bridge": "br100" #按公共配置在配置的网桥名配置
}
}
},
"mysql": {
"allow_remote_root": true,
"root_network_acl": "%"
},
"osops_networks": {
"nova": "10.27.23.0/24",#选取了已使用的网段可能会造成ip冲突
"public": "10.27.23.0/24",#实际上我已经遇到该问题
"management": "10.27.23.0/24"
}
}
}
(6)将osk2.localdomain加载到rpc2中
knife bootstrap osk2.localdomain -E rpc2
(7)将osk2.localdomain身份分配为ha-controller
knife node run_list add osk2.localdomain 'role[ha-controller1]'
同样的方法osk3.localdomain为role[single-compute]
如果只有一台客户机,分配为role[allinone]
客户端安装
(1)到osk2.localdomain这台机器上,,如果你的机器不能直接联网,记得设置代理:
/etc/yum.conf中添加proxy=http://ip:port,
export http_proxy= http://ip:port,
export https_proxy= https://ip:port,
(2)
gem源设置,更换为淘宝源,更稳定
/opt/chef/embedded/bin/gem sources sources --remove http://rubygems.org/
/opt/chef/embedded/bin/gem sources source -l
/opt/chef/embedded/bin/gem sources sources -a http://ruby.taobao.org/
/opt/chef/embedded/bin/gem sources source -l
(3)因为很多时候由于网络问题,下载不到key,导致安装失败,所以手动导入一下key
从http://内网省略,google可以下载下载以下文件,google被封可以试下必应英文版:
RPM-GPG-KEY-EPEL-6
RPM-GPG-KEY-foreman
RPM-GPG-KEY-puppetlabs
RPM-GPG-KEY-RDO-Havana
RPM-GPG-OBS
RPM-GPG-RCB
将这些文件拷入/etc/pki/rpm-gpg/目录
(4)
执行chef-client,如果报错,重新执行,因为经常是由于网络的问题导致中断,一般重复执行一次就会跳过,如果重复报一个错误,再去解决。通常都可以安装成功。