Ubuntu14.04でマスターレスPuppet環境をセットアップする方法
序章
クラウドコンピューティングの現代の世界では、構成管理は重要なステップです。 構成管理ツールを使用すると、サーバーに構成を確実に展開できます。 この分野で最も成熟した構成管理ツールの1つは、Puppetです。
典型的なPuppet環境では、ユーザーはワークステーションにPuppetモジュールを書き込み、モジュールをバージョン管理サーバーにプッシュします(例: Git)、次にそれらのモジュールをPuppetマスターにプルダウンします。 Puppetクライアントを実行しているサーバーは、定期的にPuppetマスターに接続して、変更があったかどうかを確認し、変更があった場合は適用します。
このシナリオは、チェックインしているサーバーの数をスケールアップする必要があるか、モジュールがかなり複雑になるまで、問題なく機能します。 その時点で、2つのオプションがあります。負荷を処理するためにPuppetマスターをクラスター化するか(Puppetの商用バージョンを購入する必要があります)、Puppetマスターを完全にドロップします。 この記事では、2番目のオプションについて説明します。
マスターレスPuppetセットアップでは、すべてのPuppetモジュールのコピーをGit経由で各ノードにコピーしてから、Puppetに変更をローカルに適用させる必要があります。 この方法の欠点は、各サーバーがすべてのモジュールをダウンロードしてから、関連するものを適用することです。そのため、たとえば、 機密情報を含むセットアップ。 ただし、Puppetマスターなしで実行すると、多くの柔軟性が得られ、インフラストラクチャを拡張しなくてもうまく機能します。
前提条件
Puppetを初めて使用する場合は、このチュートリアルでツールの実用的な知識があることを前提としているため、ここで一時停止してPuppetに関するこの記事を最初に読むことをお勧めします。 Gitを初めて使用する場合は、このGitシリーズの紹介も確認できます。
このチュートリアルでは、2つのドロップレットを使用します。1つはGitサーバーとして実行され、もう1つはPuppetを介して変更を適用します。 これらのドロップレットのIPアドレスは、それぞれyour_git_server_ip
とyour_puppet_server_ip
で参照されます。
したがって、このチュートリアルに従うには、次のものが必要です。
- sudo非rootユーザーおよびSSHキーが追加された1つのUbuntu14.04ドロップレット。
- SSHキーが追加されGitLabsがインストールされた別のUbuntu14.04Dropet。
Git Labsを設定する最も簡単な方法は、ワンクリック画像を使用することです。画像の選択の下のドロップレット作成ページで、アプリケーションタブをクリックし、GitLab7.10をクリックします。 14.04の0CE。 このチュートリアルに従って、GitLabsを手動でセットアップすることもできます。
ステップ1—Gitリポジトリを作成する
最初のステップは、すべてのPuppetモジュールとマニフェストが保存されるリポジトリを作成することです。
まず、お気に入りのブラウザでhttp://your_git_server_ip
に移動して、GitLabsUIを開きます。 右下の詳細を入力してアカウントを作成します
メインページの緑色の+新規プロジェクトボタンをクリックします。 プロジェクトパスに「puppet」と入力し、プロジェクトの作成をクリックします。 プロジェクトパスフィールドに「puppet」と入力し、可視性レベルで Public を選択し、緑色の CreateProjectボタンをクリックします。
後の手順で必要になるため、プロジェクト画面の上部に表示されるSSHURLを必ずコピーしてください。 git@your_git_server_ip:username/puppet.git
のようになります。
ステップ2—SSHキーをGitLabsに追加する
このステップでは、PuppetサーバーにSSHキーを作成し、そのキーをGitLabsサーバーに追加します。
rootとしてPuppetサーバーにログインします。 (Puppetのファイルはrootが所有するため、Puppetフォルダーに最初のGitリポジトリーをセットアップする権限が必要です。)
rootユーザーのSSHキーを作成します。 このキーはユーザーではなくスクリプトによって使用されるため、パスフレーズを入力しないように注意してください。
- ssh-keygen -t rsa
次に、次のコマンドで公開鍵を表示します。
- cat ~/.ssh/id_rsa.pub
このキーをコピーします。 ssh-rsa long_alphanumeric_string root@hostname
のようになります。
次に、Git Labsダッシュボードページで、右から2番目のトップバーにあるプロファイル設定アイコンをクリックします。 左側のメニューで、 SSHキーをクリックしてから、緑色のSSHキーの追加ボタンをクリックします。 Title フィールドに、キーの説明(「ルートパペットキー」など)を追加し、公開キーをKeyフィールドに貼り付けます。 最後に、キーの追加をクリックします。
ステップ3—PuppetとGitをインストールする
このステップでは、PuppetとGitをインストールします。
Puppetサーバーで、最初にUbuntu14.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
この時点で、このチュートリアルの手順に従ってGit環境を構成する必要があります。
ステップ4—初期パペット構成をプッシュする
PuppetとGitがインストールされたら、Puppetリポジトリへの最初のプッシュを実行する準備が整いました。
まず、構成ファイルが存在する/etc/puppet
ディレクトリに移動します。
- cd /etc/puppet
ここでgitリポジトリを初期化します。
- git init
現在のディレクトリにすべてを追加します。
- git add .
説明的なコメントでこれらの変更をコミットします。
- git commit -m "Initial commit of Puppet files"
手順1でコピーしたSSHURLを使用して、前に作成したGitプロジェクトをオリジンとして追加します。
- git remote add origin git@your_server_ip:username/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
ファイルは次のようになります。
[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
は次のようになります。
[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を実行するための便利なモジュールを作成します。
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からプルするように指示するものです。
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
ディレクトリにあるpost-merge
という別のファイルを開きます。
- 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
このファイルを保存して閉じます
最後に、/etc/puppet/manifests/site.pp
に正規にあるグローバルマニフェストを作成して、このモジュールを実行するようにPuppetに指示する必要があります。
- sudo nano /etc/puppet/manifests/site.pp
以下をsite.pp
に貼り付けます。 これにより、「デフォルト」と呼ばれるノード分類が作成されます。 ‘default’ノードに含まれるものはすべて、すべてのサーバーで実行されます。 ここでは、cron-puppet
モジュールを実行するように指示します。
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 "Added the cron-puppet module"
最後に、変更をプッシュします。
- git push -u origin master
結論
サーバーを追加するには、上記の手順3に従って新しいサーバーにPuppetとGitをインストールし、Gitリポジトリを/etc/puppet
に複製し、site.pp
マニフェストを適用します。
ドロップレットを作成するときにユーザーデータを使用して、このインストールを自動化することもできます。 ドロップレットを作成するときは必ずSSHキーを使用し、そのSSHキーをGitLabサーバーに追加してください。 次に、ドロップレット作成画面のユーザーデータを有効にするチェックボックスをオンにして、次の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://your_git_server_ip/username/puppet.git /etc/puppet
# Run Puppet initially to set up the auto-deploy mechanism
puppet apply /etc/puppet/manifests/site.pp
それで全部です! これでマスターレスPuppetシステムができ、ログインしなくても追加のサーバーをいくつでも起動できます。