Successfully reported this slideshow.
Your SlideShare is downloading. ×

Using LXC on Production

More Related Content

Using LXC on Production

  1. 1. Using LXC on Production 第4回 コンテナ型仮想化の情報交換会@東京 2014.9.6 Isao SHIMIZU @isaoshimizu
  2. 2. 今回の元ネタ このエントリを少しアレンジしてお話します。 http://alpha.mixi.co.jp/entry/2014/12171/ 2
  3. 3. 自己紹介 清水 勲 (Isao SHIMIZU) ! 株式会社ミクシィ モンストスタジオ所属 ! 現在4年目(2011年入社) mixiのインフラ運用 モンスターストライクのインフラ・サーバ運用(現在) エンジニアブログ執筆(Fedora、systemd、OpenStack、LXCなど) ! 前職: 2003~2011年 SIerで企画、開発、インフラ運用 組み込み、Web、スマフォアプリ、動画配信など ! 最近気になっていること ・Golang、CoreOS、AWS 3
  4. 4. 今日の発表の経緯 4
  5. 5. LXC導入に至るまで 5
  6. 6. mixiにおける仮想化環境 いままではこうだった 6
  7. 7. KVM Kernel-based Virtual Machine 7
  8. 8. 仮想化環境でKVMを多用していた時代 • 仮想化環境はKVMしか使っていなかった • 用途は開発環境、ステージング環境がほとんど • 構築は自作のシェルスクリプトで • ブリッジインタフェースの作成 • Cobblerとの連携(ホスト名の連番化やIPの重複防止) • virt-install, Kickstart ! • 基本手作業で面倒くさい 8
  9. 9. KVMのいいところ • 軽度の利用では十分なパフォーマンスが出る • ゲストOS=マシンと同じ扱いができる • ノウハウたくさん • クラウド系のツールが充実している 9
  10. 10. KVMのつらいところ • 仮想化によるボトルネックが大きい(とくにディスクIO) • ディスク容量を多く消費する(OS分が大きい) • BIOS設定の依存(Intel VTとかAMD-Vとか) 10
  11. 11. OpenStackの導入 11
  12. 12. OpenStack • 2013年春頃に検証開始 • VersionはGrizzly 2013.01 • 同年の夏頃に本番導入 • 用途は社内プロダクト向けのPaaS(Gizmoと呼ばれる) • アプリサーバは独自のデプロイツールを使って • ミドルウェアの構成はChefで • MySQL、Redis、Jenkinsなど • ダッシュボード(Horizon)便利 • のちに開発環境にも展開 12
  13. 13. mixiにおける仮想化環境 いまの運用 13
  14. 14. LXC Linux Containers 14
  15. 15. LXCを使う前の印象 • とにかく軽いらしい(でもよくわかってない) • KVMとかと何が違うのかいまいちわかってない • LXCのバージョンがあがってきていてそろそろいい感じかも? • Kernel少し上げれば使えそう • 新しい技術気になる、使ってみたい • 本番で使っている話はほとんどない • ちょうどLinuxCon Japan 2013でLXCの話を聞いた • でも社内では誰も触ってなかった 15
  16. 16. LXCについて • KVMのようにハードウェアなどのエミュレーションの上に仮 想マシンを動作させるのではない • プロセスやネットワーク、ユーザー空間などを分離して、仮 想的な環境を提供 • Kernelの機能を使って分離された環境 • KVMで起きていたような、CPUやディスクIOなどのパフォー マンス劣化がほとんど発生しない • 起動が速い(init以降の起動だけ) • もちろんオープンソース 16
  17. 17. LXCのレポジトリ 17 https://github.com/lxc/lxc
  18. 18. LXCのコミット推移 18 https://github.com/lxc/lxc
  19. 19. KVMとLXC 19
  20. 20. LXCの検証を始める • バージョン0.8.0(2012.11.11リリース)から0.9.0 (2013.4.5リリース)へアップデートされていた • 1.0.0は2014年2月を予定していた(待てない) • まずは、0.9.0を検証してみたい • まずやったこと • templatesにあるFedoraのシェルスクリプトを使って LXCのイメージ作り • すんなり動かない(当時) • Fedora向けにメンテされてないのかいろいろ修正 • とりあえず試行錯誤して動いた(手作業コマンドレベル) 20
  21. 21. そんな検証をしているうちに アレが話題に ! 当時2013年10月頃 21
  22. 22. 22
  23. 23. Dockerのトレンド LXCの検証始めた頃 23
  24. 24. 気になっていたDockerの存在 • 当時のバージョン 0.6.x(現在は1.2.0) • AUFS気になる • Docker Registry便利そう • Goのポータビリティすばらしい ! • IPマスカレードはちょっと面倒くさい • コンテナにIPを個別に振って、仮想マシンのように扱いたい (macvlan使いたい) • taggedVLANの環境でも問題なく使いたい • バージョンアップが激しい 24
  25. 25. 独自ツールの開発へ 25
  26. 26. trailer (トレイラー) 26
  27. 27. trailerとは • Ruby製の自社で開発したツール • LXCのラッパー • 運用に必要な機能のみを実装 • IP、MACアドレスの採番(ARMと呼ばれるサーバと連携) • コンテナイメージをダウンロードして展開する • 起動中のコンテナからイメージを作る • Trailerfileと呼ばれるコンテナ定義 27
  28. 28. trailerの構成 28
  29. 29. trailerを使ったコンテナ起動フロー ①あらかじめ作られたイメージをレポジトリサーバからダウンロード(trailer pull) ②イメージを起動(trailer start) (1)ローカルにダウンロードされたイメージをインスタンス用のディレクトリに展開 (2)ARMと呼ばれる内製のアドレス管理ツールに対してAPIアクセスし、IPアドレスと MACアドレスが払い出される(ARMはAPIアクセス可能なDHCPサーバのようなもの) (3)取得したIPアドレスとMACをインスタンスに設定 (macvlan bridgeモード)して、init(systemd)を起動 (4)trailer start実行からsshで接続可能になるまでにかかる時間は10秒程度 (イメージサイズによって多少の変動あり) 29
  30. 30. trailerを使ったコンテナ停止フロー ①停止コマンドを実行(trailer stop) (1)LXCのプロセスの停止、ディレクトリの削除 30
  31. 31. trailerを使ったイメージの作成と レポジトリサーバへのアップロードのフロー ①ベースとなるイメージを起動(trailer start) ②インスタンスに対してChefでレシピを適用(knife-soloを利用) ③ルートファイルシステム(ディレクトリツリー)を圧縮する(trailer snapshot) ④イメージ情報が書かれたyamlファイルとrootfs.gzをtarballにする(trailer archive) ⑤レポジトリサーバへアップロード(trailer push) 31
  32. 32. LXC向けに用意してあるイメージ •ベースイメージ •Reverse Proxy (mod_proxy) •Varnish •Q4M (Job Queue) •Application Server (mod_perl) •Tokyo Tyrant •Memcached 32
  33. 33. LXCを運用する上で気をつけること 33
  34. 34. スレッド数、PID数上限 •kernel.threads-max •kernel.pid_max •vm.max_map_count •/etc/security/limits.d/90-nproc.conf をunlimited に •たぶん他にもある •用途に応じてFile Descriptor数や、TCP/IP周りのKernelパラメータ の調整が必要。 •インスタンス側では設定できないKernelパラメータがあったりす るので、sysctlやechoなどで設定する際に要注意。 34
  35. 35. その他、気をつけること •利用リソースの予測、見積もり •他のコンテナに悪影響を及ぼさない設計が必要 •ディスク容量 •容量制限はできない •モニタリング •グラフ大事 35
  36. 36. trailerのデモ 36
  37. 37. デモ環境 •Vagrant上で動かしているFedora 19 •コンテナもFedora 19 •kernel-3.9.5-301.fc19.x86_64 •lxc-0.9.0-2.fc19.x86_64 37
  38. 38. 参考資料 38
  39. 39. •OpenStackとLXCを導入した話 - mixi Engineers' Blog •http://alpha.mixi.co.jp/entry/2014/12171/ •LXCで学ぶコンテナ入門 -軽量仮想化環境を実現する技術 •http://gihyo.jp/admin/serial/01/linux_containers •Lxc で始めるケチケチ仮想化生活?! - SlideShare •http://www.slideshare.net/enakai/lxc-8300191 •LXC - Linux Containers •https://linuxcontainers.org/jp/ •LXC(Linux Container) •http://events.linuxfoundation.org/sites/events/files/cojp13_feng.pdf •Dockerを支える技術 •http://www.slideshare.net/enakai/docker-34668707 •GitHub - lxc/lxc •https://github.com/lxc/lxc 39

×