現代のクラウドコンピューティングの分野では、構成管理は重要なステップです。 構成管理ツールを使用すると、構成をサーバーに確実に展開できます。 [Puppet](https://www.digitalocean.com/community/tutorials/getting-started-with-puppet-code-manifests-and-modules)は、この分野で最も成熟した構成管理ツールの1つです。
一般的なPuppet環境では、ユーザーはワークステーションでPuppetモジュールを作成し、モジュールをバージョン制御サーバー(Gitなど)にプッシュしてから、これらのモジュールをPuppetマスターサーバーにプルダウンします。 Puppetクライアントを実行しているサーバーは、定期的にPuppetマスターサーバーに接続して、変更があるかどうかを確認し、変更がある場合は変更を適用します。
この状況は、登録されているサーバーの数を増やし始めるか、モジュールが非常に複雑になるまで、正常に機能します。この時点で、2つのオプションがあります。負荷を処理するためにPuppetマスターを収集するか(これには、Puppetの商用バージョンを購入する必要がある場合があります)、または単にPuppetマスターを放棄します。この記事では、2番目のオプションについて説明します。
所有されていないPuppet設定では、Gitを介してすべてのPuppetモジュールを各ノードにコピーしてから、Puppetに変更をローカルに適用させる必要があります。この方法の欠点は、各サーバーがすべてのモジュールをダウンロードしてから関連するモジュールを適用することです。そのため、たとえば機密情報を含む設定には最適ではありません。ただし、Puppetマスターなしで実行すると、柔軟性が大幅に向上し、インフラストラクチャを拡張せずに実行できます。
このチュートリアルは、PuppetとGitについてある程度の知識があることを前提としています。
このチュートリアルでは、2つのTencent Cloud [CVM](https://cloud.tencent.com/product/cvm?from=10680)を使用します。1つはGitサーバーとして実行され、もう1つはPuppetを介して変更を適用します。 Tencent Cloud CVMのIPアドレスを参照するために、それぞれ your_git_server_ip
と your_puppet_server_ip
を使用します。
したがって、このチュートリアルに従うには、次のものが必要です。
Git Labsを設定する最も簡単な方法は、クリック画像を使用することです。[画像の選択]の下のTencent Cloud CVM作成ページで、[アプリケーション]タブをクリックし、** 14.04の[GitLab7.10]をクリックします。 0 CE **。
最初のステップは、すべてのPuppetモジュールとマニフェストが保存されるリポジトリを作成することです。
まず、お気に入りのブラウザから http:// your_git_server_ip
にアクセスして、Git LabsUIを開きます。右側の[新規ユーザー]、[アカウントの作成]の下に詳細を入力してアカウントを作成し、緑色の[登録]ボタンを押します。アカウントアクティベーションメールが届きます。アカウントアクティベーション後、メインページからログインできるようになります。
メインページの緑色の** +新しいプロジェクトボタンをクリックします。 プロジェクトパスの "puppet"と入力し、[ CreateProject] **をクリックします。 [**プロジェクトパス] **フィールドに「puppet」と入力し、[**可視性レベル] **で[パブリック]を選択して、緑色の[**プロジェクトの作成] **ボタンをクリックします。 。
SSH URLは、後の手順で使用するため、プロジェクト画面の上部に表示されますので、必ずコピーしてください。このように git @ your_git_server_ip:username / puppet.git
のように見えます。
このステップでは、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キーを追加**]ボタンをクリックします。 タイトルで、キーの説明( "Root Puppet Key"など)をフィールドに追加し、公開キーを** Key **フィールドに貼り付けます。最後に、[追加]ボタンをクリックします。
このステップでは、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
この時点で、[このチュートリアル](https://cloud.tencent.com/developer/article/1350959?from=10680)の指示に従ってGit環境を構成する必要があります。
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
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
は、Puppetリポジトリである/ 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
これでPuppetが作成されましたが、何も機能していません。 Puppetが機能する方法は、マニフェストと呼ばれるファイルを調べて、それが何をすべきかを定義することです。したがって、このステップでは、Puppetを実行するための便利なモジュールを作成します。
cron-puppetと呼ばれる最初のモジュールは、Gitを介してPuppetをデプロイします。 Gitフックをインストールし、マージが成功した後にPuppet(git pullなど)を実行し、30分ごとに gitpull
を実行するcronジョブをインストールします。
まず、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からプルするように指示する理由です。
classcron-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 0else/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 in0.18 seconds
最後に、Gitリポジトリへの変更をコミットしましょう。まず、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
マニフェストを適用します。
Tencent Cloud CVMを作成するときに、ユーザーデータを使用してこのインストールを自動化することもできます。 Tencent Cloud CVMを作成するときは、必ずSSHキーを使用し、SSHキーをGitLabサーバーに追加してください。次に、Tencent Cloud CVM作成画面の[ユーザーデータを有効にする]チェックボックスをオンにし、次の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システムができました。
Masterless Puppet環境のセットアップに関連するチュートリアルの詳細については、[Tencent Cloud + Community](https://cloud.tencent.com/developer?from=10680)にアクセスして詳細を確認してください。
参照:「Ubuntu14.04でマスターレスパペット環境をセットアップする方法」
Recommended Posts