背景/概要
puppetを使う機会が出てきたので調べたことのメモを記載。commitログとかみてると結構頻繁に今でも更新されていてちょっとびっくりした。
以下に全てがまとまっている。
www.slideshare.net
puppetとは/特徴とか
github.com
puppetとは構成管理ツールの一つ。Ansibleとかと競合するツール。「クライアント/サーバ構成」でサーバ構成を集中管理できる設定管理ツールで各ノードにはエージェントが必要。Ruby型のDSLが使える。
ドキュメントとかは以下
www.puppetcookbook.com
ターゲットシステム (またはノード) 上で実行される Puppet デーモンは、Puppet エージェントと呼ばれる。エージェントは構成の更新がないかどうかマスターをポーリングする。この辺がAnsible使っていると理解しづらい点かなと思う。
Ansibleとの比較
一番気になるのがやはりpull型という点。plus/consあると思うけど実際使ってから感じていく。
環境構築
master/agetnそれぞれの手順
master
$ yum -y install https://yum.puppetlabs.com/puppetlabs-release-el-7.noarch.rpm
$ sed -i -e "s/enabled=1/enabled=0/g" /etc/yum.repos.d/puppetlabs.repo
$ yum --enablerepo=puppetlabs-products,puppetlabs-deps -y install puppet-server
agent
$ yum -y install https://yum.puppetlabs.com/puppetlabs-release-el-7.noarch.rpm
$ sed -i -e "s/enabled=1/enabled=0/g" /etc/yum.repos.d/puppetlabs.repo
$ yum --enablerepo=puppetlabs-products,puppetlabs-deps -y install puppet
$ puppet agent --test --ca_server=192.168.1.15
$ systemctl start puppet
ハンズオン?
master1台あればできるhello world。noticeはdebug message的な使い方をするらしいので必須。
[root@master manifests]# cat hello.pp
notice("Hello, World!")
[root@master manifests]# puppet apply hello.pp
Notice: Scope(Class[main]): Hello, World!
Notice: Compiled catalog for master in environment production in 0.12 seconds
Notice: Finished catalog run in 0.01 seconds
グループ/ユーザ追加
group { "developer" :
ensure => "present",
gid => "1101",
}
user { "developer01" :
ensure => "present",
uid => "1101",
gid => "developer",
home => "/home/developer01",
managehome => "true",
shell => "/bin/bash",
password => '$6$aqc3cun1$QpzeHomBlMEcKmCOkeDa9VItfbzi4R.NTyLm7r7ak6Mc9oxtQSzBlfgFtvQcvBNkr/OEZMXXu6XegP1g/p67O1',
expiry => "2016-12-31",
}
nodeを指定してパッケージを追加
node 'slave' {
package {['ypbind.x86_64']:
ensure => 'present',
}
}
即時反映させたい
puppet-agentを再起動させれば即読み込む。
puppetで使える関数を知りたい
facterで見れる。
Puppetのmoduleのmanifestsのマニフェスト構成の基本ディレクトリなるものがあるらしいのでそちらを試す。
[root@master puppet]# tree -L 1
.
├── auth.conf
├── environments
├── fileserver.conf
├── manifests // modues配下を読み行く
├── modules // ここに実際に行いたい操作を書いたファイルを置く
└── puppet.conf
3 directories, 3 files
またモジュール内には以下のファイルが置かれるのがデファクトらしい。
- params.pp -> そのmodule内で使われる変数、default値の定義
- init.pp -> 同一モジュール内のその他classの適用順序関係を記載
- user.pp -> このmoduleでインストールするソフトウェアが必要とするアカウント情報(userやgroup)の定義
- install.pp -> moduleに必要なパッケージインストールのためのResourceの定義
- config.pp -> ソフトウェアのセットアップに必要となる設定ファイルの配備、ディレクトリの作成等のためのResourceの定義
- service.pp -> Moduleの含むデーモン(apache, mysql-server等)のservice Resourceの定義
以下のディレクトリ構成でモジュールを作成してみる
$ tree modules/
modules/
└── useradd
└── manifests
└── init.pp
モジュール配下を呼び出すには以下のような記述をmanifest配下にファイルに対して行う。
node 'slave' {
package {['ypbind.x86_64']:
ensure => 'present',
}
class {'useradd':
}
}
init.ppから他classを呼び出すことも可能だが単体で呼び出すことも可能。node指定とかで複雑になるくらいならこっちで読みやすくしても良さそうだろうか?(運用したことないので不明)
cat params.pp
class useradd::params (
$uid = '50',
) {
group { "developer3" :
ensure => "present",
gid => "1103",
}
}
「Warning: Config file /etc/puppet/hiera.yaml not found, using Hiera defaults」
$ ln -s /etc/hiera.yaml /etc/puppet/hiera.yaml
デフォルト値が設定されたyamlを読み込めていない場合に出る文言らしい。CentOS6とかではデフォルトで入っていたが7だとなくて出る。
puppet hieraとは何か · GitHub
contain
Containment | Puppet
include
マニフェスト内では、変数の利用が可能で変数名は「$」で始まる文字列で指定する
# httpdパッケージをインストール
package { “httpd”:
provider => “yum”,
ensure => “installed”
}
# httpdサービスを起動する
service { “httpd”:
name => “httpd”,
ensure => running,
require => Package[“httpd”]
}
# /var/www/testディレクトリを作成する
file { “/var/www/test”:
ensure => directory,
owner => “root”,
group => “root”,
require => Package[“httpd”]
}
# httpd用の設定ファイルを作成する
file { “/etc/httpd/conf.d/mysite.conf” :
content => ”
NameVirtualHost *:8000
<VirtualHost *:8000>
ServerName $hostname
DocumentRoot /var/www/test
ErrorLog logs/test-error_log
CustomLog logs/test-access_log common
</VirtualHost>”,
mode => “0644”,
owner => “root”,
group => “root”,
subscribe => Service[“httpd”]
}
使えそうなコマンド
# 適用させる
$ puppet apply /etc/puppet/manifests/site.pp
# モジュールをインストールする
$ puppet module install puppetlabs/mysql
Hieraとは
Hieraはkey/value型(yaml, json)の設定データ検索ツール。 ノードごとの設定値をHieraに記述することで、マニフェストからノード固有設定を分離する。
puppet hieraとは何か · GitHub
まとめ/感想
参考
作業手順書はもういらない! Puppetにおける自動化の定義書「マニフェスト」の書き方と基礎文法まとめ:新人インフラ技術者のためのサーバー構築/運用自動化入門(4)(1/5 ページ) - @IT