LearningPuppet

29
システム管理ツール システム管理ツール Puppet Puppet ペパボ社内勉強会向け資料 ペパボ社内勉強会向け資料 ( ( )paperboy&co. )paperboy&co. 宮下 剛輔 宮下 剛輔

Transcript of LearningPuppet

Page 1: LearningPuppet

システム管理ツール システム管理ツール PuppetPuppetペパボ社内勉強会向け資料ペパボ社内勉強会向け資料

((株株)paperboy&co. )paperboy&co. 宮下 剛輔宮下 剛輔

Page 2: LearningPuppet

アジェンダアジェンダ

► PuppetPuppet概要概要 PuppetPuppetとは?とは?

PuppetPuppetの特徴の特徴

CfengineCfengineとの違いとの違い

► PuppetPuppet詳細詳細 ネットワーク構成ネットワーク構成

用語用語

マニフェストマニフェスト

動かしてみる動かしてみる

►参考情報リンク参考情報リンク

Page 3: LearningPuppet

PuppetPuppet概要概要

Page 4: LearningPuppet

PuppetPuppetとは?とは?

►システム管理の自動化ツールシステム管理の自動化ツール /etc/passwd /etc/passwd にユーザを追加にユーザを追加

ApacheApacheの設定ファイルを更新して再起動の設定ファイルを更新して再起動

croncronの設定の設定

yumyumパッケージのインストールパッケージのインストール//更新更新

……などといったことを自動で、複数サーバに対してなどといったことを自動で、複数サーバに対して一括実行できるツール一括実行できるツール

Page 5: LearningPuppet

PuppetPuppetの特徴の特徴

► RubyRubyでできているでできている► 抽象化レイヤーにより抽象化レイヤーによりOSOSの違いを吸収の違いを吸収

SolarisSolarisとかとかLinuxLinuxとかとかBSDBSDとかとか

yumyumとかとかaptaptとかとかportsportsとかとか

adduseradduserとかとかuseradduseraddとかとか

……などといった違いを意識することなく統一的な設定ができるなどといった違いを意識することなく統一的な設定ができる

► LDAPLDAPサポートサポート► 拡張しやすい拡張しやすい

PuppetPuppetでサポートしてないリソースタイプも定義できるでサポートしてないリソースタイプも定義できる

► 依存関係の処理依存関係の処理 httpd.confhttpd.confを更新したらを更新したらApacheApache再起動再起動

► 開発や開発やMLMLが盛り上がってるが盛り上がってる

Page 6: LearningPuppet

CfengineCfengineとの違いとの違い

►PuppetPuppetの特徴ともかぶりますが…の特徴ともかぶりますが…►「次世代「次世代CfengineCfengine」を標榜して、」を標榜して、CfengineCfengineをベーをベー

スとしながら、より良いものを目指しているスとしながら、より良いものを目指している►リソース抽象化レイヤーリソース抽象化レイヤー►依存関係の処理依存関係の処理►内部言語が強力内部言語が強力►リソースタイプの拡張が簡単リソースタイプの拡張が簡単►RubyRubyでできているでできている

Page 7: LearningPuppet

PuppetPuppet詳細詳細

Page 8: LearningPuppet

PuppetPuppetのネットワーク構成のネットワーク構成

puppetサーバ(puppetmasterd)

puppetクライアント(puppetd)

puppetクライアント(puppetd)

puppetクライアント(puppetd)

プロトコルは XMLRPC over HTTPS

実行結果レポートマニフェストの取得と実行

Page 9: LearningPuppet

PuppetPuppet用語用語

►マニフェストマニフェスト puppetpuppetクライアントで実行したい管理タスクが記述クライアントで実行したい管理タスクが記述

されたファイルされたファイル

puppetpuppetサーバで一括して維持管理するサーバで一括して維持管理する

►リソースリソース puppetpuppetの管理対象となるものの管理対象となるもの

ユーザとか、ファイルとか、ソフトウェアパッケージとユーザとか、ファイルとか、ソフトウェアパッケージとかか

Page 10: LearningPuppet

PuppetPuppetの動作概要 パターンの動作概要 パターン11

puppetサーバ(puppetmasterd)

puppetクライアント(puppetd)

① マニフェストを取りに行く(デフォルトは30分に1回)

② 取得したマニフェストにしたがってタスクを実行

③ 実行結果をレポート

Page 11: LearningPuppet

PuppetPuppetの動作概要 パターンの動作概要 パターン22

puppetサーバ(puppetmasterd)

puppetクライアント(puppetd)

① サーバ上でpuppetrunを実行してpuppetdをキックする

③ 取得したマニフェストにしたがってタスクを実行

④ 実行結果をレポート

② マニフェストを取りに行く

Page 12: LearningPuppet

マニフェストの基礎マニフェストの基礎

Page 13: LearningPuppet

リソースを定義するリソースを定義する

file { '/etc/hosts': owner => $default_owner, group => $default_group, mode => 644, source => 'puppet://server/module/hosts',}

これ全体が「リソース」

リソースタイプ

リソースのタイトル

リソースの属性

/etc/hosts を puppetサーバから取得し、オーナー、グループ、モードを適切に設定するためのリソース定義

Page 14: LearningPuppet

クラスでリソースをまとめるクラスでリソースをまとめる

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 リソース

クラスをノードに適用

Page 15: LearningPuppet

クラスを継承するクラスを継承する

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 クラスを定義

Page 16: LearningPuppet

リソースの依存関係リソースの依存関係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

Page 17: LearningPuppet

セレクタセレクタ

$sudo = $operatingsystem ? { FreeBSD => 'security/sudo', default => sudo,} OSがFreeBSDの場合、$sudo

にはsecurity/sudoが、それ以外のOSでは$sudoにはsudoがセットされる

条件によって値を変えるために利用するのがセレクタ

Page 18: LearningPuppet

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

Page 19: LearningPuppet

FacterFacter変数変数

►FacterFacterというライブラリによってセットされる変数というライブラリによってセットされる変数

►OSOSに関する情報がセットされるに関する情報がセットされる $operatingsystem$operatingsystem $hotname$hotname $domain$domain $kernel$kernel などなど

Page 20: LearningPuppet

FacterFacter変数の利用例変数の利用例

$sudo = $operatingsystem ? { FreeBSD => 'security/sudo', default => sudo,}

package { $sudo: ensure => latest, alias => sudo}

OSがFreeBSDの場合、$sudoにはsecurity/sudoが、それ以外のOSでは$sudoにはsudoがセットされる

OSに適したパッケージリソースが定義される(パッケージシステムは勝手にpuppetが判断してくれる)

Page 21: LearningPuppet

puppetpuppetを動かすまでの流れを動かすまでの流れ

Page 22: LearningPuppet

インストールインストール

# puppet # puppet クライアントクライアント

$ sudo yum install puppet$ sudo yum install puppet

# puppet # puppet サーバサーバ

$ sudo yum install puppet-server$ sudo yum install puppet-server

Page 23: LearningPuppet

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

} }

Page 24: LearningPuppet

puppetpuppetサーバデーモン起動サーバデーモン起動

# # 初回起動時に初回起動時にmkusersmkusersオプションでオプションで

# puppet# puppetユーザとグループを作成してくれるユーザとグループを作成してくれる

$ sudo puppetmasterd --mkusers$ sudo puppetmasterd --mkusers

# 2# 2度目以降は度目以降はmkusersmkusersオプションはいらないオプションはいらない

$ sudo puppetmasterd$ sudo puppetmasterd

Page 25: LearningPuppet

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

Page 26: LearningPuppet

サーバ側で証明書に署名サーバ側で証明書に署名

# # クライアントからのリクエストに対して署名するクライアントからのリクエストに対して署名する

$ sudo puppetca --list $ sudo puppetca --list

client.example.comclient.example.com

$ sudo puppetca --sign client.example.com$ sudo puppetca --sign client.example.com

Page 27: LearningPuppet

puppetpuppetクライアント起動(署名後)クライアント起動(署名後)

$ sudo puppetd --server myserver.domain.com$ sudo puppetd --server myserver.domain.com

Page 28: LearningPuppet

詳しくは詳しくは

►以上は大雑把な流れ以上は大雑把な流れ

►もう少し詳しい手順はもう少し詳しい手順は

http://trac.mizzy.org/puppet/wiki/GettingStartedhttp://trac.mizzy.org/puppet/wiki/GettingStarted を参照を参照

Page 29: LearningPuppet

参考資料参考資料

►puppet puppet 日本情報 日本情報 Wiki Wiki 「パペウィキ」「パペウィキ」 http://trac.mizzy.org/puppet/http://trac.mizzy.org/puppet/ ここから更に他の情報へのリンクがありますここから更に他の情報へのリンクがあります