序章

クラウドコンピューティングの現代の世界では、構成管理は重要なステップです。 構成管理ツールを使用すると、サーバーに構成を確実に展開できます。 この分野で最も成熟した構成管理ツールの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_ipyour_puppet_server_ipで参照されます。

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

Git Labsを設定する最も簡単な方法は、ワンクリック画像を使用することです。画像の選択の下のドロップレット作成ページで、アプリケーションタブをクリックし、GitLab7.10をクリックします。 14.04の0CE。 このチュートリアルに従って、GitLabsを手動でセットアップすることもできます。

ステップ1—Gitリポジトリを作成する

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

まず、お気に入りのブラウザでhttp://your_git_server_ipに移動して、GitLabsUIを開きます。 右下の詳細を入力してアカウントを作成します新しいユーザー? アカウントを作成するとグリーンを押すサインアップボタン。 アカウントアクティベーションメールが届きます。アカウントをアクティベートすると、メインページでサインインできるようになります。

メインページの緑色の+新規プロジェクトボタンをクリックします。 プロジェクトパスに「puppet」と入力し、プロジェクトの作成をクリックします。 プロジェクトパスフィールドに「puppet」と入力し、可視性レベル Public を選択し、緑色の CreateProjectボタンをクリックします。

後の手順で必要になるため、プロジェクト画面の上部に表示されるSSHURLを必ずコピーしてください。 [email protected]your_git_server_ip:username/puppet.gitのようになります。

ステップ2—SSHキーをGitLabsに追加する

このステップでは、PuppetサーバーにSSHキーを作成し、そのキーをGitLabsサーバーに追加します。

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

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

  1. ssh-keygen -t rsa

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

  1. cat ~/.ssh/id_rsa.pub

このキーをコピーします。 ssh-rsa long_alphanumeric_string [email protected]hostnameのようになります。

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

ステップ3—PuppetとGitをインストールする

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

Puppetサーバーで、最初にUbuntu14.04用のPuppetパッケージをダウンロードします。

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

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

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

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

  1. apt-get update

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

  1. apt-get install puppet git-core

この時点で、このチュートリアルの手順に従ってGit環境を構成する必要があります。

ステップ4—初期パペット構成をプッシュする

PuppetとGitがインストールされたら、Puppetリポジトリへの最初のプッシュを実行する準備が整いました。

まず、構成ファイルが存在する/etc/puppetディレクトリに移動します。

  1. cd /etc/puppet

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

  1. git init

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

  1. git add .

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

  1. git commit -m "Initial commit of Puppet files"

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

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

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

  1. 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またはお気に入りのテキストエディタを使用してファイルを開きます。

  1. 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を実行するための便利なモジュールを作成します。

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

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

  1. cd /etc/puppet/modules

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

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

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

  1. 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ディレクトリにあるpost-mergeという別のファイルを開きます。

  1. 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に指示する必要があります。

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

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

site.pp

node default {
    include cron-puppet
}

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

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

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

...

Notice: Finished catalog run in 0.18 seconds

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

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

  1. cd /etc/puppet

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

  1. git add .

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

  1. git commit -m "Added the cron-puppet module"

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

  1. 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システムができ、ログインしなくても追加のサーバーをいくつでも起動できます。