是否可以设置puppet
成清单中的更改仅在特定时间内应用,以便我们的服务器最终会在我们决定时发生停机?
谢谢
答案1
我只是想解决这个问题...有几种方法......
- 使用 cron。如果您的操作系统支持 cron.d 条目,请通过 Puppet 分发 puppet.cron 文件。随附的清单将包含一些确保 Puppet 守护进程已关闭的内容。如果您有很多服务器,请使用 bash 函数随机化 cron 拉取时间以减少主服务器上的负载。另请参阅关于此主题的 Puppet wiki。
我使用的模块:
class puppet_cron {
file { '/etc/cron.d/puppet.cron':
ensure => file,
owner => root,
group => root,
mode => 644,
source => "puppet:///modules/puppet_cron/puppet.cron",
}
service { 'puppet':
ensure => stopped,
enable => false,
}
}
一个示例 puppet.cron:
# puppet.cron
#
# Run puppet in one-time mode during daily downtime window.
#
# Puppet check window for Monday through Thursday
*/15 16-19 * * 1-5 root exec /usr/sbin/puppetd --no-daemonize -o
有一个Puppet 计划元参数它允许您列出应按类别评估清单的时间。请参阅:https://serverfault.com/a/341865/13325
我最近读了一本书,书中建议使用 Git 作为清单分发方法,以便扩展并减少主服务器上的负载。这意味着您可以更精细地控制调度。
答案2
是的,只需将运行 puppet 的 cronjob 设置为仅在特定时间运行。将 puppet 作为守护进程运行是一个非常糟糕的想法。我们使用服务器的 IP 地址作为散列函数的密钥,将我们的 cronjob 分布在 Puppet 运行的整个时间段内,以避免出现惊群问题。