序章

複数のクラウドサーバーを管理している場合は、PuppetChefなどの構成管理ツールを使用して、プロビジョニング、構成、および管理を行うことで、作業を大幅に短縮できます。 VPSとそれらがホストするアプリケーション。 PuppetまたはChefを使用すると、反復的なタスクを簡単に自動化し、重要なアプリケーションを迅速に展開し、オンプレミスまたはクラウドでサーバーのスケーリング2、5、または10から1000までの変更をプロアクティブに管理できます。 Puppetは、オープンソースソフトウェアと商用ソフトウェアの両方で利用できます。 Puppet Enterpriseは、商業的にサポートされているPuppetのパッケージリリースですが、最大10ノードを無料で管理できます。

利点

Puppetは、システム管理者が一般的なタスクを実行できるようにするクロスプラットフォームフレームワークです。 これはモデル駆動型のソリューションであり、使用するためのコーディング知識はほとんど必要ありません。 Chefはそのモデルをレシピと呼びますが、Puppetはそれらをマニフェストと呼びます。 マニフェストのグループは、モジュールと呼ばれます。 Apache、Nginx、MySQLなどのパッケージを構成するためのモジュールがあります。 マニフェストとモジュールを使用して、ファイルのアクセス許可、ユーザーとグループなどを変更することもできます。 ご覧のとおり、これらのモデル、またはマニフェストとモジュールは、さまざまなタスクを実行できます。 PuppetをVPSの初期インストール中だけでなく、VPSのライフサイクル全体を通して役立つようにします。 大規模な展開と小規模な展開の両方で役立ちます。 さらに、Puppetには驚くほど活発なコミュニティがあり、そのメンバーは2つの主要なリポジトリ(以下で参照)でモジュールやその他の有用な情報を共有しています。

一見すると、システム管理者は構成管理ツールのアイデアを却下するかもしれません。 マシンイメージでも同じ結果が得られると考える人もいます。 スナップショット、およびシェルスクリプト。 ある著者が雄弁に言っているように、これはチェーンソーについて聞いたばかりの木こりに相当しますが、なぜ誰もが斧以上のものを欲しがるのかわかりません。 多くのシステム管理者が認識できないのは、限られた時間の価値です。 構成管理ツールがもたらす強みの1つは、反復的なタスクを自動化し、システム管理者を解放して、より重要な問題に集中できるようにすることです。

計画

Puppetは、クライアントサーバーモデルまたはエージェントマスターモデルを採用することにより、集中管理を可能にします。 中央サーバーまたは管理サーバーは、一般にPuppetマスターと呼ばれ、Puppetクライアントにサービスを提供します。 Puppetマスターとして機能するために必要なクラウドサーバーは1つだけですが、ほぼ無限の数のPuppetクライアントまたはエージェントノードを持つことができます。 ただし、個々のVPSがPuppetマスターとクライアントの両方として機能するようにPuppetを展開することは可能です。 インストールする前に、展開の種類を決定する必要があります。

エージェント/マスターa/k/クライアント/サーバー

エージェントノードまたはPuppetクライアントは、Puppetマスターサーバーから構成をプルします。 管理者はノード証明書を管理する必要がありますが、マニフェストとモジュールをPuppetマスターサーバー上で維持するだけでよく、レポートや外部データソースなどの機能をより簡単に利用できます。

エージェントまたはクライアントにpuppetをインストールする前に、どのVPSをマスターにするかを事前に決定し、puppetmasterをインストールする必要があります。 マスターは、高速プロセッサ、大量のRAM、および高速ディスクを備えた専用マシンである必要があります。

スタンドアロン

すべてのノードは、マニフェストから独自の構成をコンパイルします。 管理者は、Puppetマニフェストとモジュールをすべてのノードに定期的に同期する必要があります。

前提条件

デフォルトでは、Puppetクライアントは、DNSを介して puppet という名前のホストに接続することにより、Puppetマスターサーバーを探します。

  • Puppet master として機能するサーバーを特定するか、 create し、そのIPアドレスをメモします。
  • Puppetクライアントとして機能するサーバーを特定または作成します。
  • 各サーバーのホスト名と完全修飾ドメイン名(FQDN)を設定します。
  • 各サーバーにNTPデーモンを展開します。 See Ubuntu12.04で時刻同期を設定する方法;
  • ドメイン内のホスト名puppetのDNSAレコードまたはCNAMEを作成し、Puppetマスターとして機能するノードを指します。 puppet.yourdomain.tld。

DNSを使用したくない場合は、次のコマンドを実行する必要があります。 sudo vim / etc / hosts ; 次に、キーボードの「i」キーをタップして、次を追加します。

127.0.0.1 localhost.localdomain ローカルホスト 傀儡
127.0.1.1 ny.yourdomain.tld ny
1.2.3.4 ny.yourdomain.tld ny 傀儡

変更を保存するには、キーボードの「Esc」キーをタップしてから、次のキーストロークをタップします:「:」、「w」、「q」、「enter」(すべて引用符なし)。 See DigitalOcean CloudServerへのVimテキストエディターのインストールと使用。 各Puppetclient で、Puppetマスターのクライアントの / etc / hosts ファイルにエントリを追加します(以下では、Puppetクライアントの1つがsf.yourdomainであると想定しています。 .tld (IPアドレス:1.2.3.5):

127.0.0.1 localhost.localdomain ローカルホスト
127.0.1.1 sf.yourdomain.tld sf
1.2.3.5 sf.yourdomain.tld sf
1.2.3.4 ny.yourdomain.tld ny 傀儡

ファイアウォールの問題の回避

CentOSには、非常に制限の厳しい iptables ルールが付属しており、変更が必要になる場合があります。 以前に展開した場合 iptables クラウドサーバー上のファイアウォール(またはNAT環境にいくつかのサーバーがある)、マスターサーバーが許可している、または接続できることを確認しますポート3000、8139、および8140でのTCP接続参照UbuntuおよびDebianクラウドサーバーでUFWを使用してファイアウォールを設定する方法

パッケージを更新する

クラウドサーバーが構築され、ファイアウォールで適切なポートが開かれたら、すべてのパッケージを更新します。

sudo apt-get update && sudo apt-get -y upgrade && sudo apt-get -y dist-upgrade && sudo apt-get -y autoremove && sudo reboot

セントラルサーバーにpuppetmasterをインストールします

puppetmasterをインストールするためのいくつかのオプションがあります。 オペレーティングシステムのリポジトリで利用可能なパッケージを使用することも、PuppetLabsのaptリポジトリを使用することもできます。 一部のOSリポジトリはパッケージの更新に時間がかかるため、 puppetmasterをPuppetLabsリポジトリからインストールして、リリースが古くなってしまわないようにすることをお勧めします。 Puppet Labsリポジトリを有効にするには:

  1. OSバージョンの「puppetlabs-release」パッケージをダウンロードします。 これらのパッケージの完全なリストは、http://apt.puppetlabs.com/のフロントページで確認できます。 それらはすべてpuppetlabs-release-[コードネーム].debという名前です。
  2. dpkg-iを実行してパッケージをインストールします。

たとえば、PuppetLabsリポジトリからUbuntu12.04 LTS(Precise Pangolinと呼ばれる)を実行している中央または管理用のVPSに puppetmaster をインストールするには、ターミナルで次のコマンドを実行します。

sudo wget http://apt.puppetlabs.com/puppetlabs-release-precise.deb
sudo dpkg -i puppetlabs-release-precise.deb
sudo apt-get update && sudo apt-get -y install puppetmaster

他のLinuxディストリビューション、OS X、Windows、BSD、またはSolarisのインストール手順は、こちらから入手できます:Puppetのインストール

セントラルサーバーでのpuppetmasterの構成

次に、次のコマンドを実行します。

sudo touch /etc/puppet/manifests/site.pp

Puppetの動作は、かなり大きな設定のコレクションを使用してカスタマイズできます。 これらのほとんどは安全に無視できますが、ほぼ確実にそれらのいくつかを変更する必要があります。

Puppetのメイン構成ファイルは/etc/puppet/puppet.confにあり、次のヘッダーまたはブロックで順序付けられています: [main] [agent] および[マスター]。 エージェントノードまたはPuppetクライアントの設定は、puppet.conf[agent]または[main]ブロックに配置する必要があります。 同じように、Puppetマスターサーバーの設定は、puppet.conf[master]または[main]ブロックに配置する必要があります。

注: Puppetマスターは通常、エージェントノードまたはPuppetクライアント自体でもあります。 [main] の設定はサービスの両方で使用でき、[master]および[agent]ブロックの設定は[の設定を上書きしますメイン]

スタンドアロンノード

スタンドアロンPuppetノードの設定は、puppet.conf[main]ブロックに配置する必要があります。 Puppetのデフォルト設定は、通常、スタンドアロンノードに適しています。 一元化されたレポートまたは外部ノード分類子を使用する場合を除いて、追加の構成は必要ありません。

DNSの落とし穴の回避

この時点で、SSL証明書を適切にフォーマットできるように、 puppetmaster に完全修飾ドメイン名(FQDN)を提供する必要があります。 まず、現在の環境を評価する必要があります。

  • Puppetマスターとして機能するノードには、ホスト名が1つだけありますか?つまり、 NO エイリアスがありますか?

(i)その質問に対する答えが「はい」であり、(ii)PuppetマスターのDNS Aレコードを作成した場合は、次のコマンドを実行して編集します。

sudo service puppetmaster stop
sudo rm -rf /var/lib/puppet/ssl
sudo vim /etc/puppet/puppet.conf

次に、[main]ヘッダー/ブロックの下に次の行を追加します。

server = puppet.yourdomain.tld

PuppetマスターのDNSCNAMEを作成した場合、および/またはマスターサーバーにホスト名エイリアスがある場合は、次の手順を実行します。

sudo service puppetmaster stop
sudo rm -rf /var/lib/puppet/ssl
sudo vim /etc/puppet/puppet.conf

[master] ヘッダー/ブロックの下に、マスターサーバーのすべてのエイリアスのコンマ区切りリストを追加します。例:

dns_alt_names = puppet, [alias1], [alias2], puppet.yourdomain.tld

次に、実行します。

sudo service puppetmaster start

puppetmasterの依存関係をインストールします

エージェント/クライアントノードへのpuppetのインストールに進む前に、最後にマスターサーバー上のすべてのパッケージを更新してください。

sudo apt-get update && sudo apt-get -y upgrade && sudo apt-get -y dist-upgrade &&  sudo apt-get -y autoremove && sudo reboot

クライアントサーバーにpuppetをインストールします

ここでも、PuppetLabsリポジトリからpuppetをインストールします。 Ubuntu 12.04 LTSを実行しているクライアントノードで、以下を実行します。

sudo wget http://apt.puppetlabs.com/puppetlabs-release-precise.deb
sudo dpkg -i puppetlabs-release-precise.deb
sudo apt-get update && sudo apt-get -y install puppet

ここをクリックしてください:他のLinuxディストリビューションでPuppetLabsのリポジトリを有効にする手順

覚えておいてください: Puppetの最高の機能の1つは、クロスプラットフォームであるということです。 したがって、クライアントはPuppetマスターと同じOSを実行する必要はありません。 実用的な観点から見ると、この柔軟性は驚くべきものです。開発者は、さまざまなOSの新しいDigitalOceanドロップレットをすばやく効率的にスピンアップして、アプリをテストおよびデバッグできるからです。 Puppetは、DigitalOceanのAPIとスナップショットのサポートと組み合わせて、次回のステージング環境で数秒以内に新しいドロップレットを(文字通り)デプロイできるため、ステージングサーバーが不要になった場合は、自信を持って(月額コストを節約するために)破棄できます。が必要です。

クライアントサーバーでpuppetを構成します

puppet をインストールしたら、Puppetマスターに接続できるようにPuppetクライアントを構成する必要があります。 これは、次のコマンドと編集で行います。

sudo vim /etc/puppet/puppet.conf

そして、以下を追加します。

[agent]
server = puppet.yourdomain.tld
report = true
pluginsync = true
certname = [hostname of Puppet client].yourdomain.tld

次に、次のコマンドを使用して、Puppetクライアントが自動的に起動するように構成する必要があります。

sudo vim /etc/default/puppet

START で始まる行を編集して、次のようにします。

START=yes

次に、サービスを開始します。

sudo service puppet start

すべてのPuppetクライアントに対してこれらの手順を繰り返します。

安全な通信を構成する

新しいPuppetクライアントをデプロイするたびに、Puppet master にログインし、次のコマンドを実行して、署名を待機しているSSL証明書のリストを表示します。

sudo puppet cert --list

次に、Puppet master で、次のコマンドを実行して、キュー内のクライアント証明書に署名します。

sudo puppet cert --sign [hostname of Puppet client]

おめでとう! これで、新しいPuppetクライアントは、Puppetマスターに正常に接続し、安全に通信できるようになります。

マニフェストとモジュール

PuppetマスターがPuppetクライアントと通信しているので、モジュールを使用してPuppetクライアントにMySQLをインストールすることにより、セットアップをテストしましょう。 Puppetマスターで次のコマンドを実行します。

sudo apt-get -y install git
sudo git clone https://github.com/puppetlabs/puppetlabs-mysql mysql
sudo vim /etc/puppet/manifests/site.pp

以下をコピーして貼り付けます site.pp

node [hostname of Puppet client] {
class { 'mysql': }
class { 'mysql::server':
   config_hash => { 'root_password' => '[desired password]' }
}
}

Puppetクライアントで、次のコマンドを実行します。

sudo puppet agent --test

Puppetクライアントは、Puppetマスター上のファイル site.pp 内のディレクティブを読み取り、MySQLをインストールします。

Puppetの使い方を学ぶ

VMwareまたはVirtualBox用のLearningPuppet VM (無料)をダウンロードすることで、安全で便利な仮想環境でPuppetを学習して使用する練習をすることができます。 VMと例ではPuppetEnterpriseを使用していますが、このレッスンはPuppetのオープンソースリリースにも適用されます。 新しいPuppetユーザーは、 LearningPuppet-Indexから始める必要があります。

オプションのソフトウェアをインストールする

他のソフトウェアを使用してPuppetを拡張および改善できます。

  • Puppet Dashboard は、Puppet用のオープンソースのレポートアナライザー、ノード分類子、およびWebGUIです。
  • stdlibモジュールは、追加の関数、カスタムファクトを作成するためのより簡単な方法などを追加します。
  • 一般的な問題を解決するユーザー提出のマニフェストとモジュールは、 パペットフォージ & の上 GitHub

追加リソース

いつものように、Puppetの基本的なセットアップと構成についてサポートが必要な場合は、以下の質問を提起して、DigitalOceanコミュニティに支援を求めてください。

投稿者: Pablo Carranza