Puppetのインストールと動作確認、トラブル対処法:新人インフラ技術者のためのサーバー構築/運用自動化入門(3)(4/4 ページ)
サーバー構築の自動化で利用される技術、自動化ツールとして「Kickstart」「Puppet」を紹介し、構築から運用まで、システムライフサイクル全体にわたる運用管理の自動化についても解説する連載。今回は、agent/master型のPuppetのセットアップ方法を順に解説。インターネットに接続できない環境や証明書の不整合の解決法も。
コラム:証明書の不整合トラブルの解決法
agent/master型では証明書の不整合トラブルが発生することがあります。これはホスト名が同じでも鍵データは毎回作っているため、agent側を再インストールした場合はmaster側で保管している鍵データと不整合を起こしてしまいます。
今回のような検証だとmaster側を再インストールする場合もあるかもしれませんが、その場合もagent側が保管しているmasterの鍵データと不整合を起こします。不整合を起こした場合は保管している鍵データを削除するしかありません。
master側の鍵データ削除
agent側を再インストールした場合は、master側の鍵データを削除しないと接続できません。master側で以下のコマンドラインのように鍵データを削除します。
# puppet cert list --all + "agent" (SHA256) xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx: + "builder" (SHA256) xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx: # puppet cert clean agent ←削除したいagentのホスト名(--allで全て削除可能) Notice: Revoked certificate with serial 6 Notice: Removing file Puppet::SSL::Certificate agent at '/var/lib/puppet/ssl/ca/signed/agent.pem' Notice: Removing file Puppet::SSL::Certificate agent at '/var/lib/puppet/ssl/certs/agent.pem' # puppet cert list --all + "builder" (SHA256) xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:
agent側の鍵データ削除
master側を再インストールして再構築し直した場合、「Error: Could not request certificate: The certificate retrieved from the master does not match the agent's private key.」というエラーでagent側の鍵データを削除しないと接続できないことがあるでしょう。
agent側の鍵データは以下のコマンドラインのように削除します。
# rm -rf /var/lib/puppet/ssl/*
これでもエラーが解消しない場合は、前述のmaster側の鍵データ削除手順も併せて実行してみてください。
Puppetを動かしてみよう!
せっかくPuppetが動くようになったのですから、実際に何か作業をさせてみましょう。連載第1回の「環境構築自動化の手順と評価検証、Puppetの基礎知識」で紹介しましたが、Puppetの作業はPuppet言語と呼ばれる言語で記述し、これをマニフェストと呼びます。
マニフェストについては次回詳しく説明しますので、ここではシンプルにファイルを一つだけ作るマニフェストを作ってみましょう。
agent/master型のPuppetではmaster側にあるsite.ppファイル(/etc/puppet/manifests/site.pp)がagent側で実行されるマニフェストファイルになりますので、以下の内容をmaster側のsite.ppファイル(/etc/puppet/manifests/site.pp)に記述してください。
file { '/tmp/hello.txt': content => 'hello puppet', }
このマニフェストはtmpディレクトリ(/tmp)にhello.txtというファイル名で「hello puppet」という中身のテキストファイルを作成します。プログラミング経験のある方には“content”の末尾にあるカンマがタイプミスに見えるかもしれませんが、間違いではありませんので、その通り記述してください。
保存したらテストしてみましょう。puppet applyコマンドを使うと、引数で指定したマニフェストを実行できます。Chefだとchef-applyに似ているコマンドです。--noopオプションを付加すると、マニフェスト実行はしますが、実際にシステムへの変更はしない“ドライラン”になります。
それでは、master側で以下のようなコマンドラインを実行してテストしてみましょう。
# puppet apply /etc/puppet/manifests/site.pp --noop Notice: Compiled catalog for builder in environment production in 0.04 seconds Notice: /Stage[main]/Main/File[/tmp/hello.txt]/ensure: current_value absent, should be file (noop) Notice: Class[Main]: Would have triggered 'refresh' from 1 events Notice: Stage[main]: Would have triggered 'refresh' from 1 events Notice: Finished catalog run in 0.02 seconds
「Warning: Could not retrieve fact fqdn」という警告が出るかもしれませんが無視して構いません。もし、何かしらエラーが出た場合は記述内容をよく見直してください。問題なければ--noopオプションを外して実際にファイルを作成してみましょう。
# puppet apply /etc/puppet/manifests/site.pp Notice: Compiled catalog for builder in environment production in 0.04 seconds Notice: /Stage[main]/Main/File[/tmp/hello.txt]/ensure: defined content as '{md5}19ee62e0c6b5f00aaf9b02280c0dad66' Notice: Finished catalog run in 0.03 seconds # ls -l /tmp/hello.txt -rw-r--r-- 1 root root 12 8月 7 16:59 2014 /tmp/hello.txt # cat /tmp/hello.txt hello puppet
作成されましたね。今はmaster側でしたが、同じことをagent側でもできるようになっています。それではagent側でも実行してみましょう。agent側で以下のコマンドラインのように実行します。
# puppet agent -t --verbose Info: Retrieving pluginfacts Info: Retrieving plugin Info: Caching catalog for agent Info: Applying configuration version '1407398971' Notice: /Stage[main]/Main/File[/tmp/hello.txt]/ensure: defined content as '{md5}19ee62e0c6b5f00aaf9b02280c0dad66' Notice: Finished catalog run in 0.02 seconds # ls -l /tmp/hello.txt -rw-r--r--. 1 root root 12 8月 7 17:09 2014 /tmp/hello.txt # cat /tmp/hello.txt hello puppet
agent側でも同じようにファイルが作成されましたね。
次回はHTTPサーバーのマニフェストの作り方
次回はHTTPサーバーのセットアップを例にマニフェストの作り方を詳しく説明します。お楽しみに。
R子 う〜ん、う〜ん(悩)
K男 どうしたのかな?
R子 何回やっても「certificate verify failed」って出ちゃって動かないんです……(泣)
K男 ちゃんと説明した通りにセットアップしたかな?
R子 はい、新しいサーバーを開梱してすぐOSをインストールして、そのままPuppetを入れたのですが……。
K男 開梱してすぐOSインストールしてPuppet? インストールした後にNTPで時間合わせた?
R子 ……あ(汗)
K男 あれだけ時間合わせろと注意したのに! 人の話をちゃんと聞け〜!(おこ)
R子 ご、ごめんなさ〜い(泣)
実機を使う場合、agent/master型では時間の合わせ忘れによるエラーが多いので注意しましょう。
著者プロフィール
菅原亮(すがはら りょう)
所属:NTT OSSセンタ シニア・エキスパート
1973年生まれ。10歳の時にプログラミングに目覚める。
1994年にFM-TOWNS上でLinuxを使い始めて以来、仕事趣味問わずOSSシステムを構築するようになる。
2012年よりOSSシステムの構築自動化に取り組み始め、昔の苦労を懐かしみつつ自動化の普及促進に取り組んでいる。
個人ではNTSyslog日本語対応版など主にWindows用アプリを手掛ける。趣味は家庭菜園と料理の手動構築で愛車はシルビア。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- CloudStackによるプライベートクラウド構築術(8):ChefのKnifeでCloudStackを操作する方法
knife-cloudstackを用意してコマンドラインでCloudStackを操作してみよう。基本コマンドのリファレンスも紹介する - PowerShell DSCで始めるWindowsインフラストラクチャ自動化の基本:PowerShell Desired State Configuration(DSC)とは(前)
Windows OSの設定や構成を変更する場合、GUIの管理ツールを使うのが一般的である。だが台数が多かったり、構成変更や以前の構成への復旧などが頻繁だったりするとGUIでは非常に面倒だし、間違いもしやすくなる。こんな場合はPowerShell DSCを使ってインフラ構築作業を自動化するとよい。 - OSS「JobScheduler」で実現するこれからの運用自動化(1):JobSchedulerの機能と設定〜基礎編
本連載では運用管理の一要素である「バッチジョブ管理」に着目し、より効率よいバッチジョブ管理を実現するためのツールであるオープンソースの「JobScheduler」について解説します。 - クラウド&DevOps時代の運用をZabbixで(3):DevOps実践に有用なZabbixの機能〜自動化機能で運用負荷削減
ますますクラウド化が進む環境において、システムにはより迅速な対応が求められるようになっています。変化の早いシステムを適切に運用していくためにはどうすればいいのでしょうか? この記事では、クラウドやDevOpsを前提としたITシステムの「運用」に求められることを整理し、そういった運用に対して、オープンソースの統合監視ツール「Zabbix」がどのように有効活用できるかを紹介します。 - 運用自動化ツールまとめ(国内ベンダ編):工数削減だけじゃない、自動化ツールの真のメリット
運用自動化というと「人員削減」「コストが掛かる」といったネガティブな見方をする向きも多い。だが仮想化、クラウド時代において運用自動化とはそれほど単純なものではない。国内ベンダ4社のツールに真の意義を探る。 - 運用自動化ツールまとめ(外資ベンダー編):運用自動化ツールは経営の武器へ
運用自動化というと「コスト削減」「効率化」といったイメージが強いが、攻めの経営を支える武器となるものでもある。後編では外資ベンダー3社の運用自動化ツールを紹介する。