序章

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

Puppetについて少し学びたい場合、およびPuppetがどのように役立つかを知りたい場合は、読み続けてください。 すでに確信があり、Puppetのインストールを開始したい場合は、以下のこのチュートリアルで使用される規則のセクションにスキップしてください。

なぜパペットを使うのですか?

人形とは何ですか?

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

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

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

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

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

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

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

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

  • 構成管理ベースのインストールでは、ノードの目的の状態の構成管理ツール仕様を作成し、構成ツールはノードの状態を目的の状態と比較して、ノードを目的の状態に駆動します。

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

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

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

特にPuppetを使用する理由

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

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

雪片、ペット、牛

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

  • ノードがスノーフレークになっているのは、その状態がどのようになったかわからない場合や、神経質すぎて変更できない場合、または壊れた場合にタッチする場合です。 それが壊れた場合、あなたは本当に困っています。 あなたのノードは繊細なスノーフレークのようなものです。

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

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

比喩の目的は、ノード管理の「牛」の視点を伝えることです。 ほとんどのシステム管理者は、ノードを雪片やペットとして扱うことに慣れているため、ノードが損傷したときにノードを強制終了するという考えはまったく異質なようです。 しかし、視点を変えて牛のモデルがいかに強力であるかを理解するために必要なのは、ほんの数秒の思考です。

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

  • あいまいなソフトウェアが突然動作を停止しましたか? 問題ありません。ノードを強制終了し、Puppetを使用して最初から再作成します。

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

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

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

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

(注:作者は牛のような動物を扱うことに慣れていませんが、牛のメタファーは構成のメタファーとしてうまく機能します。)

パペットウェイ

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ドロップレット作成フォームで新しいドロップレットのホスト名を指定するときは、必ず[ホスト名]フォームフィールドに完全修飾ドメイン名(FQDN)を指定してください。

Hostname = mynode.example.com

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

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

ルートとしてドロップレットにSSHで接続

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

ssh [email protected]

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

ssh [email protected]

Puppetをインストールする

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

Linuxインストールソフトウェア yum Puppetのインストールが簡単になります。 唯一の問題は、PuppetがデフォルトでCentOS yumリポジトリリストにないことです。そのため、呼び出す前に最初にインストールする必要があります。 yum. (CentOS5またはCentOS6を使用している場合は、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をインストールします。 The 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 のドメイン値が正しくない場合は、システム構成ファイルに1行追加することで修正できます。 /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. The 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. The file Constructは、その名前のファイルがあること、ファイルがディレクトリではなくファイルであること、指定された所有権を持っていること、指定された保護モードを持っていること、指定されたコンテンツを持っていることを確認するようにPuppetに指示します。

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

人形を呼び出す

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

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

Puppetはファイルを作成する必要があります /root/example_file.txt が所有している root、 の中に 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---r-- の保護 example_file.txt それ以外の -rwx------ 保護:

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

次は何?

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

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

結論

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

参考文献

Puppetの背後にある会社はPuppetLabs、Incと呼ばれています。 そしてここで見つけることができます:

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

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

Puppetユーザーコミュニティは、さまざまなソフトウェアを構成するために使用できる何千ものPuppetモジュールを作成しました。