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モジュールとマニフェストが保存されるリポジトリを作成することです。
まず、GitLabsUIを開きます。 http://your_git_server_ip
お気に入りのブラウザで。 右下の詳細を入力してアカウントを作成します
メインページの緑色の+新規プロジェクトボタンをクリックします。 プロジェクトパスに「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
まず、からすべてを削除します [master]
Puppetマスターを実行していないので、下に並べます。 また、の最後の行を削除します [main]
で始まるセクション templatedir
、これは非推奨であるため。 最後に、次の行を変更します 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ジョブをインストールします git pull
30分ごと。
まず、Puppetモジュールディレクトリに移動します。
- cd /etc/puppet/modules
次に、 cron-puppet
を含むディレクトリ manifests
と files
ディレクトリ。
- sudo mkdir -p cron-puppet/manifests cron-puppet/files
と呼ばれるファイルを作成して開きます init.pp
の中に manifests
ディレクトリ。
- 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'],
}
}
ファイルを保存して閉じてから、という別のファイルを開きます post-merge
の中に files
ディレクトリ。
- 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
. これにより、「デフォルト」と呼ばれるノード分類が作成されます。 ‘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システムができ、ログインしなくても任意の数の追加サーバーを起動できます。