我想设置一个额外的 puppet master,但只有 1 个 puppet master 处理 CA 服务器。我已经按照此处的文档进行了设置:
http://docs.puppetlabs.com/guides/scaling_multiple_masters.html
我已经配置了我的第二个傀儡大师如下:
[main]
...
ca = false
ca_server = puppet-master1.test.net
Run Code Online (Sandbox Code Playgroud)
我正在使用乘客,所以我有点困惑 virtual-host.conf 文件应该如何查找我的第二个 puppet-master2.test.net。这是我的(根据 Shane Maddens 的回答更新):
LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-3.0.18/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-3.0.18
PassengerRuby /usr/bin/ruby
Listen 8140
<VirtualHost *:8140>
ProxyPassMatch ^/([^/]+/certificate.*)$ https://puppet-master1.test.net:8140/$1
SSLEngine on
SSLProtocol -ALL +SSLv3 +TLSv1
SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:-LOW:-SSLv2:-EXP
SSLCertificateFile /var/lib/puppet/ssl/certs/puppet-master2.test.net.pem
SSLCertificateKeyFile /var/lib/puppet/ssl/private_keys/puppet-master2.test.net.pem
#SSLCertificateChainFile /var/lib/puppet/ssl/ca/ca_crt.pem
#SSLCACertificateFile /var/lib/puppet/ssl/ca/ca_crt.pem
# If Apache complains about invalid signatures on the CRL, you can try disabling
# CRL checking by commenting the next line, but …Run Code Online (Sandbox Code Playgroud) 快速简介 - 出于测试目的,我在 5 个节点(Debian Squeeze + puppet 2.7.20-1puppetlabs1)上安装了 puppet 代理,并在 1 个服务器(相同版本)上安装了 puppet master。
在每个清单的 puppetmaster 端,我检查是否 $::osfamily == 'Debian'。有时我也使用 $::fqdn,并检查它是否不为空。
问题是每天随机时间我都会收到来自 puppetmaster 的邮件,说他无法为其中一个节点编译目录。例如:
Fri Jan 18 19:18:24 +0100 2013 Puppet (err): Could not retrieve catalog from remote server: Error 400 on SERVER: Not supported osfamily at /etc/puppet/modules/system/manifests/skel.pp:20 on node mynodeX
Fri Jan 18 19:18:24 +0100 2013 Puppet (notice): Using cached catalog
Fri Jan 18 19:18:24 +0100 2013 Puppet (err): Could not retrieve catalog; skipping run
Run Code Online (Sandbox Code Playgroud)
另一个例子,来自 puppetmaster 日志: …
由于搞砸了,我必须重新生成客户端和服务器证书。
据我所知,主证书是自动生成的。
所以我在客户端生成了密钥:
MASTER # puppet cert clean --all
Notice: Revoked certificate with serial 2
Notice: Revoked certificate with serial 6
Notice: Removing file Puppet::SSL::Certificate puppet.x.com at '/var/lib/puppet/ssl/ca/signed/puppet.x.com.pem'
Notice: Removing file Puppet::SSL::Certificate puppet.x.com at '/var/lib/puppet/ssl/certs/puppet.x.com.pem'
Notice: Removing file Puppet::SSL::Key puppet.x.com at '/var/lib/puppet/ssl/private_keys/puppet.x.com.pem'
Notice: Removing file Puppet::SSL::Certificate efikamx-9ba3ab.x.com at '/var/lib/puppet/ssl/ca/signed/efikamx-9ba3ab.x.com.pem'
Notice: Removing file Puppet::SSL::Certificate efikamx-9ba3ab.x.com at '/var/lib/puppet/ssl/certs/efikamx-9ba3ab.x.com.pem'
puppet agent --no-daemonize --onetime --verbose --waitforcert 60
notice: Did not receive certificate
info: Caching certificate for efikamx-561a37.botnet.corp.flatturtle.com
err: Could not retrieve catalog from remote …Run Code Online (Sandbox Code Playgroud) 我只是在设置一个新的 puppet 服务器并想找出最佳实践目录结构是什么?我在不同的论坛和木偶网站上四处看看,让我印象深刻的是每个人似乎都以不同的方式展示它。没有推荐的方式和目录结构吗?
到目前为止,我有:
puppet/
+ manifests/
+ site.pp
+ nodes/
+ production/
+ nodes.pp
+ dev/
+ nodes.pp
+ modules/
Run Code Online (Sandbox Code Playgroud)
在这之后我有点卡住了:)
所以我想我想把它分成服务器角色,比如“webserver”,它有一个服务,比如“httpd”或“nginx”
什么是最好的方法来解决所有这些问题,因为它让我发疯,似乎没有一种首选方法可以做到这一点,或者我可能只是在所有其他信息中错过了它:(
这是您构建目录的方式吗?
puppet/
+ manifests/
+ site.pp
+ nodes/
+ production/
+ nodes.pp (Nodes have roles)
+ dev/
+ nodes.pp
+ roles/
+ web-server-apache.pp (Roles have modules)
+ modules/
+ web-server-apache/
+ manifests/
+ init.pp (This is where "httpd" gets defined and installs latest httpd)
+ templates/
+ files/
Run Code Online (Sandbox Code Playgroud) 我是新手puppet,在学习它的过程中,我创建Puppet Master并Puppet Slave设置并配置了一个mysql模块来安装 mysql Puppet client。下面是清单文件。
class mysql {
package { ["mysql-server-5.5", "libaio1", "libdbd-mysql-perl", "libdbi-perl", "libhtml-template-perl", "libmysqlclient18", "mysql-client-5.5", "mysql-common", "mysql-server-core-5.5"]:
ensure => present,
allowcdrom => 'true',
}
}
Run Code Online (Sandbox Code Playgroud)
该package资源包含 mysql-server 的所有依赖项。但我收到以下错误。
Building dependency tree...
Reading state information...
The following extra packages will be installed:
mysql-common
The following NEW packages will be installed:
libmysqlclient18 mysql-common
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get …Run Code Online (Sandbox Code Playgroud) 我们正在从包含所有配置的整体木偶存储库迁移。这个 repo 包含的东西不应该出现在每个节点上,因此基于 puppetmaster 的系统似乎是适当隔离事物的最佳方式。
我遇到的问题是,当复制到本地节点并puppet apply /etc/puppet/manifests/site.pp在其上运行时,相同的 repo 可以正常工作。我们的安装运行非常干净。
当我将 puppet repo 放在 puppetmaster 上并让代理签名时,除了将它的本地目录报告给 puppetmaster 之外,它似乎没有做任何事情。
有一段时间,我无法重现执行此操作的配置,我们的一个自建模块抛出了一个错误,表明它正在尝试从本地机器的modules目录中复制文件,而不是 puppetmaster应该喜欢。
这表明在为本地使用和通过 puppetmaster 构建存储库时,可能存在模块和清单语法差异。
如果有任何差异,它们是什么,或者转换工作的主要跳闸点是什么?
在/etc/puppet/puppet.conf对主文件:
[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
factpath=$vardir/lib/facter
pluginsync=true
# Set up Environments
## Each environment has a dedicated 'modules' directory under /environments/ from
## which puppet will preferentially pull. Otherwise, it'll use the top level
## 'modules' directory. That is where common code goes.
[master]
manifest=$confdir/manifests/site.pp
modulepath=$confdir/environments/$environment/modules:$confdir/modules
ssl_client_header= SSL_CLIENT_S_DN
ssl_client_verify_header …Run Code Online (Sandbox Code Playgroud) 我有一个相当简单的 puppet 设置,一个主节点和一个节点,都运行 Debian Squeeze 6.0.4。我有两台机器的 DNS 条目,分别是客户端和主机。客户端和主服务器的 DNS 条目在两台机器上都正确解析为正确的 IP。
在我的客户端上,我有这样的配置:
[main]
server = master.example.org
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
factpath=$vardir/lib/facter
pluginsync=true
templatedir=/var/lib/puppet/templates
Run Code Online (Sandbox Code Playgroud)
根据 /var/log/syslog 中的消息,密钥交换似乎失败了:
localhost puppet-agent[11364]: Could not request certificate: getaddrinfo: Name or service not known
Run Code Online (Sandbox Code Playgroud)
为什么分辨率不仅仅适用于木偶?
我是 puppet 的新手,正在尝试创建清单,该清单将请求所有代理更新所有当前安装的 yum 包。
在清单中描述这一点的最佳方式应该是什么?
我尝试重新启动我的木偶大师,但错误仍然存在。
也可以从所有尝试加入的傀儡特工身上看到。
puppet agent --server puppet.example.com --waitforcert 60 --test --verbose
Error: Could not request certificate: Error 400 on SERVER: header too long
Run Code Online (Sandbox Code Playgroud) 我刚刚开始使用 Puppet,我的测试 site.pp 文件中有以下代码:
class { 'account': {
'danny':
home_dir => '/home/danny',
groups => [ 'sudo', 'users' ],
password => 'password'
}
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用Puppet Forge的帐户模块。我已经检查过模块是否安装正确。
使用上述代码时给出的错误是:
错误:无法从远程服务器检索目录:服务器上的错误 400:无法解析环境生产:“{”处的语法错误;在节点 testpuppet.domain.io 上的 /etc/puppet/manifests/site.pp:12 处应为“}” 警告:未在失败的目录上使用缓存错误:无法检索目录;跳过运行
site.pp 的第 12 行是:
class { 'account': {
Run Code Online (Sandbox Code Playgroud)
文档给出了以下示例:
account {
'sysadmin':
home_dir => '/opt/sysadmin',
groups => [ 'sudo', 'users' ],
ssh_key => 'AAAAB3NzaC1yc2EAAAABIwAAAQEArfQmMkvtWRnwas3DIti9qAuSFQXKcE0kdp5f42PP8l2kTytJPPWp5T/q8PXDQ2d2X5KplMCMDiUQkchqhmDp840jsqBQ9iZPejAjv3w2kITgScFNymAcErtzX52iw4lnUyjZzomCW8G3YthQMaRm2NkI4wcVcjzq+SKyTfzrBoH21RgZlfcx+/50AFRrarpYqel9W5DuLmmShHxD8clPS532Z/1X+1jCW2KikUhdo98lxYTIgFno05lwFOS9Ry89UyBarn1Ecp1zXpIBE7dMQif3UyLUTU9zCVIoZiJj4iO5lemSSV0v8GL97qclBUVJpaCpc4ebR7bhi0nQ28RcxQ==',
comment => 'SysAdmin user',
}
Run Code Online (Sandbox Code Playgroud)
我使用的所有其他模块都在一个类中,例如 NTP 模块:
class {
'::ntp':
servers => [
'0.uk.pool.ntp.org',
'1.uk.pool.ntp.org',
'2.uk.pool.ntp.org',
'3.uk.pool.ntp.org'
],
}
Run Code Online (Sandbox Code Playgroud)
使用 …