ようへいの日々精進XP

よかろうもん

サーバー構築後にやっていることの自動化について考えてみる(1)

概要

  • サーバー構築後に行なっている作業を整理して、出来るだけ自動化とオペミスを無くす環境を構築出来ないか考えてみた

まずは整理

サーバー構築直後と、運用開始後についての作業を整理してみる。尚、サーバーの構築に関しては chefansible 等のツールを利用し、監視ツールとしては cacti を利用している環境を想定する。

サーバー構築直後

  1. serverspec による構築直後のチェック(標準的な設定の確認)
  2. 監視ツールへのホスト登録
  3. 内部 DNS を利用していれば内部 DNS への登録
  4. 開発チームへの提供、もしくはアプリケーションのデプロイ
  5. アプリケーション側のテスト
  6. 外部 DNS または Proxy への登録
  7. リリース

運用開始後

  • 様々な監視(稼働サービス監視、リソース監視、サーバー構成監視)を行い、障害発生の事前検知とチューニング
  • 障害発生時の対応

等、ざっくりと現在の自分が行なっている作業も含め書いてみたが、今回はサーバー構築直後の 01 から 03 あたりまでをひと通りやってみて可能性を探ってみることにする。

実装

構成はこんな感じ

f:id:inokara:20130804064732p:plain

Jenkins 先生に色々と頑張って頂くことを前提に以下のようなフローとなる。

  1. サーバー構築直後にホスト側から Jenkinsserverspec 実行のビルドを API を使ってオーダー
  2. serverspec の実行結果を解析して正常であれば cacti にホストを登録
  3. cacti からホストの監視が開始される
  4. serverspec の実行のトリガーはサーバー側の rc.local 等に設定されている為、サーバーが再起動すると毎回実行される

サーバーから Jenkins API を叩いて serverspec を実行する

構築直後、再起動毎で serverspec でテストする手順については割愛し、さらに jenkinsAPI を叩いて serverspec を実行する方法についてはこちらにて検証を行なっており、細かい設定はあるものの実装は可能。

serverspec の結果を以ってホストを Cacti に登録する

Cacti がコマンドラインから扱えることと Jenkinsビルド結果を解析して次のビルドをキックするか、一つのジョブ内でシェルを複数書けるのでそれを利用する手もある。

f:id:inokara:20130804072546p:plain

ジョブのパラメータを使いまわせるということで、後者の一つのジョブ内でシェルを複数書くように設定してみた。登録したシェルスクリプトは以下の通り。

serverspec のホストを登録するシェルスクリプト

テストする為の spec ファイルは以下の通り。

とりあえずは Cacti でのグラフ生成に必要な snmpd が稼働していることを確認する。他にも各環境に応じて適宜テストを書く。

登録したホストでテストを実行するシェルスクリプト

Cacti にホストを登録するシェルスクリプト

テスト

jenkins のコンソールから実行

パラメータ付きビルドにてビルドを行う

f:id:inokara:20130804123023p:plain

ビルドが成功

ビルドが成功を以って、以下が成功している。

  • serverspec 用の spec ファイルの生成
  • 生成された spec ファイルでの対象サーバーのテスト
  • Cacti への対象サーバーの登録

f:id:inokara:20130804123135p:plain

しばらくすると...

Cacti にて登録したホストの監視が開始されている。

f:id:inokara:20130805072751p:plain

ということで

引き続きの目標として...

  • serverspec でのテスト項目を煮詰めていく
  • ChefAnsible 等でサーバーを一から構築して試してみる
  • DNS への登録の自動化
  • 自動化だけではなく管理や冪等性をどのように担保するか検討

等を試していくつもり。