CentOS 7でスタンドアロンモードでPuppetをインストールする方法

前書き

このチュートリアルの目的は、Pentpetをできるだけ早くCentOS 7でスタンドアロンモードで起動して実行することです。

Puppetとその有用性について少し学びたい場合は、読み続けてください。 すでに確信があり、Puppetのインストールを開始する場合は、https://www.digitalocean.com/community/tutorials/how-to-install-puppet-in-standalone-mode-on-centos-のセクションにスキップしてください。 7#conventions-used-in-this-tutorial [このチュートリアルで使用される規約]を以下に示します。

Puppetを使用する理由

パペットとは?

Puppetは、組織が単一の中央サーバーから何万ものノードの正確な構成を制御できるようにするオープンソースの構成管理ソフトウェアツールです。 Puppetは成熟して人気があり、世界中の大規模な組織で使用されています。 ただし、この分散クライアント/サーバーモデルでPuppetをインストールするのは複雑な場合があり、中央のPuppetサーバーのセットアップとクライアントノードとの関係が必要になります。

Puppetはマスクラウド設定ツールのような強力なイメージを持っているため、Puppetは「スタンドアロン」モードでも実行でき、手動で単一ノードを設定できることを知って驚くかもしれません。 スタンドアロンモードでは、Puppetは個々のノードを構成するための優れたツールです。

DigitalOcean Dropletsを手動で構成している場合(つまり、 クラウドサーバーにSSH接続し、Linuxコマンドシェルに一連のコマンドを入力することで)、Puppetは、その構成プロセスのすべての知識を、再作成するために呼び出すことができる単一のPuppet構成ファイル(またはディレクトリツリー)に埋め込むことができますノードを最初から作成するか、ノードが破損した場合は再構成します。

Puppetは、単なる美化されたインストールスクリプトマネージャーではありません。 Puppetが実行されると、ノードの構成を検査し、ノードの構成とPuppet構成ファイルで指定された構成の違いを特定し、ノードを指定された状態にするために必要な変更を行います。 これは、ノードの構成と修復の両方に使用できることを意味します。

構成管理ツールを使用する理由

ソフトウェアのインストールでは、手動、スクリプト、および構成管理ベースの3つの高度なレベルを識別できます。

  • _手動インストール_では、ノードにSSHで接続し、一連のコマンドを発行します+ コマンドシェルでソフトウェアをインストールします。

  • _スクリプト化されたインストール_では、スクリプトを作成します(例: RubyスクリプトまたはBASHスクリプト)+ ソフトウェアをインストールして実行します。

  • _構成管理ベースのインストール_では、構成を作成します+ ノードの望ましい状態の管理ツール仕様、および構成ツールはノードの状態を望ましい状態と比較し、ノードを望ましい状態に駆動します。

手動インストールは、ファイルではなく1人または複数のエンジニアの頭にすべてのインストール知識を埋め込む自動化前のソリューションであるため、回避する必要があります(エンジニアがインストール手順を書き留めていない限り)。

スクリプトによるインストールは手動によるインストールよりもはるかに優れていますが、インストールを実行してからその一部を損傷すると、スクリプトを使用して損傷を修復できないという問題があります。最初からやり直して、すべてを再インストールする必要があります。

構成管理ベースのインストールが最適なソリューションです。 構成管理ツールは(インストールスクリプトと同様に)インストールを自動化しますが、ソフトウェアが破損した場合の修復にも使用できます。 また、目的の構成を変更したり、ノードを新しい目的の状態にしたりするためにも使用できます。

Puppetを特に使用する理由

2014年8月現在、市場にはPuppetとChefの2つの主要な構成ツールがあるようです。 簡単に検索すると、どちらも忠実な支持者のいる健全な成熟したツールのように見えます。 主な違いの1つは、Puppetの方が宣言的であり、Chefの方が手続き的であるため、Puppetが損傷修復にとってより魅力的であることです。 比較記事をいくつか紹介します。

このチュートリアルでは、包括的な比較は行いません。

雪片、ペット、牛

ソフトウェア構成の世界では、サーバー構成管理の高度な3つのレベルを表す比metaが生まれました。 スノーフレークレベル、ペットレベル、または牛レベルのいずれかになります。 その仕組みは次のとおりです。

  • 状態がどのようになったかわからない場合、ノードは* snowflake *です それが中にある、および/またはあなたがそれを変更するには緊張しすぎている、または壊れた場合にそれをタッチ+ 壊れた場合、あなたは本当の問題に直面しています。 あなたのノードは繊細な雪の結晶のようです。

  • 壊れた場合でも修正できると確信している場合、ノードは*ペット*です。 しかし、ゼロから設定するという考えは、あなたを恐怖で満たします。 +ペットが病気になったら、獣医のところに連れて行き、癒します。

  • 構成が非常に自動化されている場合、ノードは「牛の頭」であり、+ ノードに何らかの問題が発生した場合、自動設定ツールを使用して最初から再設定する方が、修復を試みるよりも簡単です。 + 1頭の牛が病気になった場合、獣医に連れて行かないでください。 +頭でそれを撃ち、新しいものを手に入れます。

メタファーの目的は、ノード管理の「牛」の視点を伝えることです。 ほとんどのシステム管理者は、ノードを雪片またはペットとして扱うことに慣れているため、ノードが損傷したときにノードを単に殺すという考えはまったく異質に思えます。 ただし、必要なのは、自分の視点を変えて、牛モデルの威力を実感するのに数秒の思考です。

  • ファイルシステムが破損していますか? 問題ありません。Puppetを使用してノードを強制終了し、ゼロから再作成するだけです。

  • あいまいなソフトウェアが突然機能しなくなったのですか? 問題ありません。Puppetを使用してノードを強制終了し、ゼロから再作成するだけです。

  • ハッカーがシステムに侵入し、ルートキットをインストールしましたか? 問題ありません。Puppetを使用してノードを強制終了し、ゼロから再作成するだけです。

牛のようにノードを扱うことは、松葉杖になる可能性があります。 最終的には、ノードに損傷を与えているものの原因を見つけて実際の問題を修正するのが最善ですが、その間は、自動的に再構築するだけで非常に効果的です。

3つのインストールレベルのうち、スクリプトインストールと構成管理インストールはどちらも牛モデルをサポートしています。 ただし、構成管理モデルはペットモデルもサポートしています。 スクリプトモデルでは、追加のソフトウェアをインストールする場合、ゼロから開始する必要があります。 構成管理モデルの下で、既存のノードを変更できます。

Puppetを使用すると、スノーフレークモデルから牛モデルに移動できます。必要に応じて、牛をペットとして扱うこともできます。

(注:著者は、牛のような動物を扱うことに慣れていませんが、牛の比phorは構成比phorとしてうまく機能します。)

パペットウェイ

ノードを構成するPuppetの方法は、Puppet内からすべてを構成することです。 これは時にはやや難しい場合がありますが、Puppet内から必要なものを設定することはほとんど常に可能です。

Puppet内からすべてを構成することを確約する場合、単一のPuppetコマンドでクラウド内の任意のノードを構成できます。そうすることができれば、クラウド内のノードを牛のように扱うことができます。 スノーフレークの考え方から遠く離れて、クラウド内のランダムノードを定期的に選択し、Puppetを使用してリビルドして再構築するというポリシーを採用することができます。ペット。

すべての構成情報をPuppetに具体化したら、ノードが牛の頭のように扱われないようにする唯一の方法は、データベースが含まれている場合です。 ノードを破棄する前にデータベースを保存し、ノードを再構築した後に復元する必要がありますが、それが唯一の理由です。

Puppetは単なる設定ツールではありません。 これは、ノードのインストール、管理、および修復を合理化し、ノードのクラウドを管理するストレスの多くを排除するdevops規律です。

このチュートリアルで使用される規則

このチュートリアルでは、次の名前のドロップレットを使用します。

mynode.example.com

使用されます。 このチュートリアルで「mynode」または「example」という単語が表示されるたびに、それらがコマンドキーワードではなく、自分の名前に置き換える必要があることを確認できます。

特に指定がない限り、このチュートリアルでコマンドを発行するように指示された場合は常に、コマンドシェル内でコマンドを発行することを意味します(例: あなたのドロップレットのbash)。

このチュートリアルでは、rootとしてログインしていることを前提としているため、すべてのコマンドの前に「+ sudo 」を付ける必要はありません。 ルートとしてログインしていない場合は、次のすべてのコマンドの先頭に「 sudo +」を付けてみてください(ただし、これはテストされていません)。

このチュートリアル全体を通して、 `+ cat `コマンドを使用してファイルを作成および変更します。 必要に応じて、 ` nano +`または別のテキストエディタを使用してください。

ドロップレットを作成する

Puppetを適用するドロップレットをまだ作成していない場合は、ここで作成してください。 CentOS 7ドロップレットである限り、あらゆる種類のドロップレットを作成できます。

DigitalOcean Droplet作成フォームで新しいドロップレットのホスト名を指定するときは、Hostnameフォームフィールドで完全修飾ドメイン名(FQDN)を指定してください。

Hostname = mynode.example.com

「mynode」だけを指定しないでください。

(Puppetを実行するために新しいノード「+ mynode 」に「 example.com +」のDNSを設定する必要はありませんが、ドロップレットを保持する予定がある場合は、とにかくこれを行うことをお勧めします。これがリマインダーです!)

ルートとしてのドロップレットへのSSH

次のコマンドを使用して、作業するコンピューターのコマンドラインからルートとして新しいドロップレットにSSHで接続します。

ドメイン名がノードを指すようにDNSを構成していない場合は、代わりにノードのIPアドレスを使用する必要があります。

Puppetをインストールする

次のステップは、Puppetをインストールすることです。 Puppet Labsは、無料のオープンソースリリースで、個別にエンタープライズリリースとしてPuppetを出荷しています。 このチュートリアルでは、任意の数のノードに対して完全に無料のオープンソースリリースをインストールします。

Linuxインストールソフトウェア「+ yum 」により、Puppetのインストールが簡単になります。 唯一の難点は、PuppetがデフォルトでCentOS yumリポジトリリストにないため、 ` yum +`を呼び出す前にまずインストールする必要があることです。 (CentOS 5またはCentOS 6がある場合、7を5または6に変更します)。

rpm -ivh http://yum.puppetlabs.com/puppetlabs-release-el-7.noarch.rpm

次のコマンドを使用して、Puppetリポジトリがインストールされたことを確認できます。

yum repolist | grep puppet

次のような出力が得られます。

puppetlabs-deps/x86_64         Puppet Labs Dependencies El 7 - x86_64        10
puppetlabs-products/x86_64     Puppet Labs Products El 7 - x86_64            70

次に、yumを使用してPuppetをインストールします。 `+ yes `コマンド(|を使用して ` yum +`コマンドにパイピング)を使用すると、yumからの一連の質問に答える必要がなくなります。 このコマンドは多くのアクティビティを引き起こし、180行以上のコンソール出力を生成するはずです。

yes | yum -y install puppet

Puppetがインストールされ、次のコマンドで動作することをテストします。 出力は、 `+ 3.6.2 +`のような単純なバージョン番号でなければなりません。

puppet --version

ホスト名とFQDNを設定する

ノードのホスト名と完全修飾ドメイン名(FQDN)の設定が適切に構成されていない場合、Puppetは正しく実行されません。 これは、Puppetが多くの場合、複数の異なるノードの構成を指定する1つの構成ファイルで構成されているためです。 Puppetは、実行されているノードを認識して、構成ファイルの関連部分のみを実行できるようにする必要があります。

ノードがPuppet用に正しく構成されているかどうかを確認するには、次の2つのコマンドを実行します。

facter | grep hostname
facter | grep fqdn

それ自体で、 `+ facter `コマンドは、ドロップレットに関するデータを含むキー/値ペアのリストを表示します。 ここではキーと値のペアのうち2つだけが重要なので、「 grep +」を使用して関連する出力を検索します。これは次のようになります。

hostname=mynode
fqdn=mynode.example.com

値の* mynode 部分が正しくない場合、次のコマンドを入力して+これを修正できます。 これにより、両方のペアの+値の mynode *部分が変更されます。

hostname mynode
  • fqdn *のドメイン値が正しくない場合、システム設定ファイル `+ / etc / resolv.conf +`に単一の+行を追加することで修正できます。 最初に簡単に確認します(誤って破損した場合、ドロップレットを再作成せずに再作成する場合に便利です)。

cat /etc/resolv.conf

次に追加します。

cat >>/etc/resolv.conf
domain example.com
^D

(* ^ D *はControl-Dを入力して `+ cat +`コマンドへの入力を終了することを意味します。)

変更が機能することを確認します。

facter | grep hostname
facter | grep fqdn

出力に含まれるべき内容のリマインダーは次のとおりです。

hostname=mynode
fqdn=mynode.example.com

Puppet設定ファイルを作成する

Puppetがインストールされ、実行の準備ができたので、Puppet構成を作成します。 CentOS / Puppetのインストールプロセスでは、既に「+ / etc / puppet 」というディレクトリが作成されているはずです(作成されていない場合は、「 mkdir / etc / puppet +」で作成します)。 見てみましょう:

ls -la /etc/puppet

いくつかの `+ .conf `ファイルと ` modules +`サブディレクトリが必要です。

Puppet設定ディレクトリツリーの命名規則は、作成しようとしている実際の設定ファイルを保持するために、 `+ manifests +`サブディレクトリを作成するよう指示しています。

mkdir /etc/puppet/manifests

次に、構成ファイルを作成します。 + mynode.example.com +`の代わりに独自のドメイン名を使用する必要があります。 `+ cat`コマンドが使用されますが、必要に応じて + nano`エディター(または他のエディター)を使用できます。 (先頭および末尾の空白行は無視されます)。

cat >/etc/puppet/manifests/projectname.pp

node "mynode.example.com" {

file { '/root/example_file.txt':
   ensure => "file",
   owner  => "root",
   group  => "root",
   mode   => "700",
   content => "Congratulations!
Puppet has created this file.
",}

} # End node mynode.example.com
^D

(* ^ D *はControl-Dを入力して `+ cat +`コマンドへの入力を終了することを意味します。)

設定ファイルはノード `+ mynode.example.com `の設定を指定します。 ( ` node" nodename "{…​} `のような構成ブロックをこのファイルに追加しても、ノード ` mynode.example.com +`で実行されます)。

`+ node `構造内には、 ` / root / example_file.txt `という特定のファイルを設定するための命令があります。 ` file +`コンストラクトは、Puppetに、その名前のファイルが存在すること、ファイルがディレクトリではなくファイルであること、指定された所有権、指定された保護モード、および指定されたコンテンツ。

`+ file +`命令は、ファイルが存在しない場合にファイルを作成するための単なるコマンドではありません。 むしろ、ファイルの構成方法の仕様です。 Puppetはファイルを検査し、ファイルの状態に関係なく、指定された状態にドライブします。 ファイルが存在しない場合、Puppetはそれを作成します。 存在するが、指定された側面のいずれかが正しくない場合(ファイルの内容を含む)、Puppetは偏差を修正し、ファイルを指定された状態にします。 そのため、Puppetは初回実行時にインストールスクリプトの役割を果たしているように見える場合がありますが、初回と後続の両方の実行で、既存の状態と目的の状態を実際に比較し、ファイルシステムを目的の状態に変更します。

パペットを呼び出す

Puppetをインストールして構成ファイルを作成したので、Puppetを呼び出すことができます。 (ipaddressエラーは無視してください)。

puppet apply /etc/puppet/manifests/projectname.pp

Puppetは、「+ root 」グループ内に、「-rwx ------ 」権限で、「 root 」が所有するファイル「 / root / example_file.txt +」を作成する必要があります。 これを確認してください。

ls -la /root

以下を使用してファイルの内容を確認します。

cat /root/example_file.txt

設定ファイルで指定したテキストが表示されます。

パペットをもう一度呼び出す

Puppetは構成ファイルをスクリプトとして実行しないことに注意してください。 +代わりに、システムを構成ファイルで指定された状態に移行します。 つまり、Puppetを再度実行しても、何も実行されないはずです。 それを試してみてください!

puppet apply /etc/puppet/manifests/projectname.pp

ファイルにダメージを与え、パペットを再び呼び出す

それでは、保護を変更して、設定されたファイルに何らかのダメージを与えましょう+ `+ chmod +`コマンドを使用します。

chmod o+r /root/example_file.txt

次のコマンドで損傷を確認します。 + -rwx ------ +`保護の代わりに `+ -rwx --- r-+ + `+ example_file.txt +`の保護が表示されます:

ls -la /root

Puppetを再度呼び出します。

puppet apply /etc/puppet/manifests/projectname.pp

Puppetはファイルの保護を修復する必要があります。 確認してください:

ls -la /root

より多くの損傷と修理

次に、ファイルの内容を変更して、ファイルを再度破損します。

cat >/root/example_file.txt
This is a damaged file!
^D

以下を使用して損傷を確認します。

cat /root/example_file.txt

Puppetを再度呼び出します。 ファイルを修復する必要があります。

puppet apply /etc/puppet/manifests/projectname.pp

ファイルが修復されたことを確認します。

cat /root/example_file.txt

次は何?

これは、開始するための単なる「Hello World」の例です。 上記の構成ファイルは、Puppetでできることのほんの一例です。 今後の予定については、次のページをご覧ください。

個々のファイル、ディレクトリツリー全体、パッケージ、サービス、cron、ユーザー、グループなどの構成を指定できます。 また、構成モジュールのPuppetユーザーが作成した巨大なライブラリーもあります。

結論

このチュートリアルでは、Puppetをスタンドアロンモードでインストールする方法と、Puppet構成ファイルを作成して単一ノードで単一ファイルを構成する方法を示しました。 この構成ファイルは、より複雑な構成を構築できるプラットフォームとして機能します。 Puppetを使用してすべての設定を行うという規律を順守すれば、Dropletsを雪片(またはペット)から牛に変換できるため、クラウド管理タスクを迅速かつ再現可能にできます。

参考文献

Puppetの背後にある会社はPuppet Labs、Incと呼ばれています。 ここにあります:

Puppetのインストール手順は次の場所にあります。

このページを参照することで、Puppetが設定できる機能を確認できます。

Puppetユーザーコミュニティは数千のPuppetモジュールを作成しており、これらのモジュールを使用して幅広いソフトウェアを構成できます。

Related