最近インフラの自動化に、興味がありいろいろ試行錯誤しているが、結局どういうソリューションがいいのかよく分からないので、ちょっと今考えていることを書きなぐる
やりたいこと
- OSをインストールして、インストール後のミドルウェア設定までを完全自動でやりたい
今回は、下記ツールを使う
- Cobbler = OSインストール
- Chef = ミドルウェア設定
ソリューション1
「Preseedのlate_commnadでchefの設定/rc.localにchef実行スクリプトを仕込む」
実現に向けた事前準備
- chef-serverのnodeをあらかじめ作成しておく必要がある
- nodeのpermissionに気をつける(clientにwrite権限を付与)
--考察--
OSインストールからミドルウェアの適用まで、インストール対象サーバが自立的に行う。
また、サーバのあるべき姿をChefサーバ上に持っておくため、外部でこのサーバのあるべき姿を管理しておく必要がない。
ミドルウェア適用のタイミングが外部から制御できないので、インストール対象サーバが複数台あったとき、chefの適用順序を外部で制御しようとすると、OSインストールのレベルで順番を制御しなくてはならない。
ソリューション2
「OSインストールコマンドを実行後、定期的にSSHログインを試みて、OSインストール終了を検知したら、knife bootstrapでworkstationからchef適用」
実現に向けた事前準備
- chefのworkstationとcobblerサーバを同じサーバにする必要がある
- chefとcobblerをラップして操作する、アプリケーションが必要
- serverとroleのマッピングをchefの外部で持つ必要がある
--考察--
OSインストールとChefの適用が分かれており、chefとcobblerをラップしたアプリケーションからそこの結合を行う。そのため、アプリケーションの作り込みによっては、chefの適用のタイミングを制御できる
アプリケーションを別途自分で書かないといけないという工数がかかるのと、node情報(サーバのあるべき姿)をchefの外部で持たないといけないのが難点
結局
rc.localを使う方法(ソリューション1)を、ついこないだ知ったので、ソリューション2を主に使っているがrc.localを使う方法の方が一般的なのかもしれない。