Upload
puppet
View
419
Download
0
Embed Size (px)
Citation preview
Copyright © 2016 NTT DATA Corporation
2016/7/20 NTTデータ 公共・社会基盤事業推進部 プロジェクト推進統括 技術戦略担当 横山 浩輔
Hieraテクニック
パラメータシート⇒マニフェスト生成の紹介
Web公開向け資料
2 Copyright © 2016 NTT DATA Corporation
目次
1. 自己紹介
2. システム構成と自動化背景 公共系の大規模社会インフラシステム(合計200台規模)
台数、面数が多い
パラメータシートの変更時に手作業での修正箇所が多い
3. パラメータシート⇒マニフェスト生成の仕組み • Hieraとは
• パラメータシート⇒マニフェスト生成の実現方法
Puppet資材構成
ExcelマクロでHiera値(yaml)生成
• 変更への対応パターン
4. まとめ
Copyright © 2016 NTT DATA Corporation 3
1.自己紹介
4 Copyright © 2016 NTT DATA Corporation
自己紹介
名前:横山 浩輔
所属:株式会社 NTTデータ
公共・社会基盤事業推進部 プロジェクト推進統括 技術戦略担当
略歴:
オープン系システム基盤の技術支援に従事
現在、公共系の大規模社会インフラシステム(200台規模)でのPuppetやServerspecをメインで担当(過去には法人系の大規模HadoopシステムのPuppetも)
過去にNagiosでのHadoopシステムの監視・運用、Nicira(Vmware NSX前身)の動作検証等も担当
プライベートは弓道家(参段、2年目)、最近は新型アルトワークス(MT、赤) 乗り回したりしてます。
Copyright © 2016 NTT DATA Corporation 5
2.システム構成と自動化背景
6 Copyright © 2016 NTT DATA Corporation
担当システム規模、構成
サブシステム数:6 論理ノード(物理):100台
クラスタ構成あり
お客様用本番環境面
サブシステム数:5 論理ノード(仮想):60台
クラスタ構成なし
単体試験等実施用の環境
サブシステム数:6 論理ノード(仮想):60台
クラスタ構成あり
結合試験等実施用の環境
本番環境 開発環境B面 開発環境A面 本番環境 追加構築予定(5面)
⇒台数、面数が多く、Puppetでの管理に適したシステム構成
お客様 自社
7 Copyright © 2016 NTT DATA Corporation
Puppet導入検討
パラメータシート(本)
パラメータシート(A)
パラメータシート(B)
手動
Puppet導入
パラメータシート(本)
パラメータシート(A)
パラメータシート(B)
手動
マニフェスト(本)
マニフェスト(A)
マニフェスト(B)
Puppet
設定ファイル(本)
設定ファイル(A)
設定ファイル(B)
手動配布
Puppetで改善 現場での作業効率と品質が向上
要改善 修正頻度や修正箇所が多いため自動化したい
○ ×
× ×
8 Copyright © 2016 NTT DATA Corporation
Hiera機能で処理と値を分離 (Hiera機能は次ページから説明)
更にパラメーターシートからマニフェストを自動生成したい
Puppet導入検討
パラメータシート(本)
パラメータシート(A)
パラメータシート(B)
手動
マニフェスト(本)
マニフェスト(A)
マニフェスト(B)
Puppet
値を分離する事でパラシ から生成しやすい形に
値 処理
値+処理
× ○
○ パラメータシート(本)
パラメータシート(A)
パラメータシート(B)
Excelマクロ
yaml(本)
yaml(A)
yaml(B)
マニフェスト(本)
マニフェスト(A)
マニフェスト(B)
Puppet
○
Copyright © 2016 NTT DATA Corporation 9
3.パラメータシート⇒マニフェスト生成の仕組み
10 Copyright © 2016 NTT DATA Corporation
Hieraとは – Hiera機能の特徴
Hieraとは…
① Puppetマニフェストの「値」と「処理」の分離を実現可能
「値」はyamlに変数(key)と値(value)の対応を定義するだけ
② 「値」の読み込みなどはPuppetが自動で行う為、導入に伴う処理の追加等は不要 (automatic parameter lookup)
③ ノード定義が簡潔に記述可能(hiera_include)
⇒次ページから例を示します
11 Copyright © 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 Copyright © 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 Copyright © 2016 NTT DATA Corporation
パラメータシート(本)
パラメータシート(A)
パラメータシート(B)
yaml(本)
yaml(A)
yaml(B)
マニフェスト(本)
マニフェスト(A)
マニフェスト(B)
Puppet
②: Hiera値(yaml)生成 Excelマクロでyamlファイルを生成
Excelマクロ
①:Puppet資材構成 自動生成したyamlを組み込む為に、Puppet資
材構成、マニフェストを変更
パラメータシート⇒マニフェスト生成の実現方法
14 Copyright © 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 Copyright © 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 Copyright © 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 Copyright © 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 Copyright © 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 Copyright © 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
Copyright © 2016 NTT DATA Corporation 20
まとめ
21 Copyright © 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)
手動配布
× ×
○ ×
○ ○
ミス有 ミス有
ミス有 ミス無
ミス無 ミス無
Copyright © 2011 NTT DATA Corporation
Copyright © 2016 NTT DATA Corporation