安装
以在Ubuntu server 14.04.2 TLS 为例:
-
设置机器名。 编辑
/etc/host
以修改主机名,因为puppet是基于证书的,证书中包含主机名; -
更新包源。
echo -e "deb http://apt.puppetlabs.com/ lucid main\ndeb-src http://apt.puppetlabs.com/ lucid main">>/etc/apt/sources.list.d/puppet.list
- 对安装源进行一个检验。
更新失败时才需要执行该命令apt-key adv --keyserver keyserver.ubuntu.com --recv XXXXXXXX
- 系统更新 和安装
apt-get update && apt-get dist-upgrade
- 在控制节点上安装puppetmaster:
apt-get install puppetmaster
- 在客户端安装puppet:
apt-get install puppet
- puppet会监听8140端口,如果puppetmaster开启了防火墙需要做以下配置
iptables -A INPUT -p tcp --dport 8140-j ACCEPT
-
执行命令验证:
netstat -lntup
root@master:/home/andy# netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:8140 0.0.0.0: LISTEN 27918/ruby
tcp 0 0 0.0.0.0:22 0.0.0.0: LISTEN 21070/sshd
tcp6 0 0 :::8080 ::: LISTEN 1286/java
tcp6 0 0 :::22 ::: LISTEN 21070/sshd
tcp6 0 0 127.0.0.1:8005 :::* LISTEN 1286/java -
验证
- 在master上创建一个file资源
- 客户端发起验证:
puppet agent --server xxxx(master) --test
- 服务器完成验证:
puppet cert --list
pupper cert sign xxx(client)
- 再次在客户端发起验证就可以看见验证成功了。
经验总结:
- Ubuntu 下安装很简单,不需要预先安装ruby等,系统更新后直接安装puppet;
- 安装完后是不存在site.pp 文件的,需要创建:
/etc/puppet/manifests/site.pp
,作为站点的主模块配置文件。
一般的site.pp
很简单,引入Nodes节点下客户端文件即可import"nodes/*.pp"
- 关于“模块”
/etc/puppet/manifests的文件结构:|-- nodes
|`-- client.pp
`-- site.pp
node 'client'
{
include stdlib
include sysup
}
上面说的模块,就是你需要puppet做的事情,比如拷贝文件,修改文件,安装package,执行命令等。
每件“事情”就是一个单独的“模块”。 - 怎么定义“模块”?
首先来看文件结构:/etc/puppet/modules
.
|-- ntp
||-- files
||-- manifests
||`-- init.pp
| `-- templates
|-- sim
||-- files
||`-- simf.sh
| `-- manifests
|`-- init.pp
/etc/puppet/modules
有很多子目录,每个子目录就是你要需要puppet做的一件事情
,比如你要安装ntp, 那么你就需要创建一个ntp文件夹,该文件夹下又需要包含manifests(必须),files, templates这三个文件夹。
在manifests文件夹下,新建一个名叫 init.pp 的文件(必须),这里将详细描述做这件事情
的经过。比如 ntp 下的 init.pp:class ntp
{
package{
"ntp":
ensure=>installed,
}
}
注意:类名必须和模块名称一致!!!
- 怎样让puppet 修改node上的文件呢?
一般的资源 file 只能用来创建,其content属性的内容将会 覆盖 已有文件的内容。
解决办法是给puppet安装stdlib。puppet module install puppetlabs-stdlib
file_line{"newline":
path=>"/etc/apt/sources.list.d/cloudarchive-kilo.list",
line=>"add a new line",
}
具体可以参考:stdlib
- 错误
Could not request certificate: SSL_connect returned=1
Error:Couldnot request certificate: SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed:[certificate signature failure for/CN=master]
也要注意主从机器之间时间是否同步的问题。 - 怎样自动签发证书
当客户节点增多时,每个节点向主节点申请证书似乎很愚蠢。
可以设置master自动签发所有的证书,我们只需要在/etc/puppet
目录下创建autosign.conf
文件并添加下面内容。(不需要修改 /etc/puppet/puppet.conf文件,因为默认的autosign.conf 文件的位置没有修改)*.example.com
example.com
的机器的请求都自动签发证书,见参考 - 创建user后无法登陆
使用user资源添加用户时,属性password不是明文,需要用工具grub-md5-crypt
来生成。
但需要安装 grub, 生成的password用单引号包裹:user{"andy":
ensure=>"present",
uid=>666,
gid=>666,
password=>'$1$PzftN$XANlscGctdGF3VjXH3k9q0',
home=>"/home/andy",
shell=>"/bin/bash",
managehome=>true,
}
- 如何主动更新
节点每次更新都要运行 puppet agent --test, 但是如果上百上千台nodes怎么办?
可以采用puppet kick
这种 master主动推送更新并让node执行的方法。例如:puppet kick -p 10 client1 client2 client3
2. 设置节点的防火墙准许在端口8139上接入;3.在节点的auth.conf
的开头加入以下代码:# Allow puppet kick access
path /run
method save
auth any
allow workstation.example.com
allow *
准许任何主机触发puppet的执行。
关于主动更新,或者可以用 MCollective Puppet Agent。如何使用,需要更多的研究和实践。