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

前書き

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

Puppetとその有用性について少し学びたい場合は、読み続けてください。 すでに確信があり、Puppetのインストールを開始したい場合は、以下のセクションConventions Used In This Tutorialにスキップしてください。

Puppetを使用する理由

パペットとは?

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

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

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

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

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

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

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

  • scripted installationで、スクリプトを作成します(例: RubyスクリプトまたはBASHスクリプト)
    を使用して、ソフトウェアをインストールして実行します。

  • configuration management based installationで、ノードの目的の状態の構成
    管理ツール仕様を作成し、構成ツールはノードの状態を目的の状態と比較して、ノードを目的の状態に駆動します。

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

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

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

Puppetを特に使用する理由

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

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

雪片、ペット、牛

ソフトウェア構成の世界では、サーバー構成管理の高度化の3つのレベル
を説明するメタファーが生まれました。 スノーフレーク
レベル、ペットレベル、または牛レベルになります。 その仕組みは次のとおりです。

  • ノードが
    の状態になった経緯がわからない場合や、神経質すぎて変更できない場合、または
    に触れた場合でも、ノードはsnowflakeになります。 )それが壊れた場合に備えて。 破損した場合、あなたは本当の問題に直面しています。 あなたのノードは繊細なスノーフレークのような
    です。

  • ノードが壊れた場合に修正できると確信している場合、ノードはpetですが、最初から構成することを考えると、恐怖に満ちています。 あなたの
    ペットが病気になったとき、あなたはそれを獣医に連れて行き、それを癒します。

  • 構成が非常に自動化されている場合、ノードはhead of cattleであるため、ノードに問題が発生した場合は、自動構成ツールを使用してノードを最初から再構成する方が簡単です。それを修復しようとすることです。
    の牛の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を付ける必要はありません。 rootとしてログインしていない場合は、次のすべてのコマンドの前にsudoを付けることができます(ただし、これはテストされていません)。

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

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

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

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

Hostname = mynode.example.com

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

(Puppetを実行できるようにするために新しいノードmynodeに対してexample.comのDNSを構成する必要はありませんが、Dropletを保持する予定がある場合は、とにかくこれを行うことをお勧めします。したがって、これはあなたのリマインダー!)

ルートとしてのドロップレットへの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に1行の
を追加することで修正できます。 最初に簡単に確認します(誤って破損した場合、ドロップレットを再作成せずに再作成する場合に便利です)。

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が所有するファイル/root/example_file.txtを、rootグループに、-rwx------権限で作成する必要があります。 これを確認してください。

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------保護ではなく、example_file.txt-rwx---r--
保護が表示されます。

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モジュールを作成しました。これらは、さまざまなソフトウェアの構成に使用できる
です。