Immutable Infrastructure をまとめてみた

@numa08

お品書き

  • Immutable Infrastructure とは
  • 関連するツールのまとめ
  • Dockerの利用例

Immutable Infrastructureとは?

  • 一度作った環境にアップデートを加える事はしない
  • バージョンアップの際には、環境ごと再構築する

何がうれしいの?

  • 確実に動作する環境を用意し続けることができる

    • デプロイされるのは運用されている物のみ
  • バグの分析に役立つ

    • バグった瞬間を保存できるので、環境の再現が楽
  • 連携するツールが多いのでお手軽に作れる

    • Chef
    • Docker
    • あとで紹介します

リソース使いそう

  • 環境構築の「時間リソース」は、ベースになる環境を持っておくことで軽減できる

    • AWSのAMIとか
    • DockerならContainer
    • VagrantならBox

リソース使いそう

  • ハードディスクなどの「容量リソース」は、ムーアの法則で

    • 利用しない環境は即刻削除
    • あるいは世代管理をする

実現方法

詳細は次のスライドで

ツールについて

ツールについて

  • わりとそれぞれのツールを勘違いしているケースがあるっぽい(俺調べ)
  • 全く違う目的のためのツールなので、注意をする
  • 割と俺の運用経験に基きます

Chef

  • 構成管理ツールと呼ばれます
  • 何もない状況から、サービスが動作する環境を作ります
  • 冪等性に充填を起きます
  • マルチプラットフォームでの動作をサポートします

Chaf 動作のイメージ

  • Recipeと呼ばれるコード(RubyのDSL)に環境構築の手順を記述します
  • Chef-serverを利用して複数のクライアントに一気に環境を作ります
  • あるいは、Chef-soloを使って特定のクライアントに環境を作ります

Chef 動作のイメージ

  • マルチプラットフォーム対応なので、xXnix,OSX,Windowsで同じ環境を作ることができます

Chef 冪等性

  • 何度実行しても同じ物が得られること
  • アップデート、再配置はできない、しない

Chef まとめ

  • 環境構築に使う
  • アプリケーションのデプロイには機能が多すぎる

Docker

  • 仮想化技術の一つ
  • VirtualBox,VMWareなどとは異なる仮想化手法

仮想化技術について

  • VirtualBox, VMWare

    • CPUのもつ仮想化支援技術に依存する
  • Docker

    • OSのもつ仮想化技術に依存する

Docker 動作イメージ

  • 事前にベースになるImageを作っておく
  • アプリケーションをデプロイした状態のImageをcommitする
  • 仮想マシンを実行する

Docker 動作イメージ

  • アプリケーションデプロイのタイミングでImageを破棄する
  • 新しいImageにアップデートしたアプリケーションをデプロイする
  • よって、固有データを残すことはできない
  • データベースは別のホストへ

Docker まとめ

  • アプリケーションのデプロイにも使える
  • 環境構築するには、パワフルではない
  • Chefと組み合わせると幸せになれるかも

Vagrant

  • 環境構築ツールではない
  • 仮想化技術ではない
  • 仮想化ソフトウェアのためのインターフェース

Vagrant 動作イメージ

  • VirtualBox,VMWare,Dockerで仮想マシンを作って動かす
  • Chefを使って仮想マシンの環境を作る
  • その辺りの設定をVagrantfileに書く

Vagrant まとめ

  • 仮想マシンを作りまくるツール
  • 試験環境、開発環境の共有に使える

まとめ

  • Chef

    • 環境構築に使う
    • 作った環境にアプリケーションのデプロイとかをやる
  • Docker

    • アプリケーションのデプロイに使う
    • 作った環境には手を加えない
  • Vagrant

    • 仮想環境を操作するのに使う
    • 試験、開発環境の共有に便利

Dockerを使ってみた

  1. 開発
  2. リポジトリにcommit,push
  3. Jenkinsでビルド、テスト
  4. JenkinsでDockerのimageを作成
  5. imageをtar.gzで出力
  6. 本番用ホストで実行

  • DNSやLoad Balancerで参照する仮想マシン(プロセス)を変更する
  • アップデートで、新しい仮想マシンを立ち上げて、古いのは殺す
  • DNS,Load Balancerの設定を変更する

メリット

  • 一つのホストでロードバランシングの完結ができる

    • VPSのレンタル代削減
  • 環境構築がお手軽になる

デメリット

  • 動作中の仮想マシンに手出しはできない

    • バグ発生→対応、デプロイまでを高速化する必要がある
  • 死んでいった仮想マシンが溜まっていく

    • cronとかで削除をするべし

Dockerを使って、強制的にメンテ、デプロイの高品質な高速化を目指しましょう