web-dev-qa-db-ja.com

Puppet:特定の時間帯にのみ変更を許可しますか?

マニフェストの変更が特定の時間にのみ適用されるようにpuppetを設定して、サーバーで最終的なダウンタイムが発生するようにすることは可能ですか?

ありがとう

7
Industrial

私はこの問題を解決しなければなりませんでした...いくつかのアプローチがあります...

  • Cronを使用します。 cron.dエントリをサポートするOSを使用している場合は、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を使用することを提案した本を読みました。これは、スケジューリングをよりきめ細かく制御できることを意味します。

9
ewwhite

はい、puppetを実行するcronジョブを特定の時間にのみ実行するように設定するだけです。 puppetをデーモンとして実行することは本当にひどい考えです。サーバーのIPアドレスをハッシュ関数のキーとして使用して、Puppetの実行期間全体にわたってcronジョブを分散させ、雷鳴の群れの問題を回避します。

5
womble