web-dev-qa-db-ja.com

小さな男たちはどうやって人形を効果的に学び、使うことができますか?

6か月前、私たちの非営利プロジェクトでは、サーバーの数が今から1年後に大幅に増加すると予想しているため、システム管理をPuppet制御の環境に移行することを決定しました。

決定が下されて以来、私たちのIT担当者は少し頻繁に少し煩わしくなりすぎています。彼らの最大の反対は:

  • 「私たちはプログラマーではなく、システム管理者です」;
  • モジュールはオンラインで入手できますが、多くは互いに異なります。車輪は頻繁に再発明されていますが、どの車輪が目的に合うかをどのように決定しますか。
  • 私たちのリポジトリのコードは、マニフェストや、以前に自分で作成した可能性のあるモジュールを再帰するために何かがどのように機能するかを見つけるには、十分に透過的ではありません。
  • 1つの新しいデーモンは新しいモジュールを書く必要があり、規則は他のモジュールと同様でなければならず、難しいプロセスです。
  • 「それを実行して、どのように機能するか見てみましょう」
  • コミュニティモジュールのほとんど知られていない「拡張機能」のトン:「trocla」、「augeas」、「hiera」...システム管理者はどのように追跡できますか?

大規模な組織がシステム管理者をPuppetコースに派遣してPuppetマスターになる理由がわかります。しかし、小規模のプレーヤーがコースに行かず、基本的にブラウザーとエディターを介してそれを学習しない場合、どのようにしてPuppetをプロレベルまで学ぶことができるでしょうか?

109
drumfire

私は新しいインフラストラクチャを展開する前にPuppetを使い始め、そのトピックに関する( よく評価された )本を購入しました。ほとんどの人が実際にプロの人形の訓練を受けているとは思いません。自分の環境に合わせてプロセスを形作ることができるようになるまで、私は例に取り組みました。これは2011年12月だったので、数週間以内に基本を理解し、制作フレームワークを導入することができました。私は CFEngine の背景を持つ構成管理は初めてではありませんでしたが、システム管理者の懸念の多くは共鳴します。私はミスをして、何度かリファクタリングをしなければなりませんでしたが、物事はうまく機能していました。

あなたのポイントに関するいくつかのメモ...

  • 従来のシステム管理の役割は変化しています。適応または取り残される。私はシステムエンジニアとして成功していますが、同様に(たとえばPythonを学習して)再構築する必要があります。個々のサーバーへの焦点は、仮想化によるハードウェアの抽象化とパブリックおよびプライベートクラウドサービスが勢いを増すにつれて減少します。これは、システムタスクの自動化と、構成管理を使用して多数のサーバーを制御することを意味します。 DevOps concepts をミックスに追加すると、 お客様/エンドユーザーの期待 と要件が変化していることがわかります。

  • オンラインで利用できるPuppetモジュールは、スタイルと構造が異なります。そうです。多くの重複、冗長性、そして重複した取り組みを見ました。私が一緒に働いた開発者の一人は、「あなたがオンラインで機能するものを探している間にあなた自身のツールを開発することができたでしょう!」 Puppetはbest-practices正しい方法アプローチ。

  • 物事がどのようにつながっているかを感じ取れるように、ドキュメントを多用します。不安定な定義と標準の方法の欠如を考えると、構成管理構造は実際に環境に固有です。その透明性は内部で開発されなければならないでしょう。

  • サーバーとロールの構成方法によっては、モジュールを複製して新しいデーモンに対応したり、既存のマニフェストにサービスを追加したりするのはかなり簡単だと私は思います。

  • より大きなサーバーのグループに変更をプッシュする前に、単一のターゲットのテストに多くの時間を費やしました。代表的なサーバーでpuppetdを手動で実行すると、変更をデバッグしてその影響を評価できました。多分それは少し保守的ですが、それは必要でした。

  • コミュニティモジュールにどれだけ依存するかわかりません。私は いくつかの作業にAugeasを使い始める をしなければならなかったし、それがCFEngineで当たり前と思っていた機能であるという事実を嘆いた。

全体として、Puppetに関しては、明確に定義された標準がないように感じます。 Puppetmasterでディレクトリ構造を整理する方法、証明書の署名を管理する方法を理解し、どこでも 適切な逆DNS を取得する方法を理解するのに苦労しました Puppetを適切にスケーリングする 環境と、コミュニティモジュールを活用するタイミングと自分で構築するタイミングの理解。これは考え方の変化であり、それによってシステム管理者がパニックになるのは明らかです。ただし、これもゼロから構築されたソリューションであるため、ツールを評価する余裕がありました。この方法を採用するという決定は、マインドシェアとパペットの背後にある勢いに基づいていました。何か新しいことを学ぶのは努力に値しました。

このサイト も良いリソースです。

101
ewwhite

以前の仕事では、Puppetのパイロット実装を実行するタスクが割り当てられました。今、私はRubyでなくてもプログラミングのバックグラウンドを持っているので、他の人ほど問題はありません。

ただし、Puppetはdeclarativeであり、命令型ではないため、非伝統的なパラダイムの経験がないprogrammersはPuppetにも問題があることに注意してください。この意味で、Puppetは他の構成ファイルとほとんど同じように機能します。つまり、あなたは物事がどうあるべきかを言い、残りはPuppetが処理します。

パイロットの後、私はPuppetを使用して他の12人の管理者をトレーニングする機会があり、さらに2つのイベントでそれについてプレゼンテーションを行いました。その経験からの私の見解は、一部の管理者はそれに取り掛かり、一部は取り掛かりませんでした。これらはすべて、プログラミングスキルやさまざまなレベルの専門知識を持たない従来の管理者でした。

Puppetにはconstantの練習が必要なことに気づきました。訓練を受け、モジュールを作成し、1か月または2か月何か他のことをして過ごした人々は、ほとんどスキルのない人形に戻ってきました。毎週小さなことを続けている人は、能力を失うことはありませんでした。

これらの2つの観察に基づいて、毎週(できれば少なくとも2〜3回)全員がPuppetクラス、定義、またはモジュールを追加し続けることを確認することをお勧めします。それでも慣れない人は、それを行うためのスキルが本当に不足しているかもしれません。

繰り返しになりますが、もし人形が上から彼らに課せられたなら、彼らは単に彼らが彼らの仕事をする方法に侵入する経営者として知覚するものに単に反応しているかもしれません-実際、それは十分に真実でしょう。 which使用する構成管理システムを選択させると状況が改善する場合があります。ここにいくつかの選択肢があります:

  • [〜#〜] ansible [〜#〜] :これは新しいですが、シェルコマンドとsshに基づいているため、従来のシステム管理者を引き付ける可能性があります。
  • シェフ :多分彼らの問題は宣言的なスタイルであり、その場合、シェフがRubyの経験があればより良いでしょう。
  • SaltStack :Pythonベース、およびオープンソース
  • CFEngine :古い、高速、伝統的-それらの理由で勝つかもしれません。
29

私は2年間、私が唯一のシステム管理者である小さな店でPuppetを少し使用しています。私が持っていた最大のハードルは、ソフトウェアを適切に開発する方法を学ぶことです。私が開発者に十数回しないように言った何かを台無しにしない一週間はありませんでした。チェックインしたコードが多すぎた、チェックインを分割しなかった、タグ付けしなかった、分岐しなかった、構文チェッカーを実行しなかった、標準を使用しなかった、など。私は以下のいくつかをお勧めします。

  1. 方法がわからない、またはうまく機能していないソフトウェアを開発していることを認識してください。新しいのでこれは予想されます。
  2. コードとしてのインフラストラクチャーは現実であり、こぶを乗り越えれば非常に強力です。私は何人かの開発者を招待し、現在の開発プロセス(またはその欠如)を示し、眉を上げても怒らないで、提案を真剣に受け止めます。完全に不適切でない限り、開発者が使用するシステムとプロセスを使用することをお勧めします。
  3. Puppetサードパーティモジュールは、90%の時間を消費します。私はそれらを読みます。それらからアイデアを盗みます。大幅な編集がなければ、それらを自分のシステムに取り込むことはありません。しかし、いくつかの素敵な機能を追加するパペットstdlibをプルします。
  4. augeasとhiera。これらの2つを学びます。 1つ目は、既存のファイルを所定の場所で複雑に編集できることです。 2つ目は外部データストアです。
  5. コードをデータから分離します。これは、学ぶのが難しい概念の1つです。 Monitoring Hostsなどの値をモジュールコードにハードコーディングするのは適切ではありません。それらをモジュールが消費できるデータストア(db、yaml(Hieraはこれをデフォルトにする)、csvなど)に配置するのは良いことです。例は、Mysqlを使用するWebアプリケーションです。これにより、コードとデータを個別にプッシュできます。これにより、開発プロセスが簡単になります。
  6. パペットパーサーの検証および puppet-lint コードチェックインプロセスの前または後の一部として。また、速度に慣れてきたら、rspecテストをお勧めします。
  7. スタイルガイド/コード標準を記述して使用します。 「Apacheをインストールするコードはどこにあるのか」はよくある問題です。モジュールがほとんど同じであれば、それは簡単なはずです。

要約すると、私はこれらすべての問題にぶつかったので、私のシステム管理者の友人のほとんどがそうです。構成管理システムの使用に慣れるには、しばらく時間がかかります。一度あなたはそれなしでどのように生きてきたのか不思議に思うでしょう。 「サーバーにログインして、手動で変更を加えますか?」

11
kashani

6か月前、私たちの非営利プロジェクトでは、サーバーの数が今から1年後に大幅に増加すると予想しているため、システム管理をPuppet制御の環境に移行することを決定しました。

早めに始めるのはいい考えのように思えます-Puppetは単なる構成管理ではなく、ドキュメントの形式です。

決定が下されて以来、私たちのIT担当者は少し頻繁に少し煩わしくなりすぎています。

彼らは態度の調整が必要です。

"We're not programmers, we're sysadmins";

繰り返しますが、態度。サーバーのconfファイルを作成できますか?ニーズと複雑さevolvesとして、テンプレート/「プログラマー」の要素を容易に使用できます。

モジュールはオンラインで入手できますが、多くは互いに異なります。車輪は頻繁に再発明されていますが、どの車輪が目的に合うかをどのように決定しますか。

難しい質問です-私は常にほとんどのpuppetlabsモジュールを好みます-それでも、私はそれほど多くを使用しません。確かに判断の呼びかけ。私の意見では、一部のモジュールは「フリルすぎ」です。

私たちのリポジトリのコードは、マニフェストや、以前に自分で作成した可能性のあるモジュールを再帰するために何かがどのように機能するかを見つけるには、十分に透過的ではありません。

これは操り人形の問題のようには聞こえませんが、組織またはドキュメントの問題ですか?

1つの新しいデーモンは新しいモジュールを書く必要があり、規則は他のモジュールと同様でなければならず、難しいプロセスです。

管理が十分に簡単であれば、そのデーモンはクラスになる可能性があります。あなたが慣習で何を意味するのか分かりません、人形はあなたに慣習をかなり強制しますね?それとも、コードのフォーマットに沿って話しているのでしょうか?

"Let's just run it and see how it works"

あなたがそれをゆっくりと安全に取れば、それは考えの悪いことではありません。私はまだVM=で始まり、要点を取得します。

コミュニティモジュールのほとんど知られていない「拡張機能」のトン:「trocla」、「augeas」、「hiera」...システム管理者はどのように追跡できますか?

postfix、exim、sendmail、mysql、postgresql、iftop、iptraf、Perl、Perlモジュール..必要なものを選んでそれを使用しますか?この音は再び態度のようなものだと思います...

大規模な組織がシステム管理者をPuppetコースに派遣してPuppetマスターになる理由がわかります。しかし、小規模のプレーヤーがコースに行かず、基本的にブラウザーとエディターを介してそれを学習しない場合、どのようにしてPuppetをプロレベルまで学ぶことができるでしょうか?

私はコースに参加していません-私はamプログラマーよりもシステム管理者の方が多いのですが、何かを成し遂げるにはプログラミングスキルはそれほど必要ではないことがわかりました。

Puppetのドキュメンテーションは、従うと非常に完全です。組み込みのタイプに注意を払い、他のモジュールがどのように組み立てられるかを少し見てください。とても簡単だとは言いませんが、難しいことでもありません。インフラストラクチャをパペット用に準備するのは少し時間がかかりますが、投資する時間は、拡張時に十分に費やすことが保証されています。

7
thinice

私も非営利で働いており、最初にLinuxボックスを社内に持ち込み、その後すぐにPuppetでそれらを管理する責任がありました。 reallyを使用して、物事を順調に進めるために行ったいくつかの特定の作業があります。

何よりもまず、私はサードパーティのモジュールに近づかないようにしました。組み込みのツールは、管理の90%を処理します。私が使用する最大のサードパーティユーティリティはファイアウォールモジュールです。カスタムファクトなどは、チーム全体で開発されます。テンプレートモジュールを開発し、ファイル管理、パッケージ、サービスなどをすべてこのテンプレートから標準化しました。

次に、組み込みモジュールの使用について標準化した後、すべての構成変更のレビューを実行するために、GitとAtlassianのCrucibleを使い始めました。これにより、必要な透明度が得られます。

3番目に、Puppetのセットアップを自動化して、デフォルトのオプションセットで新しいホストを自動的に追加できるようにしました。これに対処するにはいくつかの方法があります。すでに完全なキックスタート環境があったので、そこにスクリプトを追加することにしました。

5
Tim Brigham

KISS(Keep it simple stupid)-新しいテクノロジーが存在するという理由だけでそれらを必要としないために使用しないでください。展開に必要な最低限のものを使用し、必要に応じて更新して、最新の状況を維持しないでください。縁。基本的なセットアップから始めて、その上に構築すれば、進むにつれてピックアップするのが簡単になり、コースを必要としないはずです(これらも利用できますか?)。

あなたが見ることができる他の領域はあなたのシステム管理者です。彼らもプログラムできない場合、それらは大規模な展開に十分に先進的であり、使用するツールに関係なくほとんどの作業をスクリプト化する必要がありますか?

5
JamesRyan

「私たちはプログラマーではなく、システム管理者です」

悪いことに、私の時代は変わった:私のような灰色のひげは期待されていたプロのプログラマーよりも優れたプログラマーであるか、そうでなければシステム管理者に合格できなかった

現在、「システム管理者」は基本的にWindowsデスクトップユーザーであり、ある時点でLinuxに変換されてプログラムできず、何も問題が見つかりません。

部屋の象は、経営者がそのような破壊的な態度を容認する理由です。誰に、または何に破壊的か?ビジネスとインフラストラクチャに。

Puppet [、CFEngine、Chef]の件名に戻ります。そのようなソリューションを設定するとすぐに、敗北します。誰もが負ける。どうして?アイデアを思いついた人は誰でも、カプセル化された構成管理を、Nice、clean、Kickstart [、JumpStart、Automated Installer、AutoYaST、Ignite-UX、NIM]オペレーティングシステムパッケージの形で設計することができないためです。 Puppet(またはChef、CFEngine)などの自動化されたハッキン​​グツールを使用する必要がある場合、設計および実装と同じ設計で完全に実施するプロセスが不足していることを意味します。完全に自動化され、完全に非対話型の、管理されたシステムをそのままの状態で完全に自動化します。

もう1つの重要な点は、Puppetまたはそのようなソリューションを修正する必要がある場合誰か hacking システムまたはアプリケーションの構成を手作業で行うと、経験がないことに戻ります。プロセスを設計し、そのプロセスで構成が個別のコンポーネントにパッケージ化されるフレームワーク。実際、Puppetなどを実装する人には、コンポーネントの所有者、リリース、構成管理、能力成熟度モデルの概念がありません。これは急速に業界で非常に深刻な問題に発展しています。

また、Puppetを使用することで、デフォルトのシステムツール言語としてBashに取って代わるRubyを学ぶことができました。」

Rubyが必要なのは、包括的なエンドツーエンドの構成管理を、Bourne Shellプログラム、AWKを使用するだけで、オペレーティングシステムパッケージのプレインストール、ポストインストール、プレリムーブ、ポストリムーブセクションにカプセル化できる場合です。 、そしてsed?誰かがRubyの難解な言語とその方言をPuppetのコンテキストで習得するのに必要なことはまったく必要ありません。構成管理の問題は簡単に解決できます(つまり、解決されました)。シェルプログラムとAWK、および接着剤としてあちこちに小さなsed(1)を使用します。

Puppetマニフェストがマシン全体または新しいサービスを最初から構成するのを見るのはクールな気持ちです。

Kickstart、AutoYaST、JumpStartによって行われる1行のコードなしで組み込みのツールを使用してオペレーティングシステムにクエリを実行でき、難解なものや余分なものを必要としないことは、さらにクールなことです。ソフトウェアクライアントサーバーアーキテクチャは必要ありません(SSHは非常に優れていますが、はるかに優れています)。オペレーティングシステムがすべての変更を認識していることを確認します。

5.コードをデータから分離します。これは、学ぶのが難しい概念の1つです。 Monitoring Hostsなどの値をモジュールコードにハードコーディングするのは適切ではありません。それらをモジュールが消費できるデータストア(db、yaml(Hieraはこれをデフォルトにする)、csvなど)に配置するのは良いことです。例は、Mysqlを使用するWebアプリケーションです。これにより、コードとデータを個別にプッシュできます。これにより、開発プロセスが簡単になります。

...または、シェル変数を使用して構成ファイルを template 逆引用符で囲んでもかまいません(たとえば、ls -1 ...)、AWKを使用してeval(1)を呼び出し、テンプレート内のすべての変数を展開するシェルスクリプトを記述します。これにより、シェルに組み込まれているものとまったく同じ強力なパーサーを利用できます。なぜ本当に複雑なのに、どうして複雑にするのですか?構成値はどこに保存しますか?なぜ、たとえばpkginfo(4)ファイル、Oracleのようなデータベース、またはどこでもなど、どこでも好きな場所に。超複雑なソリューションは必要ありません。上記で言及したライブラリは、オペレーティングシステムパッケージのプレインストールまたはポストインストールのセクションからsourcedするだけでよいため、重複がなくなり、中心的なコードを活用できます。

しかし何よりも、上記の引用は、システム管理者ではなく、システムエンジニアによる個別指導を必要とする次世代のシステム管理者の例であることがわかりました。自分で灰色のひげを見つけ、見習いとしてサインオンします。

4
UX-admin