在 CentOS 6.2 上安装和配置 Foreman

服务器(物理机器和虚拟机)多了以后需要工具来管理,经常登陆系统后不知是在虚拟机上还是在物理机上?如果在虚拟机上这个虚拟机运行在哪个服务器节点(host)上?如果在物理机上运行在什么配置的物理机上?运行在 Dell 刀片服务器上还是 IBM 超级计算机上,SUN 服务器上还是普通 PC 上?这个系统 IP 是多少?域名是啥?有几个网卡?分别走的哪个交换机?有没有连到 SAN 存储等等?无数问题,我们需要一个统一查看和管理所有机器(物理机和虚拟机)的这么一套工具。Foreman 就是这么一个集成了 Puppet 的统一机器生命周期管理工具。

Foreman 功能很强大,可以解决硬件或虚拟机上线到运行 Puppet 之间的一切问题,比如安装操作系统、配置网络、配置 DNS、Puppet 客户端安装认证等等,完成必要的上线工作后,Foreman 就把剩下的工作交给了 Puppet,Puppet 完成剩下的服务器和服务配置工作,这样就完美的完成了从服务器上线到服务上线的全过程,而且是自动的。这里主要介绍用 Foreman 获取(配合 Puppet Facts)和查看服务器信息。

加入 foreman 官方源后安装软件包:

# cat > /etc/yum.repos.d/foreman.repo << EOF
[foreman]
name=Foreman Repo
baseurl=http://yum.theforeman.org/stable
gpgcheck=0
enabled=1
EOF

# yum install foreman

拷贝 foreman 里面的 report 例子到 puppet 下,并更改 $foreman_url 指向这台安装 foreman 的服务器:

# cp /usr/share/foreman/extras/puppet/foreman/templates/foreman-report.rb.erb \
/usr/lib/ruby/site_ruby/1.8/puppet/reports/foreman.rb

# vi /usr/lib/ruby/site_ruby/1.8/puppet/reports/foreman.rb
...
$foreman_url='http://foreman.vpsee.com:3000/'
...

配置 puppetmaster 服务端,编辑 puppet.conf 配置文件:

# vi /etc/puppet/puppet.conf
[main]
...
    reports=log, foreman
...

# /etc/init.d/puppetmaster restart

配置 puppet 客户端,编辑 puppet.conf 配置文件,确保 report 是 true:

# vi /etc/puppet/puppet.conf
...
report = true
...

初始化 foreman 数据库(这里 foreman 默认使用 sqlite,简单、不用任何配置,如果想用 mysql 的话可以参考官方帮助文件):

# cd /usr/share/foreman
# RAILS_ENV=production rake db:migrate

启动 foreman:

# /etc/init.d/foreman start

我们把 foreman 和 puppetmaster 安装在同一个机器上,每次运行这个脚本都会导入新的 facts:

# cd /usr/share/foreman
# rake puppet:import:hosts_and_facts RAILS_ENV=production
(in /usr/share/foreman)
Importing from /var/lib/puppet/yaml/facts
Importing monitor.vpsee.com
Importing dev.vpsee.com
Importing intranet.vpsee.com
Importing datasrv.vpsee.com
Importing rocket.vpsee.com
Importing grid.vpsee.com
Importing proxy.vpsee.com
Importing mail.vpsee.com

导入成功后打开浏览器访问 http://foreman.vpsee.com:3000 就可以看到 foreman 界面了:
foreman