Ubuntu14.04でMasterlessPuppet環境をセットアップする方法

前書き ##

現代のクラウドコンピューティングの分野では、構成管理は重要なステップです。 構成管理ツールを使用すると、構成をサーバーに確実に展開できます。 [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 **。

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

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

まず、お気に入りのブラウザから http:// your_git_server_ipにアクセスして、Git LabsUIを開きます。右側の[新規ユーザー]、[アカウントの作成]の下に詳細を入力してアカウントを作成し、緑色の[登録]ボタンを押します。アカウントアクティベーションメールが届きます。アカウントアクティベーション後、メインページからログインできるようになります。

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

SSH URLは、後の手順で使用するため、プロジェクト画面の上部に表示されますので、必ずコピーしてください。このように git @ your_git_server_ip:username / puppet.gitのように見えます。

ステップ2-GitLabsのSSHキーを追加する

このステップでは、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 **フィールドに貼り付けます。最後に、[追加]ボタンをクリックします。

ステップ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

この時点で、[このチュートリアル](https://cloud.tencent.com/developer/article/1350959?from=10680)の指示に従ってGit環境を構成する必要があります。

ステップ4-初期のPuppet構成をプッシュします

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は、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

ステップ6-パペットモジュールを追加する

これで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

Ubuntu14.04でMasterlessPuppet環境をセットアップする方法
Ubuntu18.04でDNSサーバーを設定する方法
Ubuntu14.04でGogsを設定する方法
Ubuntu14.04でRを設定する方法
Ubuntu14.04でUFWを使用してファイアウォールを設定する方法
Ubuntu14.04で本番Elasticsearchクラスターをセットアップする方法
Ubuntu14.04でShinyServerをセットアップする方法
Ubuntu18.04で時刻同期を設定する方法
Ubuntu16.04に基づいて固定IPを設定する方法
UbuntuとRaspbianでJavaホームを設定する方法
Ubuntu16.04で匿名ダウンロード用にvsftpdを設定する方法
Ubuntu16.04でApache仮想ホストを設定する方法
Ubuntu20.04でApache仮想ホストを設定する方法
Ubuntu14.04でNginxを使用してパスワード認証を設定する方法
Ubuntu16.04でユーザーディレクトリ用にvsftpdを設定する方法
Ubuntu16.04でPostgreSQLの起動を設定する方法
Ubuntu18.04サーバーで静的IPを設定する方法
Ubuntu18.04サーバーで静的IPを設定する方法
CentOS8でSSHキーを設定する方法
ubuntu14.04で静的IPを設定する方法を詳しく説明します
centos7.2でLAMP環境を構築する方法
Ubuntu16.04用にGhostワンクリックアプリを設定する方法
Ubuntu14.04でHexoを使用してブログを開始する方法
Ubuntu18.04に基づいて固定IPを構成する方法
Ubuntu14.04でPython仮想環境を作成する方法
UbuntuスタートアップでTmuxサービススクリプトを実行する方法
Ubuntu20.04にRubyをインストールする方法
Ubuntu20.04にMemcachedをインストールする方法
Ubuntu20.04にMySQLをインストールする方法
Ubuntu20.04にVirtualBoxをインストールする方法
CentOS7でApache仮想ホストを設定する方法
UbuntuにProtobuf3をインストールするための詳細なチュートリアル
Ubuntu20.04にNginxをインストールする方法
Ubuntu20.04にApacheをインストールする方法
Ubuntu20.04にGitをインストールする方法
Ubuntu16.04にNode.jsをインストールする方法
Ubuntu20.04にMySQLをインストールする方法
Ubuntu20.04にVagrantをインストールする方法
Ubuntu14.04にBacula-Webをインストールする方法
Ubuntu16.04にPostgreSQLをインストールする方法
Ubuntu20.04にGitをインストールする方法
Ubuntu18.04にAnaconda3をインストールする方法
UbuntuでGitサーバーを構築する方法を教えてください
Ubuntu20.04でタイムゾーンを設定または変更する方法
Ubuntu18.04にMemcachedをインストールする方法
Ubuntu16.04にJenkinsをインストールする方法
Ubuntu14.04にMemSQLをインストールする方法
Ubuntu20.04にGoをインストールする方法
Ubuntu16.04にMongoDBをインストールする方法
Ubuntu14.04にMailpileをインストールする方法
Ubuntu16.04にPrestaShopをインストールする方法
Ubuntu14.04でPHP7にアップグレードする方法
Ubuntu20.04にSkypeをインストールする方法
Ubuntu20.04にJenkinsをインストールする方法
Ubuntu18.04にPython3.8をインストールする方法
Ubuntu18.04にKVMをインストールする方法
Ubuntu20.04にKVMをインストールする方法
ubuntu14.04にopencv3.0.0をインストールする方法
Ubuntu20.04にAnacondaをインストールする方法
Ubuntu16.04にPrometheusをインストールする方法
Ubuntu18.04にJenkinsをインストールする方法