前書き

クラウドコンピューティングの現代の世界では、構成管理は重要なステップです。 _構成管理ツール_を使用すると、構成をサーバーに確実に展開できます。 この分野でより成熟した構成管理ツールの1つはhttps://www.digitalocean.com/community/tutorials/getting-started-with-puppet-code-manifests-and-modules[Puppet]です。

典型的なPuppet環境では、ユーザーはPuppetモジュールをワークステーションに書き込み、モジュールをバージョン管理サーバーにプッシュします(例: Git)、それらのモジュールをPup​​petマスターにプルダウンします。 Puppetクライアントを実行しているサーバーは、Puppetマスターに定期的に接続して変更があったかどうかを確認し、変更があった場合は変更を適用します。

このシナリオは、チェックインするサーバーの数を増やし始めるか、モジュールがかなり複雑になるまでうまく機能します。 その時点で2つのオプションがあります:負荷を処理するためにPuppetマスターをクラスター化する(おそらく、商用バージョンのPuppetを購入する必要があります)か、単にPuppetマスターを完全にドロップします。 この記事では、2番目のオプションについて説明します。

マスターレスPuppetセットアップでは、すべてのPuppetモジュールのコピーをGit経由で各ノードにコピーし、Puppetに変更をローカルに適用する必要があります。 この方法の短所は、各サーバーがすべてのモジュールをダウンロードしてから、関連するものを適用することです。そのため、たとえば、 機密情報を使用したセットアップ。 ただし、Puppetマスターなしで実行すると、多くの柔軟性が得られ、インフラストラクチャを拡張することなく優れた機能を発揮します。

前提条件

Puppetが初めての場合は、ここで一時停止してhttps://www.digitalocean.com/community/tutorials/getting-started-with-puppet-code-manifests-and-modules[Puppetのこの記事を読むことができます。 ]まず、このチュートリアルではツールの実用的な知識を前提としています。 Gitを初めて使用する場合は、https://www.digitalocean.com/community/tutorial_series/introduction-to-git-installation-usage-and-branches [Gitシリーズの紹介]もご覧ください。

このチュートリアルでは、2つのDropletを使用します。1つはGitサーバーとして実行され、もう1つはPuppetを介して変更を適用します。 これらのドロップレットのIPアドレスは、それぞれ「+ your_git_server_ip 」と「 your_puppet_server_ip +」で参照します。

したがって、このチュートリアルに従うには、次のものが必要です。

  • sudo non-root userを含む1つのUbuntu 14.04ドロップレットおよびhttps://www.digitalocean.com/community/tutorials/how-to-configure-ssh-key-based-authentication-on-a-linux-server[SSHキーが追加されました]。

  • SSHキーが追加され、Git Labsがインストールされた別のUbuntu 14.04 Dropet。

Git Labsをセットアップする最も簡単な方法は、ワンクリック画像を使用することです。* Select Image の下のドロップレット作成ページで、 Applications タブをクリックし、 GitLab 7.10.0 CE on 14.04 *をクリックします。 https://www.digitalocean.com/community/tutorials/how-to-set-up-gitlab-as-your-very-own-private-github-clone [このチュートリアル]に従ってGit Labsをセットアップすることもできます。手動で。

ステップ1-Gitリポジトリの作成

最初のステップは、すべてのPuppetモジュールとマニフェストが保存されるリポジトリを作成することです。

まず、お気に入りのブラウザーで「+ http:// +」に移動してGit Labs UIを開きます。 *新規ユーザーの下の右側に詳細を入力してアカウントを作成しますか? アカウントを作成*し、緑色の*サインアップ*ボタンを押します。 アカウントの有効化メールが届きます。アカウントを有効化すると、メインページでログインできるようになります。

メインページの緑色の[* +新規プロジェクト]ボタンをクリックします。 [プロジェクトパス]に「puppet」と入力し、[プロジェクトの作成]をクリックします。 [プロジェクトパス]フィールドに「puppet」と入力し、[表示レベル]で[公開]を選択してから、緑色の[プロジェクトの作成]ボタンをクリックします。

後のステップで必要になるため、プロジェクト画面の上部に表示されるSSH URLを必ずコピーしてください。 `+ git @:/ puppet.git +`のようになります。

ステップ2-Git LabsにSSHキーを追加する

この手順では、PuppetサーバーでSSHキーを作成し、そのキーをGit Labsサーバーに追加します。

  • root *としてPuppetサーバーにログインします。 (Puppetのファイルはrootが所有するため、Puppetフォルダーに初期Gitリポジトリをセットアップする権限が必要です。)

rootユーザーのSSHキーを作成します。 このキーはユーザーではなくスクリプトで使用されるため、パスフレーズを入力しないでください。

ssh-keygen -t rsa

次に、次のコマンドで公開鍵を表示します。

cat ~/.ssh/id_rsa.pub

このキーをコピーします。 `+ ssh-rsa long_alphanumeric_string root @ +`のようになります。

次に、Git Labsダッシュボードページで、右から2番目の上部バーにある[プロファイル設定]アイコンをクリックします。 左側のメニューで[* SSHキー*]をクリックしてから、緑色の[* SSHキーの追加*]ボタンをクリックします。 * Title フィールドにキーの説明(「ルートパペットキー」など)を追加し、公開キーを Key フィールドに貼り付けます。 最後に、 Add key *をクリックします。

ステップ3-PuppetとGitのインストール

このステップでは、PuppetとGitをインストールします。

Puppetサーバーで、まずUbuntu 14.04用のPuppetパッケージをダウンロードします。

wget http://apt.puppetlabs.com/puppetlabs-release-trusty.deb

パッケージをインストールします。

dpkg -i /tmp/puppetlabs-release-trusty.deb

システムのパッケージリストを更新します。

apt-get update

最後に、Puppetとgitをインストールします。

apt-get install puppet git-core

この時点で、https://www.digitalocean.com/community/tutorials/how-to-install-git-on-ubuntu-14-04#how-to-setの指示に従ってGit環境を構成する必要があります-up-git [このチュートリアル]。

手順4-初期Puppet設定のプッシュ

PuppetとGitがインストールされたら、Puppetリポジトリに最初にプッシュする準備ができました。

最初に、設定ファイルが存在する `+ / etc / puppet +`ディレクトリに移動します。

cd /etc/puppet

ここでgitリポジトリを初期化します。

git init

現在のディレクトリにすべてを追加します。

git add .

説明的なコメントでこれらの変更をコミットします。

git commit -m ""

手順1でコピーしたSSH URLを使用して、以前に作成したGitプロジェクトをオリジンとして追加します。

git remote add origin [email protected]:/puppet.git

そして最後に、変更をプッシュします。

git push -u origin master

ステップ5-Puppetの構成のクリーンアップ

Puppetがインストールされたので、すべてをまとめることができます。 この時点で、rootとしてログアウトし、代わりに前提条件で作成したsudo非rootユーザーとしてログインできます。 どうしても必要な場合を除き、rootユーザーとして操作することはお勧めできません。

基盤を整えるには、いくつかの変更を加える必要があります。 最初に、 `+ / etc / puppet / puppet.conf`ファイルをクリーンアップします。 お気に入りのエディター(vim、nanoなど)を使用して、次の変更を加えて `+ / etc / puppet / puppet.conf +`を編集します。

最初に、特定のセットアップ用に `+ / etc / puppet / puppet.conf`ファイルにいくつかの変更を加えます。 nanoまたはお好みのテキストエディターを使用してファイルを開きます。

sudo nano /etc/puppet/puppet.conf

ファイルは次のようになります。

オリジナルの/etc/puppet/puppet.conf

[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
factpath=$vardir/lib/facter
templatedir=$confdir/templates

[master]
# These are needed when the puppetmaster is run by passenger
# and can safely be removed if webrick is used.
ssl_client_header = SSL_CLIENT_S_DN
ssl_client_verify_header = SSL_CLIENT_VERIFY

まず、Puppetマスターを実行していないため、「+ [master] 」行からすべてを削除します。 これは廃止予定なので、 ` templatedir `で始まる ` [main] `セクションの最後の行も削除します。 最後に、 ` factpath = $ vardir / lib / facter `を読み取る行を代わりに ` factpath = $ confdir / facter `に変更します。 ` $ confdir `は ` / etc / puppet / +`と同等です。 Puppetリポジトリ。

上記の変更が完了したら、 `+ puppet.conf`は次のようになります。

変更された/etc/puppet/puppet.conf

[main]
logdir=/var/log/puppet
vardir=/var/lib/puppet
ssldir=/var/lib/puppet/ssl
rundir=/var/run/puppet
factpath=$confdir/facter

ステップ6-Puppetモジュールの追加

これでPuppetがセットアップされましたが、作業は一切行われていません。 Puppetが機能する方法は、マニフェストと呼ばれるファイルを見て、それが何をすべきかを定義することです。そのため、このステップでは、Puppetを実行するための便利なモジュールを作成します。

cron-puppetと呼ばれる最初のモジュールは、Gitを介してPuppetをデプロイします。 マージに成功するとPuppetを実行するGitフックをインストールします(例: git pull)、およびcronジョブをインストールして、30分ごとに「+ git pull +」を実行します。

まず、Puppetモジュールディレクトリに移動します。

cd /etc/puppet/modules

次に、 `+ manifests `および ` files `ディレクトリを含む ` cron-puppet +`ディレクトリを作成します。

sudo mkdir -p cron-puppet/manifests cron-puppet/files

`+ manifests `ディレクトリに ` init.pp +`というファイルを作成して開きます。

sudo nano cron-puppet/manifests/init.pp

次のコードを `+ init.pp +`にコピーします。 これが、Puppetに30分ごとにGitからプルするよう指示するものです。

init.pp

class cron-puppet {
   file { 'post-hook':
       ensure  => file,
       path    => '/etc/puppet/.git/hooks/post-merge',
       source  => 'puppet:///modules/cron-puppet/post-merge',
       mode    => 0755,
       owner   => root,
       group   => root,
   }
   cron { 'puppet-apply':
       ensure  => present,
       command => "cd /etc/puppet ; /usr/bin/git pull",
       user    => root,
       minute  => '*/30',
       require => File['post-hook'],
   }
}

ファイルを保存して閉じ、 + files in`ディレクトリで + post-merger`という別のファイルを開きます。

sudo nano cron-puppet/files/post-merge

次のbashスクリプトを `+ post-merge +`にコピーします。 このbashスクリプトは、Gitのマージが成功した後に実行され、実行結果を記録します。

マージ後

#!/bin/bash -e
## Run Puppet locally using puppet apply
/usr/bin/puppet apply /etc/puppet/manifests/site.pp

## Log status of the Puppet run
if [ $? -eq 0 ]
then
   /usr/bin/logger -i "Puppet has run successfully" -t "puppet-run"
   exit 0
else
   /usr/bin/logger -i "Puppet has ran into an error, please run Puppet manually" -t "puppet-run"
   exit 1
fi

このファイルを保存して閉じます

最後に、グローバルマニフェストを作成してPuppetにこのモジュールを実行するように指示する必要があります。グローバルマニフェストは、「+ / etc / puppet / manifests / site.pp +」に標準的にあります。

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

以下を `+ site.pp `に貼り付けます。 これにより、「デフォルト」と呼ばれるノード分類が作成されます。 「デフォルト」ノードに含まれるものはすべて、すべてのサーバーで実行されます。 ここでは、 ` cron-puppet +`モジュールを実行するように指示します。

site.pp

node default {
   include cron-puppet
}

ファイルを保存して閉じます。 それでは、モジュールを実行して、モジュールが機能することを確認しましょう。

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

正常に実行されると、次のような行で終わる出力が表示されます。

...

Notice: Finished catalog run in 0.18 seconds

最後に、Gitリポジトリへの変更をコミットしましょう。 まず、rootユーザーとしてログインします。これは、rootユーザーがリポジトリへのSSHキーアクセスを持つユーザーだからです。

次に、 `+ / etc / puppet +`ディレクトリに移動します。

cd /etc/puppet

そのディレクトリ内のすべてをコミットに追加します。

git add .

説明的なメッセージで変更をコミットします。

git commit -m ""

最後に、変更をプッシュします。

git push -u origin master

結論

サーバーを追加するには、上記の手順3に従って新しいサーバーにPuppetとGitをインストールし、Gitリポジトリを `+ / etc / puppet `に複製して、 ` site.pp +`マニフェストを適用します。

ドロップレットを作成するときにhttps://www.digitalocean.com/community/tutorials/an-introduction-to-droplet-metadata [ユーザーデータ]を使用して、このインストールを自動化することもできます。 ドロップレットを作成するときにSSHキーを使用し、GitLabサーバーにそのSSHキーを追加してください。 次に、ドロップレット作成画面で[ユーザーデータを有効にする]チェックボックスをオンにして、次のbashスクリプトを入力し、赤で強調表示されている変数を独自のものに置き換えます。

#!/bin/bash -e

## Install Git and Puppet
wget -O /tmp/puppetlabs.deb http://apt.puppetlabs.com/puppetlabs-release-`lsb_release -cs`.deb
dpkg -i /tmp/puppetlabs.deb
apt-get update
apt-get -y install git-core puppet

# Clone the 'puppet' repo
cd /etc
mv puppet/ puppet-bak
git clone http:////puppet.git /etc/puppet

# Run Puppet initially to set up the auto-deploy mechanism
puppet apply /etc/puppet/manifests/site.pp

それだけです! これでマスターレスPuppetシステムが完成し、ログインすることなく任意の数の追加サーバーを起動できます。