注意:理論的な質問がたくさんあります。
最近私はPuppet(および同様のシステム)について読んでいます。これは、私が信じているように、私の作業を非常に簡単にすることができます。しかし、私が「操り人形」にできるすべてのことを理解しようとしていますが、残念ながらできません。 「クラウド」またはHAクラスターを想像できます。これは、より多くのサーバーで同じ構成になっています。しかし、ワークステーションはどうですか?私は1台のPC(kvmを備えたcentos)、1台のノートブック(Fedora)、およびパーソナルサーバーを持っていますが、それをパペット化できますか(またはすべきですか?) (不)利点は何ですか?または、当社には数百台のサーバー(主にcentosを使用)がありますが、それぞれが少し異なります。 1つの場所に多くの構成を配置する方が良いかどうかを判断できません。私はあなたの意見やこのトピックへのリンクを喜んで提供します。
環境全体をパペット化できる程度は、いくつかの変数に依存します。
人形化できるすべての**********のものを人形化することは間違いなく可能ですが、そこに到達するには、人形化可能なデバイスに触れることができるすべての人からの適切な文化と賛同が必要です。一部のデバイスは、ワークステーションなどの方法でそのように管理することが基本的に困難であり、人形はステージングツールとして構成管理エンジンよりも優れています。
すべてがほぼ同じことを行うVMのフリートを管理している場合、Puppetは素晴らしいです。完全な勝利であり、そこに到達するための多くの努力はありません。
スペクトルの反対側には、私の最後の仕事で持っていたものがあります。それは、130のサービスを提供する200以上のサーバーであり、それらの少数のグループだけが複数のマシンでそれを行っていました。そのようなことを操っている企業(そして大学)は絶対にありますが、それは多大な労力と多くの賛同を必要とします。新しいマシンのデプロイプロセスの最初のステップnotは「OSのインストール」である必要がありますが、「マニフェストの作成」である必要があります。
最終的には、すべてのITスタッフの間で解決しなければならない努力と効率の文化的問題です。
すべてのシステム(またはそれらのサブセット)間で合理的に類似しているもの、またはfacter
から取得できる事実に基づいてテンプレートを作成できるものはすべて公正なゲームです。
本当にユニークなものはおそらく気にすべきではなく、ファイルバケットから構成を提供するだけです。
どちらのカテゴリーにも当てはまるのは、あなたの環境をよく知らなければ私たちが下すことができない決定です。それはあなたが理解するためのものです。
他の人がその理由をカバーしていると思うので、その方法を見てみましょう。誰かがPuppetを使ってあなたが望むことをする方法を理解することで、決定がより明確になると思います。
最初に基本的なケースを実行
Apache用のPuppetモジュールは、デフォルトではあまり機能しないはずです。 Apacheをインストールし、最小限の標準に設定して、サービスを開始します。サポートする必要のあるすべてのディストリビューションでこれを機能させます。
2番目に柔軟性を追加
仮想ホストを追加する必要があります。必要に応じて、ファイルをドロップしたり、conf.dまたはvhosts.d /ディレクトリのセットからファイルを削除したりできるシステムができあがります。モジュールの有効化または構成についても同じです。
ロールクラスまたはホストグループクラスを使用して、ビルディングブロックを結び付けます
Puppetを使用する最良の方法は、添加剤であることを確認することだと思います。上記の例を使用すると、
デフォルトのApacheモジュールをオーバーロードして、特定のホストまたはグループに必要なことを正確に実行するのではなく、これを処理する必要があるのは、ロールまたはホストグループクラスです。
class role::web_cust1 {
include Apache
Apache::vhost {'www.domain.com': }
Apache::vhost {'www.domain2.com': priority => '99', }
include php
include php-fpm
include mysql
}
再び添加剤。
Hieraに特別なケースを入れる
私はPuppet's Hieraに、Puppetのデータベースと考えて、特別なビットを保存させることの大ファンです。特定のホストまたはホストグループに特別な設定が必要な場合は、最初に適切なデフォルトをモジュールに追加して、通常のユーザーがそれについて知る必要がないようにします。次に、これらの特別なホストまたはホストグループのデータを挿入して、Hieraがデータを消費できるようにし、必要に応じてPuppetに渡します。
私のユースケースはリスニングポートです。一部のサーバーは、それらの前にワニスまたはhaproxyを持っています。デフォルトでは、PuppetモジュールのApacheはポート80を使用しますが、Hieraがデータを検出すると、そのデフォルトをオーバーライドします。
私は現在、Puppetizeとかなり類似したシステムとPuppetize allの間の移行期にあり、長期的にはPuppetizeeverythingがより良いアプローチであると確信しています。
Puppetマニフェストをバージョン管理すると(私たち全員がこれを行います)、インフラストラクチャのバージョン管理のすべての利点を得ることができます。あなたのチームは運用エンジニアになります。これは、同種の牧場と同様に、特別な単発システムにとって重要です。誰が何かを変更したか、いつ変更したか、正確な変更は何か、変更をロールバックする機能のログを取得します。
個人的には、Puppetを使用してすべての変更を強制的に行うと、変更についてより慎重に考えることができることもわかります。マニフェストを書いているときは、通常コマンドラインでハッキングするよりも、それぞれの変更に注意を払っています。
Puppetモジュールも改善されます。複数のNginxモジュールがありますか?たぶん、それはあなたのNginxモジュールがそれほど優れていないことを意味し、あなたはすべての特別なニーズを処理するのに十分柔軟にする必要があります。少なくとも、「カスタム」モジュール用に拡張するコアNginxモジュールに類似点を抽象化します。
さらに、災害が発生したときに、すべての特別なニーズのサーバーを(構成に関して)現在の状態に復元できるとどの程度自信がありますか?ファクトリーUbuntuサーバーを内部Wikiに取り込むために必要なすべての変更がPuppetizedの場合、昨日のTomcatメモリのTweak by Bobを含めて、Wikiの現在の状態を簡単に再構築できます。
最後に、これは本当に難しい場合があります。非常に異なるサーバーを多数管理すると、時間をかけて正しく実行しないと、ハッキングされたPuppetコードが発生する可能性があります。 Puppet Enterpriseを使用していない場合は、hieraやForemanなどのENCを検討して、データをマニフェストから分離できるようにしてください。毎日何か他のものを操ります。これがPuppetでどのように機能するかを説明する間、同僚のドライブを持ってください。それぞれの変更が簡単になります。