Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Using LXC on Production

5,558 views

Published on

第4回 コンテナ型仮想化の情報交換会@東京 2014.9.6

Published in: Technology
  • Be the first to comment

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

×