LearningPuppet
-
Upload
masafumi-otsune -
Category
Documents
-
view
328 -
download
1
Transcript of LearningPuppet
システム管理ツール システム管理ツール PuppetPuppetペパボ社内勉強会向け資料ペパボ社内勉強会向け資料
((株株)paperboy&co. )paperboy&co. 宮下 剛輔宮下 剛輔
アジェンダアジェンダ
► PuppetPuppet概要概要 PuppetPuppetとは?とは?
PuppetPuppetの特徴の特徴
CfengineCfengineとの違いとの違い
► PuppetPuppet詳細詳細 ネットワーク構成ネットワーク構成
用語用語
マニフェストマニフェスト
動かしてみる動かしてみる
►参考情報リンク参考情報リンク
PuppetPuppet概要概要
PuppetPuppetとは?とは?
►システム管理の自動化ツールシステム管理の自動化ツール /etc/passwd /etc/passwd にユーザを追加にユーザを追加
ApacheApacheの設定ファイルを更新して再起動の設定ファイルを更新して再起動
croncronの設定の設定
yumyumパッケージのインストールパッケージのインストール//更新更新
……などといったことを自動で、複数サーバに対してなどといったことを自動で、複数サーバに対して一括実行できるツール一括実行できるツール
PuppetPuppetの特徴の特徴
► RubyRubyでできているでできている► 抽象化レイヤーにより抽象化レイヤーによりOSOSの違いを吸収の違いを吸収
SolarisSolarisとかとかLinuxLinuxとかとかBSDBSDとかとか
yumyumとかとかaptaptとかとかportsportsとかとか
adduseradduserとかとかuseradduseraddとかとか
……などといった違いを意識することなく統一的な設定ができるなどといった違いを意識することなく統一的な設定ができる
► LDAPLDAPサポートサポート► 拡張しやすい拡張しやすい
PuppetPuppetでサポートしてないリソースタイプも定義できるでサポートしてないリソースタイプも定義できる
► 依存関係の処理依存関係の処理 httpd.confhttpd.confを更新したらを更新したらApacheApache再起動再起動
► 開発や開発やMLMLが盛り上がってるが盛り上がってる
CfengineCfengineとの違いとの違い
►PuppetPuppetの特徴ともかぶりますが…の特徴ともかぶりますが…►「次世代「次世代CfengineCfengine」を標榜して、」を標榜して、CfengineCfengineをベーをベー
スとしながら、より良いものを目指しているスとしながら、より良いものを目指している►リソース抽象化レイヤーリソース抽象化レイヤー►依存関係の処理依存関係の処理►内部言語が強力内部言語が強力►リソースタイプの拡張が簡単リソースタイプの拡張が簡単►RubyRubyでできているでできている
PuppetPuppet詳細詳細
PuppetPuppetのネットワーク構成のネットワーク構成
puppetサーバ(puppetmasterd)
puppetクライアント(puppetd)
puppetクライアント(puppetd)
puppetクライアント(puppetd)
プロトコルは XMLRPC over HTTPS
実行結果レポートマニフェストの取得と実行
PuppetPuppet用語用語
►マニフェストマニフェスト puppetpuppetクライアントで実行したい管理タスクが記述クライアントで実行したい管理タスクが記述
されたファイルされたファイル
puppetpuppetサーバで一括して維持管理するサーバで一括して維持管理する
►リソースリソース puppetpuppetの管理対象となるものの管理対象となるもの
ユーザとか、ファイルとか、ソフトウェアパッケージとユーザとか、ファイルとか、ソフトウェアパッケージとかか
PuppetPuppetの動作概要 パターンの動作概要 パターン11
puppetサーバ(puppetmasterd)
puppetクライアント(puppetd)
① マニフェストを取りに行く(デフォルトは30分に1回)
② 取得したマニフェストにしたがってタスクを実行
③ 実行結果をレポート
PuppetPuppetの動作概要 パターンの動作概要 パターン22
puppetサーバ(puppetmasterd)
puppetクライアント(puppetd)
① サーバ上でpuppetrunを実行してpuppetdをキックする
③ 取得したマニフェストにしたがってタスクを実行
④ 実行結果をレポート
② マニフェストを取りに行く
マニフェストの基礎マニフェストの基礎
リソースを定義するリソースを定義する
file { '/etc/hosts': owner => $default_owner, group => $default_group, mode => 644, source => 'puppet://server/module/hosts',}
これ全体が「リソース」
リソースタイプ
リソースのタイトル
リソースの属性
/etc/hosts を puppetサーバから取得し、オーナー、グループ、モードを適切に設定するためのリソース定義
クラスでリソースをまとめるクラスでリソースをまとめる
class sudo { package { $sudo: ensure => latest, alias => sudo } file { $sudoers: source => 'puppet://server/module/sudoers', mode => 440, owner => $default_owner, group => $default_group, alias => sudoers }}node www { include sudo }node ‘mail.hoge.com’ { include sudo }
「sudo」クラスを定義
package リソース
file リソース
クラスをノードに適用
クラスを継承するクラスを継承する
class base { file { "/my/file": content => template("base.erb") }}
class sub inherits base { # override the content File["/my/file"] { content => template("other.erb") }}
base クラスを継承した sub クラスを定義
base クラスの /my/file リソースの属性を上書き
base クラスを定義
リソースの依存関係リソースの依存関係class ssh { package { 'ssh': eusure => latest, name => $operationsystem ? { FreeBSD => 'security/openssh', default => 'openssh' }, }, file { '/etc/ssh': source => puppet://server/module/ssh, recurse => true, notify => Service[ssh] }, service { 'ssh': name => sshd, ensure => running, subscribe => Package[ssh] },}
/etc/ssh 以下のファイルに変更があれば、ssh サービスリソースに再起動を促す
sshパッケージリソースに変更があれば、サービスを再起動する
notifyかsubscribeのどちらか一方だけ定義すればOK
セレクタセレクタ
$sudo = $operatingsystem ? { FreeBSD => 'security/sudo', default => sudo,} OSがFreeBSDの場合、$sudo
にはsecurity/sudoが、それ以外のOSでは$sudoにはsudoがセットされる
条件によって値を変えるために利用するのがセレクタ
casecase
casecase $operatingsystem { $operatingsystem { Darwin:Darwin: { { file { "/some/file":file { "/some/file": ensure => presentensure => present }} }} default:default: { { file { "/other/file":file { "/other/file": ensure => presentensure => present }} }}}}
OSXの場合のfileリソース定義
その他のOSの場合のfileリソース定義
条件によってリソース定義を変えるために利用するのがcase
FacterFacter変数変数
►FacterFacterというライブラリによってセットされる変数というライブラリによってセットされる変数
►OSOSに関する情報がセットされるに関する情報がセットされる $operatingsystem$operatingsystem $hotname$hotname $domain$domain $kernel$kernel などなど
FacterFacter変数の利用例変数の利用例
$sudo = $operatingsystem ? { FreeBSD => 'security/sudo', default => sudo,}
package { $sudo: ensure => latest, alias => sudo}
OSがFreeBSDの場合、$sudoにはsecurity/sudoが、それ以外のOSでは$sudoにはsudoがセットされる
OSに適したパッケージリソースが定義される(パッケージシステムは勝手にpuppetが判断してくれる)
puppetpuppetを動かすまでの流れを動かすまでの流れ
インストールインストール
# puppet # puppet クライアントクライアント
$ sudo yum install puppet$ sudo yum install puppet
# puppet # puppet サーバサーバ
$ sudo yum install puppet-server$ sudo yum install puppet-server
puppetpuppetサーバ上にマニフェストファイルを置くサーバ上にマニフェストファイルを置く
#/etc/puppet/manifests/site.pp#/etc/puppet/manifests/site.pp
file { "/etc/sudoers":file { "/etc/sudoers":
owner => root,owner => root,
group => root,group => root,
mode => 440mode => 440
} }
puppetpuppetサーバデーモン起動サーバデーモン起動
# # 初回起動時に初回起動時にmkusersmkusersオプションでオプションで
# puppet# puppetユーザとグループを作成してくれるユーザとグループを作成してくれる
$ sudo puppetmasterd --mkusers$ sudo puppetmasterd --mkusers
# 2# 2度目以降は度目以降はmkusersmkusersオプションはいらないオプションはいらない
$ sudo puppetmasterd$ sudo puppetmasterd
puppetpuppetクライアントデーモン起動クライアントデーモン起動((初回初回))
# # 初回は初回はSSLSSL証明書を作成して、サーバ側で署名してもらう証明書を作成して、サーバ側で署名してもらう
$ puppetd --server myserver.domain.com \$ puppetd --server myserver.domain.com \
--waitforcert 60 --test--waitforcert 60 --test
info: Creating a new certificate request for info: Creating a new certificate request for client.example.comclient.example.com
info: Creating a new SSL key at info: Creating a new SSL key at /etc/puppet/ssl/private_keys/client.example.com.p/etc/puppet/ssl/private_keys/client.example.com.pemem
warning: peer certificate won't be verified in warning: peer certificate won't be verified in this SSL session notice: Did not receive this SSL session notice: Did not receive certificate certificate
サーバ側で証明書に署名サーバ側で証明書に署名
# # クライアントからのリクエストに対して署名するクライアントからのリクエストに対して署名する
$ sudo puppetca --list $ sudo puppetca --list
client.example.comclient.example.com
$ sudo puppetca --sign client.example.com$ sudo puppetca --sign client.example.com
puppetpuppetクライアント起動(署名後)クライアント起動(署名後)
$ sudo puppetd --server myserver.domain.com$ sudo puppetd --server myserver.domain.com
詳しくは詳しくは
►以上は大雑把な流れ以上は大雑把な流れ
►もう少し詳しい手順はもう少し詳しい手順は
http://trac.mizzy.org/puppet/wiki/GettingStartedhttp://trac.mizzy.org/puppet/wiki/GettingStarted を参照を参照
参考資料参考資料
►puppet puppet 日本情報 日本情報 Wiki Wiki 「パペウィキ」「パペウィキ」 http://trac.mizzy.org/puppet/http://trac.mizzy.org/puppet/ ここから更に他の情報へのリンクがありますここから更に他の情報へのリンクがあります