Más contenido relacionado
La actualidad más candente (20)
Similar a Hieraテクニック - 効率的にパラメータシートから設定値を取り込む - 横山 浩輔、株式会社NTTデータ (20)
Hieraテクニック - 効率的にパラメータシートから設定値を取り込む - 横山 浩輔、株式会社NTTデータ
- 1. Copyright © 2016 NTT DATA Corporation
2016/7/20
NTTデータ 公共・社会基盤事業推進部 プロジェクト推進統括 技術戦略担当
横山 浩輔
Hieraテクニック
パラメータシート⇒マニフェスト生成の紹介
Web公開向け資料
- 2. 2Copyright © 2016 NTT DATA Corporation
目次
1. 自己紹介
2. システム構成と自動化背景
公共系の大規模社会インフラシステム(合計200台規模)
台数、面数が多い
パラメータシートの変更時に手作業での修正箇所が多い
3. パラメータシート⇒マニフェスト生成の仕組み
• Hieraとは
• パラメータシート⇒マニフェスト生成の実現方法
Puppet資材構成
ExcelマクロでHiera値(yaml)生成
• 変更への対応パターン
4. まとめ
- 4. 4Copyright © 2016 NTT DATA Corporation
自己紹介
名前:横山 浩輔
所属:株式会社 NTTデータ
公共・社会基盤事業推進部 プロジェクト推進統括 技術戦略担当
略歴:
オープン系システム基盤の技術支援に従事
現在、公共系の大規模社会インフラシステム(200台規模)で
のPuppetやServerspecをメインで担当(過去には法人系の大
規模HadoopシステムのPuppetも)
過去にNagiosでのHadoopシステムの監視・運用、
Nicira(Vmware NSX前身)の動作検証等も担当
プライベートは弓道家(参段、2年目)、最近は新型アルトワー
クス(MT、赤) 乗り回したりしてます。
- 6. 6Copyright © 2016 NTT DATA Corporation
担当システム規模、構成
サブシステム数:6
論理ノード(物理):100台
クラスタ構成あり
お客様用本番環境面
サブシステム数:5
論理ノード(仮想):60台
クラスタ構成なし
単体試験等実施用の環境
サブシステム数:6
論理ノード(仮想):60台
クラスタ構成あり
結合試験等実施用の環境
本番環境 開発環境B面開発環境A面本番環境
追加構築予定(5面)
⇒台数、面数が多く、Puppetでの管理に適したシステム構成
お客様 自社
- 7. 7Copyright © 2016 NTT DATA Corporation
Puppet導入検討
パラメータ
シート(本)
パラメータ
シート(A)
パラメータ
シート(B)
手動
Puppet導入
パラメータ
シート(本)
パラメータ
シート(A)
パラメータ
シート(B)
手動
マニフェ
スト(本)
マニフェ
スト(A)
マニフェ
スト(B)
Puppet
設定ファ
イル(本)
設定ファ
イル(A)
設定ファ
イル(B)
手動配布
Puppetで改善
現場での作業効率と品質が向上
要改善
修正頻度や修正箇所が多いため
自動化したい
○×
××
- 8. 8Copyright © 2016 NTT DATA Corporation
Hiera機能で処理と値を分離
(Hiera機能は次ページから説明)
更にパラメーターシートからマニフェストを自動生成したい
Puppet導入検討
パラメータ
シート(本)
パラメータ
シート(A)
パラメータ
シート(B)
手動
マニフェ
スト(本)
マニフェ
スト(A)
マニフェ
スト(B)
Puppet
値を分離する事でパラシ
から生成しやすい形に
値 処理
値+処理
× ○
○パラメータ
シート(本)
パラメータ
シート(A)
パラメータ
シート(B)
Excel
マクロ
yaml(本)
yaml(A)
yaml(B)
マニフェ
スト(本)
マニフェ
スト(A)
マニフェ
スト(B)
Puppet
○
- 10. 10Copyright © 2016 NTT DATA Corporation
Hieraとは – Hiera機能の特徴
Hieraとは…
① Puppetマニフェストの「値」と「処理」の分離を実現可能
「値」はyamlに変数(key)と値(value)の対応を定義するだけ
② 「値」の読み込みなどはPuppetが自動で行う為、導入に伴
う処理の追加等は不要 (automatic parameter lookup)
③ ノード定義が簡潔に記述可能(hiera_include)
⇒次ページから例を示します
- 11. 11Copyright © 2016 NTT DATA Corporation
Hieraなしのマニフェスト、ノード構成
Hieraとは – Hiera機能の利用例
node1
Tomcat
Xmx:2g
Xms:2g
node2
Tomcat
Xmx:4g
Xms:4g
node3
Tomcat
Xmx:8g
Xms:8g
#site.pp
node node1 {
class{ ‘tomcat’ :
xmx => “2g”,
xms => “2g”,
}
}
node node2 {
class{ ‘tomcat’ :
xmx => “4g”,
xms => “4g”,
}
}
node node3 {
class{ ‘tomcat’ :
xmx => “8g”,
xms => “8g”,
}
}
- 12. 12Copyright © 2016 NTT DATA Corporation
前頁のマニフェストをHiera化
Hieraとは – Hiera機能の利用例
#common.yaml
classes:
- tomcat
#node1.yaml
tomcat::xmx:2g
tomcat::xms:2g
#site.pp
node default {
hiera_include('classes')
}
#node2.yaml
tomcat::xmx:4g
tomcat::xms:4g
#node3.yaml
tomcat::xmx:8g
tomcat::xms:8g
#site.pp
node node1 {
class{ ‘tomcat’ :
xmx => “2g”,
xms => “2g”,
}
}
node node2 {
class{ ‘tomcat’ :
xmx => “4g”,
xms => “4g”,
}
}
node node3 {
class{ ‘tomcat’ :
xmx => “8g”,
xms => “8g”,
}
}
③ノード定義が簡潔に
(hiera_include)
before after
①マニフェストの
処理と値を分離
②マニフェストへの処理追記は不要、yamlでの「値」定義のみ
#hiera()関数でマニフェストの対応箇所に明示することも可能
(automatic parameter lookup)
- 13. 13Copyright © 2016 NTT DATA Corporation
パラメータ
シート(本)
パラメータ
シート(A)
パラメータ
シート(B)
yaml(本)
yaml(A)
yaml(B)
マニフェ
スト(本)
マニフェ
スト(A)
マニフェ
スト(B)
Puppet
②: Hiera値(yaml)生成
Excelマクロでyamlファイルを生成
Excel
マクロ
①:Puppet資材構成
自動生成したyamlを組み込む為に、Puppet資
材構成、マニフェストを変更
パラメータシート⇒マニフェスト生成の実現方法
- 14. 14Copyright © 2016 NTT DATA Corporation
・yaml格納ディレクトリ構成とsite.ppの書き方
#site.pp
node default {
hiera_include('classes')
}
/etc/puppet
/hieradata/
tomcat
os
apache
postgresql
Hiera呼び出しの定義のみ記述
モジュール間の依存関係、順序性が存在する
場合にはここに定義
node2
.yaml
node1.
yaml
担当者やパラメータシートが製品(モジュー
ル)ごとに分かれるため、yaml配置ディレクト
リもモジュール単位で分割
・・・
パラメータシート⇒マニフェスト生成の実現方法 -①Puppet資材構成
- 15. 15Copyright © 2016 NTT DATA Corporation
#node1.yaml
classes:
-tomcat
tomcat::params::conf_server_xml_flag:on
tomcat::params::conf_server_xml_http_port: 8080
tomcat::params::bin_catalina_sh_flag:on
tomcat::params::bin_catalina_sh_xms: 1g
tomcat::params::install_tomcat6: true
・モジュール内マニフェストの書き方(tomcatのinstall.pp例)
※本来、マニフェストのコーディングスタイルとしてif文は可能な限り使わずクラスを分割
する事が望ましい
class tomcat::install (
install_tomcat6 = tomcat::params::install_tomcat6,
install_tomcat8 = tomcat::params::install_tomcat8,
) {
if install_tomcat6 {
package { ‘tomcat6’ :
ensure => latest,
}
}
if install_tomcat8 {
package { ‘tomcat8’ :
ensure => latest,
}
}
}
install_tomcat6の
フラグがtrueの時の
みリソースが動作
パラメータシートの構成上、マニフェストを統合し数を減らす必要があり、
1つのマニフェスト内でノード間差分を表す方法としてif文を利用
パラメータシート⇒マニフェスト生成の実現方法 -①Puppet資材構成
install_tomcat8の
フラグがtrueの時の
みリソースが動作
- 16. 16Copyright © 2016 NTT DATA Corporation
#node1.yaml
classes:
-tomcat
tomcat::params::conf_server_xml_flag:on
tomcat::params::conf_server_xml_http_port: 8080
tomcat::params::bin_catalina_sh_flag:on
tomcat::params::bin_catalina_sh_xms: 1g
tomcat::params::install_tomcat6: true
・モジュール内マニフェストの書き方(tomcatのconfig.ppとserver.xml.erb例示)
※本来、マニフェストのコーディングスタイルとしてif文は可能な限り使わずクラスを分割
する事が望ましい
class tomcat::config (
conf_server_xml_flag = tomcat::params::conf_server_xml_flag,
conf_server_xml_xmx = tomcat::params::conf_server_xml_xmx,
conf_server_xml_xms = tomcat::params::conf_server_xml_xms,
conf_server_xml_http_port = tomcat::params::conf_server_xml_http_port,
(中略)
) {
if conf_server_xml_flag {
file { ‘/opt/tomcat6/conf/server.xml’ :
ensure => file,
content => template(“tomcat/server.xml.erb"),
owner => “tomcat",
group => “tomcat",
mode => 600,
}
}
(中略)
}
#server.xml.erb
(中略)
<Connector port="<%= @
tomcat::params::conf_server_xml_http_port %>"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
(中略)
conf_server_xml_flag
のフラグがonの時の
みリソースが動作
パラメータ値
パラメータシートの構成上、マニフェストを統合し
数を減らす必要があり、1つのマニフェスト内で
ノード間差分を表す方法としてif文を利用
パラメータシート⇒マニフェスト生成の実現方法 -①Puppet資材構成
- 17. 17Copyright © 2016 NTT DATA Corporation
・モジュール内マニフェストの書き方(tomcatのparams.pp例示)
※本来、paramsクラスはOS毎のデフォルト値を定義する用途で利用するのが一般的
class tomcat::params (
conf_server_xml_flag = “”,
conf_server_xml_http_port = “”,
:
bin_catalina_sh_flag = “”,
bin_catalina_sh_xms = “”,
:
install_tomcat6 = “”,
install_tomcat8 = “”,
) {}
モジュール毎にyamlから値を一括で受け取る為の変数郡を定義
(デフォルト値はyamlに自動で含まれるため、params.ppは全値が空)
#node1.yaml
classes:
-tomcat
tomcat::params::conf_server_xml_flag:on
tomcat::params::conf_server_xml_http_port: 8080
tomcat::params::bin_catalina_sh_flag:on
tomcat::params::bin_catalina_sh_xms: 1g
tomcat::params::install_tomcat6: true
パラメータシート⇒マニフェスト生成の実現方法 -①Puppet資材構成
- 18. 18Copyright © 2016 NTT DATA Corporation
パラメータシート : tomcat
yaml生成の例
「パッケージ」シート ノード名
パッケージ名 node1 node2 node3
tomcat6 ◎ ◎ -
tomcat8 - - ◎
#node1.yaml
classes:
-tomcat
tomcat::params::conf_server_xml_flag:on
tomcat::params::conf_server_xml_http_port: 8080
:
tomcat::params::bin_catalina_sh_xms: 1g
tomcat::params::install_tomcat6: true
#node2.yaml
classes:
-tomcat
tomcat::params::conf_server_xml_flag:on
tomcat::params::conf_server_xml_http_port: 8081
:
tomcat::params::bin_catalina_sh_xms: 4g
tomcat::params::install_tomcat6: true
#node3.yaml
classes:
-tomcat
tomcat::params::install_tomcat8: true
yaml
化
パラメータシート⇒マニフェスト生成の実現方法 -②Hiera値(yaml生成)
「server.xml」シート ノード名
パラメータ名 デフォルト値 node1 node2 node3
http_port 8080 デフォルト 8081 -
-
-
-
-
-
「catalina.sh」シート ノード名
パラメータ名 デフォルト値 node1 node2 node3
-Xmx - 2g 4g -
-Xms - 2g 4g -
:
:
-XX:NewSize - 1g 1g -
- 19. 19Copyright © 2016 NTT DATA Corporation
パラメータ
シート(本)
パラメータ
シート(A)
パラメータ
シート(B)
Excel
マクロ
yaml(本)
yaml(A)
yaml(B)
マニフェス
ト(本)
マニフェス
ト(A)
マニフェス
ト(B)
Puppet
②新規パラメータ定義の追加の場合
モジュールのマニフェスト(config.pp、params.pp、
テンプレートファイル)に変数を追加
①既存パラメータの値変更の場合
資材編集は不要(yaml差し替のみ必要)
変更への対応パターン
「catalina.sh」シート ノード名
パラメータ名 デフォルト値 node1 node2 node3
-Xmx - 2g 4g -
-Xms - 2g
4g
⇒8g
-
:
「catalina.sh」シート ノード名
パラメータ名 デフォルト値 node1 node2 node3
-Xmx - 2g 4g -
-Xms - 2g 4g -
:
-XX:NewSize - 1g 1g -
③設定ファイルなどの追加(シートの追加)
モジュールのマニフェスト(config.pp、
params.pp)にリソースと変数を追加
④PPの追加(ブックの追加)
モジュール(マニフェスト、テンプレート等)
を新規作成
どの様な場合もマクロ側の変更は不要
従来の自動化ツールと同様にモジュールを編集すればOK
- 21. 21Copyright © 2016 NTT DATA Corporation
パラメータシートの値を変えただけでその変更を自動で取り込める様になった
⇒手動転記によるミスが発生しなくなった
まとめ
Hiera、マクロ導入
パラメータ
シート(本)
パラメータ
シート(A)
パラメータ
シート(B)
手動
マニフェス
ト(本)
マニフェス
ト(A)
マニフェス
ト(B)
Puppet
パラメータ
シート(本)
パラメータ
シート(A)
パラメータ
シート(B)
Excel
マクロ
yaml(本)
yaml(A)
yaml(B)
マニフェス
ト(本)
マニフェス
ト(A)
マニフェス
ト(B)
Puppet
Puppet導入
パラメータ
シート(本)
パラメータ
シート(A)
パラメータ
シート(B)
手動
設定ファイ
ル(本)
設定ファイ
ル(A)
設定ファイ
ル(B)
手動配布
× ×
○×
○ ○
ミス有 ミス有
ミス有 ミス無
ミス無 ミス無