view slide/master.html @ 28:57133c208204

fix slide
author taiki
date Wed, 18 Feb 2015 07:26:50 +0900
parents 2e8a2c30f9f8
children 2345e39de180
line wrap: on
line source

<!DOCTYPE html>
<html>
<head>
   <meta http-equiv="content-type" content="text/html;charset=utf-8"> 
   <title>master presentation</title>

<meta name="generator" content="Slide Show (S9) 2.3.0 on Ruby 2.0.0 (2014-02-24) [universal.x86_64-darwin13]">
<meta name="author"    content="Your Name Here" >

<!-- helper/macro that lets you add (CSS3) gradient using headers
     see http://slideshow.rubyforge.org/themes.html
     
     -->

<!-- S6 style sheet links -->
<link rel="stylesheet" href="master.css" media="projection" id="styleProjection">
<link rel="stylesheet" href="ss6/screen.css"         media="screen"     id="styleScreen">
<link rel="stylesheet" href="s6/print.css"          media="print">

<!-- S6 JS -->
<script src="s6/jquery.js"></script>
<script src="s6/jquery.slideshow.js"></script>
<script>
  $(document).ready( function() {
    Slideshow.init();
  } );

  
</script>

<!-- Better Browser Banner for Microsoft Internet Explorer (IE) -->
<!--[if IE]>
<script src="s6/jquery.microsoft.js"></script>
<![endif]-->



</head>
<body>

<div class="layout"> 
  <div id="header"></div>
  <div id="footer">
      <h1>IT 技術学習のための教育用計算機システムの研究</h1>
    <h2>平良 太貴</h2>
  </div>
</div>


<div class="presentation">

<!-- Title -->
<div class='slide '>
<!-- === begin markdown block ===

      generated by markdown 1.1.1 on Ruby 2.0.0 (2014-02-24) [universal.x86_64-darwin13]
                on 2014-04-30 20:49:38 +0900 with Markdown engine kramdown (1.3.3)
                  using options {}
  -->

  <p class="title">IT 技術学習のための<br>
    教育用計算機システムの研究</p>
  <p class="belong">琉球大学大学院 並列信頼研究室 (河野研)</p>
  <p class="date">
    <script>
     var date = new Date();
     var year = date.getFullYear();
     var month = date.getMonth();
     var day = date.getDate();
     var monthList = new Array("January","February","March","April","May","June",
     "July","August","September","October","November","December"); 
     document.write(monthList[month]+" "+day+", "+year); 
    </script> Taiki Taira</p>
</div>

<div class='slide '>
  <h1>要旨</h1>
  <ul>
    <li>本研究では VM やコンテナの学習環境を提供し、クラウドサービスと連携することのできる Shien システムを構築し、検証を行った</li>
    <li>また Shien システムの構成要素である ie-docker と ie-virsh を実装を行った</li>
    <li>Shien システムで使用されている Filesystem 、GFS2 の計測と評価を行った</li>
    <li>GFS2 は複数のノードからでもホスト上のディスクの Read / Write と同等の速度でアクセスできることを述べた</li>
    <li>ホストとコンテナの Read / Write は同等の速度であり、VM はやや劣ることを確認した</li>
    <li>次期システムに対し、推奨するシステム構成を提案した</li>
  </ul>
</div>

<div class='slide '>
  <h1>IT 教育向けの計算機管理</h1>
  <ul>
    <li>IT 技術の進歩に対し、学ばなければならないことが増えている。</li>
    <li>学習環境として計算機上でエミュレートされた仮想の計算機である VM と、OS で隔離された環境を構築する技術であるコンテナがある。</li>
    <li>VM とコンテナを学習環境として使用するには高性能 PC の購入や有料のクラウドサービスの使用などコストがかかる</li>
    <li>VM とコンテナを使用して、学生が学ぶためにコストを支払う必要のない資源や環境を提供しなければならない</li>
    <li>また次期システムではクラウドサービスとの連携を予定している。学生が開発したサービスを外部のクラウドサービスへ移行することで遠隔地から高速なアクセスが可能となる</li>
    <li>そのためクラウドサービスと連携可能な計算機管理システムが必要である</li>
  </ul>
</div>

<div class='slide '>
  <h1>教育用計算機環境 [1/4]</h1>
  <p>教育用の計算機環境の要件は次のようになる<p>
  <h2>Multi User Support</h2>
  <ul>
    <li>多くの学生に対応するため複数のユーザを管理が必要</li>
    <li>配布する権限は管理者とユーザ</li>
    <li>ユーザはユーザ自身の資源を操作</li>
    <li>管理者はシステムそのものを管理する。計算機や Hypervisor の設定、VM とコンテナの管理など</li>
    <li>ユーザはユーザ自身の資源のみを操作する。システムそのものや他のユーザの VM やコンテナの操作はできない</li>
  </ul>
  <h2>コンテナへの対応</h2>
  <ul>
    <li>サーバ運用でコンテナを使用する例が増加</li>
    <li>一台のサーバに対して複数のサービスを、VM に比べて少ないオーバーヘッドで使用可能</li>
    <li>コンテナでの運用が主流になっていくため、教育用システムでもコンテナに対応する必要がある</li>
  </ul>
</div>

<div class='slide '>
  <h1>教育用計算機環境 [2/4]</h1>
  <h2>資源の制限</h2>
  <ul>
    <li>計算機の資源は主にストレージ、CPU 、メモリ</li>
    <li>ユーザ一人に対して資源を制限し、ユーザが管理者の許可なく大量に資源を確保することを防ぐ</li>
    <li>申請等の手続きをせずに全員に均等に学習環境を与える</li>
    <li>VM の資源の制限
        <ul>
            <li>使用 CPU Core 数</li>
            <li>メモリ容量</li>
            <li>作成可能な VM の数</li>
        </ul>
    </li>
    <li>コンテナの資源の制限
        <ul>
            <li>使用 CPU Core 数</li>
            <li>メモリ容量</li>
            <li>作成可能な VM の数</li>
        </ul>
    </li>
  </ul>
</div>

<div class='slide '>
  <h1>教育用計算機環境 [3/4]</h1>
  <h2>iSCSI ファイルシステムへの対応</h2>
  <ul>
    <li>複数台の計算機で iSCSI ディスクを使用</li>
    <li>iSCSI ディスクは共有される必要がある</li>
    <li>iSCSI で複数台の計算機から共有された際に、高速で整合性を保てる Filesystem の選定が必要</li>
  </ul>
  <h2>クラウドサービスへの対応</h2>
  <ul>
    <li>クラウドサービスでは、外部のサービス上でウェブサービスなどのシステムを稼働</li>
    <li>次期システムではクラウドサービスからの資源もあるため、クラウドサービスへの対応が必要</li>
    <li>クラウドサービスへの学生の開発したサービスやシステムのデプロイ可能</li>
    <li>管理者の負担を抑えてクラウドサービス上の資源を管理</li>
  </ul>
</div>

<div class='slide '>
  <h1>教育用計算機環境 [4/4]</h1>
  <h2>セキュリティ管理</h2>
  <ul>
    <li>教育用の環境で VM やコンテナを使用する場合、セキュリティ管理が重要</li>
    <li>パスワードやポートの開放など</li>
    <li>ユーザの VM が外部を攻撃することを防ぐ</li>
    <li>ユーザの VM やコンテナに異常が見られた場合は通知</li>
  </ul>
</div>

<div class='slide '>
  <h1>これまでの学生向け VM 管理システム [ VMWare ESXi を使用 ]</h1>
  <ul>
    <li>VMWare ESXi は計算機にインストールし使用できる Hypervisor</li>
    <li>本学科では VMWare ESXi と VMWare vSphere Client で運用</li>
    <li>学生は Web サービスを使用して自身の VM を管理している</li>
    <li>Web サービスから可能な VM の操作は、
      <ul>
        <li>起動</li>
        <li>停止</li>
        <li>サスペンド</li>
        <li>再起動</li>
        <li>スタンバイ</li>
      </ul>
    </li>
    <li>一人あたりが所持することのできる VM の台数は、管理者側が申請を受け設定する</li>
    <li>つまり Multi User Support に対応</li>
    <li>コンテナには対応していない</li>
  </ul>
</div>

<div class='slide '>
  <h1>これまでの学生向け VM 管理システム [ ie-virsh を使用 ]</h1>
  <p>VMWare ESXi を使用しているシステムの他にもう一つ、ie-virsh を使用した VM 管理システムがある</p>
  <h2>libvirt</h2>
  <ul>
    <li>VM 管理ツールである virsh を含む、 VM の制御を抽象化したライブラリ</li>
    <li>VM の情報を習得・操作することが可能な API 群</li>
  </ul>
  <h2>virsh</h2>
  <ul>
    <li>libvirt に付属する VM 管理コンソール</li>
    <li>libvirt の API で VM を制御</li>
    <li>virsh はグループの制限を行わない限り root ユーザの権限でのみ使用可能</li>
  </ul>
  <h2>ie-virsh</h2>
  <ul>
    <li>root ユーザ権限を持たないユーザでも virsh を使用できるようラップ</li>
    <li>管理者がする操作はユーザからはできない</li>
    <li>Multi User Support に対応</li>
    <li>コンテナには対応していない</li>
  </ul>
</div>

<div class='slide '>
  <h1>これまでの学生向け VM 管理システム [ ie-virsh を使用 ]</h1>
  <h2>ie-virsh による Multi User Support</h2>
  <ul>
    <li>教育用のシステムでは、権限は管理者とユーザのみ</li>
    <li>管理の手間を抑えるために、同一の権限をユーザに一度に振る</li>
    <li>ie-virsh では、LDAP から取得したユーザ情報によって権限の配布を行う</li>
    <li>情報工学科では LDAP でユーザを管理しているため</li>
    <li>ie-virsh では LDAP から取得したユーザに、ストレージの領域を割り当てる</li>
    <li>LDAP を使ったユーザ管理により、ie-virsh では他のユーザの VM などの資源を操作することができない</li>
  </ul>
</div>

<div class='slide '>
  <h1>これまでの学生向け VM 管理システム [ ie-virsh を使用 ]</h1>
  <h2>ie-virsh による資源の制限</h2>
  <ul>
    <li>virsh は XML ファイルを使用して VM を管理</li>
    <li>XML ファイルには VM のパラメータが記述</li>
    <li>virsh はその XML ファイルを使って VM を使用する環境を定義する</li>
    <li>ie-virsh では、その XML ファイルを予めテンプレートとして作成</li>
    <li>ie-virsh でのテンプレートを使用した制限
        <ul>
            <li>使用 CPU Core 数</li>
            <li>メモリ容量</li>
            <li>I/O デバイス設定</li>
            <li>VM イメージのフォーマット</li>
        </ul>
    </li>
    <li>過剰な資源の確保を防ぐことができる</li>
    <li>作成可能な台数は4台</li>
  </ul>
</div>

<div class='slide'>
<!-- _S9SLIDE_ -->
  <h1>Shien システムの概要</h1>
  <p>Shien システムとは、複数のユーザによる計算機資源の使用を想定し実装されたシステムである</p>
  <h2>Fedora</h2>
  <ul>
    <li>次期システムが稼働する頃に安定する最新のソフトウエアを使用し検証</li>
    <li>本学科の基幹システムで使われている Linux ディストリビューションは CentOS</li>
    <li>次期システム稼働時の CentOS に対応するため、その検証目的として位置づけられる Fedora を使用</li>
  </ul>
  <h2>Global File System 2 (GFS2)</h2>
  <ul>
    <li>iSCSI に対応している</li>
    <li>複数ノードからのアクセス対して整合性のある読み書きを行える Filesystem </li>
    <li>単独システム内、またはクラスタとして使用可能。今回はクラスタ設定の一部として使用</li>
    <li>GFS2 でフォーマットされたディスクへアクセスするノードはクラスタ構成でなければならない</li>
  </ul>
</div>

<div class='slide'>
<!-- _S9SLIDE_ -->
  <h1>GFS2 に必要な要素</h1>
  <p>GFS2 でフォーマットされた iSCSI ディスクを共有するためには、RedHat のクラスタを構築しなければならない</p>
  <h2>Distributed Lock Manager (DLM)</h2>
  <ul>
    <li>GFS2 を使用するクラスタではロック機構として DLM を使用</li>
    <li>GFS2 ファイルシステムへのアクセスなどの、クラスタ内のリソースへのアクセスを制御</li>
    <li>ロック管理はクラスタ内のすべてのノードが対象</li>
  </ul>
  <h2>The corosync Cluster Engine (corosync)</h2>
  <ul>
    <li>クラスタを構成するためのクラスタ基盤</li>
    <li>マルチキャストやブロードキャストを使ったノード間のメッセージング機能を提供</li>
  </ul>
</div>

<div class='slide'>
<!-- _S9SLIDE_ -->
  <h1>GFS2 に必要な要素</h1>
  <h2>Logical Volume Manager (LVM)</h2>
  <table>
    <tr>
      <td>
        <object width=580 height=450 data="images/lvm.pdf"></object>
      </td>
      <td>
        <p>複数のハードディスクやパーティションにまたがった記憶領域を一つの論 理的なディスクとして扱うことのできるディスク管理機能</p>
        <p>Logical Volume を GFS2 でフォーマットする</p>
      </td>
    </tr>
  </table>
  <h2>CLVM</h2>
  <ul>
    <li>クラスタを構成するノード間で LVM を設定する際に使用</li>
    <li>LVM のクラスタリング拡張機能のセット</li>
    <li>一部のホストが変更した LVM 情報を他のホストに通知</li>
    <li>クラスタは LVM を使用した共有ストレージを管理できるようになる</li>
  </ul>
  <p>GFS2 はこれらのソフトウエアを設定し、クラスタを構成することで複数のノードからアクセスすることができる</p>
</div>

<div class='slide'>
<!-- _S9SLIDE_ -->
  <h1>Shien システムの構成</h1>
  <table>
    <tr>
      <td>
        <object width=600 height=600 data="images/gfs2cluster.pdf"></object>
      </td>
      <td>
        <ul>
          <li>サーバ全てに Fedora を導入しクラスタを構成</li>
          <li>corosync を使用しノードは互いに LVM 情報などを通信</li>
          <li>GFS2 でフォーマットされた一つの iSCSI ストレージを共有</li>
          <li>コンテナを ie-docker で管理し、VM を ie-virsh で管理</li>
      </ul>
      </td>
    </tr>
  </table>
</div>

<div class='slide'>
<!-- _S9SLIDE_ -->
  <h1>ie-docker</h1>
  <p>ie-docker は Shien システムで使用される Docker をラップしたコンテナ管理ソフトウエアである。
  <h2>Docker</h2>
  <table>
    <tr>
      <td>
        <object width=450 height=450 data="images/container.pdf"></object>
      </td>
      <td>
        <ul>
          <li>コンテナは OS 環境を複数のグループに区切って別のサーバのように利用する技術</li>
          <li>Docker はコンテナ型仮想化ソフトウエア</li>
          <li>Linux 上で Linux コンテナ (LXC) を活用し、仮想環境を作成する</li>
          <li>KVM などの Hypervisor 型の仮想化とは異なり、ホスト OS がまとめて管理</li>
          <li>主な機能
            <ul>
              <li>計算機資源の隔離・制限</li>
              <li>ファイル・ディレクトリの盛大と差分の管理</li>
              <li>配布して実行可能</li>
              </li>
            </ul>
          </li>
        </ul>
      </td>
  </table>
</div>

<div class='slide'>
<!-- _S9SLIDE_ -->
  <h1>ie-docker による Port の付与</h1>
  <table>
    <tr>
      <td>
        <object width=700 height=600 data="images/iedockerport.pdf"></object>
      </td>
      <td>
        <ul>
          <li>複数のコンテナが外部に向けて同一の Port を使用することはできない</li>
          <li>ie-docker は同一 Port の使用を防ぐため、Port の管理を行う</li>
          <li>ie-docker run を行った際に Port を取得</li>
          <li>Port 取得後はリバースプロキシの使用や明示的な Port の指定によって外部からアクセスすることができる</li>
        </ul>
      </td>
  </table>
</div>

<div class='slide'>
<!-- _S9SLIDE_ -->
  <h1>ie-docker による資源の制限</h1>
  <p>Docker の使用をユーザごとに分け、ユーザの資源を制限することができる</p>
  <ul>
    <li>ie-virsh と同様に、LDAP によってユーザ権限を管理</li>
    <li>ユーザは制限された Docker の機能を使用可能</li>
    <li>Docker では docker run でコンテナの起動を行い、その際 -m [memory limit] としてメモリを制限可能</li>
    <li>ie-docker では -m [memory limit] を自動的に付与</li>
    <li>コンテナの数と割り当てられるポートの数を 8 つに制限</li>
  </ul>
</div>

<div class='slide'>
<!-- _S9SLIDE_ -->
  <h1>クラウドサービスでの使用</h1>
  <ul>
    <li>Shien システムでは、クラウドサービス上で ie-docker をユーザに使用させる</li>
    <li>コンテナが VM と比べ高速であり、オーバーヘッドが少ないため</li>
    <li>クラウドサービスへ VM を送信するよりもサービスのデプロイを行いやすい</li>
    <li>LDAP からユーザ情報を取得し使用するため、本学科の LDAP との連携が必須</li>
  </ul>
</div>

<div class='slide'>
<!-- _S9SLIDE_ -->
  <h1>ie-docker の Multi User Support</h1>
  <p>Shien システムでは ie-docker でコンテナの使用を、ie-virsh で VM の使用を管理する</p>
  <h2>LDAP を使用</h2>
  <ul>
    <li>ie-docker も ie-virsh と同様に Multi User Support をしている</li>
    <li>情報工学科の LDAP とホストの接続を行う</li>
    <li>ie-docker と ie-virsh はともに LDAP から取得したユーザ情報を使用</li>
    <li>ie-docker では LDAP から取得したユーザに Repository を与える</li>
    <li>LDAP を使用したユーザ管理により、他のコンテナや資源を操作することができない</li>
  </ul>
</div>

<div class='slide'>
<!-- _S9SLIDE_ -->
  <h1>ie-docker の使用方法</h1>
  <ul>
    <li>ie-docker create [project name] でホスト上に Repository を作成、固定 Port の取得</li>
    <li>必要なら Dockerfile を使用し、ie-docker build によって Docker イメージの作成</li>
    <li>ie-docker run でコンテナに必要なパラメータの指定
      <ul>
        <li>-v オプションで、ie-docker create で作成した Repository とコンテナ内部のディレクトリをマッピング</li>
        <li>マッピングしたディレクトリにアプリケーションを配置</li>
        <li>-p オプションにより、ie-docker run コンテナから外に出すコンテナ内部の Port を指定</li>
      </ul><li>
    <li>適宜 Docker イメージを更新するたびに ie-docker commit を行う</li>
    <li>クラウドサービス上にも Repository を置き、 Dockerfile を Build するだけでアプリケーションのデプロイが行える</li>
  </ul>
</div>

<div class='slide'>
<!-- _S9SLIDE_ -->
  <h1>ie-docker のクラウド上とオンプレミスでの使用</h1>
  <object width=700 height=570 data="images/ie_docker_workflow.pdf"></object>
</div>

<div class='slide'>
<!-- _S9SLIDE_ -->
  <h1>ie-virsh debug</h1>
  <ul>
    <li>授業 Operating System へ対応するために本研究で新たに実装した機能</li>
    <li>授業 Operating System では OS について学習するため、Linux kernel を読む課題を出す</li>
    <li>Linux Kernel を gdb で読むためには手間がかかる</li>
    <li>システムでその環境を用意すれば、手軽に gdb から Linux kernel を追うことが可能になる</li>
    <li>ie-virsh debug start</li>
  </ul>
  <h2>Kernel debug における ie-virsh debug から gdb 開始までの出力例</h2>
    <pre>
        % ie-virsh debug start
        uid 21819 gid 1001 name k138582
        ** execute : (gdb) target remote localhost:11987
        Domain students_k13_k138582_debug defined from /etc/libvirt/qemu/students/k13/k138582/debugvm.xml

        Domain students_k13_k138582_debug started

        GNU gdb (GDB) Fedora 7.7.1-21.fc20
        Copyright (C) 2014 Free Software Foundation, Inc.
        License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
        This is free software: you are free to change and redistribute it.
        There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
        and "show warranty" for details.
        This GDB was configured as "x86_64-redhat-linux-gnu".
        Type "show configuration" for configuration details.
        For bug reporting instructions, please see:
        <http://www.gnu.org/software/gdb/bugs/>.
        Find the GDB manual and other documentation resources online at:
        <http://www.gnu.org/software/gdb/documentation/>.
        For help, type "help".
        Type "apropos word" to search for commands related to "word"...
        Reading symbols from /usr/lib/debug/lib/modules/3.16.7-200.fc20.x86_64/vmlinux...done.
        (gdb) target remote localhost 11987
        localhost 11987: No such file or directory.
        (gdb) target remote localhost:11987
        Remote debugging using localhost:11987
        native_safe_halt () at arch/x86/include/asm/irqflags.h:50
        50  }
        (gdb)
    </pre>
</div>

<div class='slide'>
<!-- _S9SLIDE_ -->
  <h1>ie-virsh で使用する VM イメージのアップロード</h1>
  <p>ie-virsh では、VM イメージをユーザに作成させる。VM イメージは各ユーザごとに 4 つまで使用することができる</p>
  <ol>
    <li>ユーザは iSCSI ストレージに VM イメージをアップロードし、ie-virsh で使用</li>
    <li>Shien システムでは各 VM 所有者ごとにディレクトリを分割している</li>
    <li>ユーザは手元の PC で VM のインストールと設定を行い、VM イメージを作成</li>
    <li>ie-virsh により与えられたディレクトリに、VM イメージをアップロード</li>
    <li>ie-virsh の define コマンドを使用し、XML テンプレートを作成</li>
    <li>VM の起動</li>
  </ol>
</div>

<div class='slide'>
<!-- _S9SLIDE_ -->
  <h1>Shien システムの評価</h1>
  <h2>実験環境</h2>
  <table border=1>
    <tr>
      <td>
        OS
      </td>
      <td>
        Fedora 20
      </td>
    </tr>
    <tr>
      <td>
        Kernel 
      </td>
      <td>
        3.16.7-200.fc20.x86_64
      </td>
    </tr>
    <tr>
      <td>
        CPU
      </td>
      <td>
        2 * Intel(R) Xeon(R) CPU X5650 @ 2.67GHz
      </td>
    </tr>
    <tr>
      <td>
        Memory
      </td>
      <td>
        132GB
      </td>
    </tr>
  </table>
  <h2>実験概要</h2>
  <ul>
    <li>Filebench はファイルシステムパフォーマンスの測定と比較のために、ファイルシステムのワークロードをフレームワーク化したもの</li>
    <li>ワークロード構築用の言語 .f 言語が搭載されており、.f 言語で書かれたワークロードを計測する</li>
    <li>Filebench は .f 言語で書かれた基本的なワークロードを持っており、そのワークロード randomread.f と randomwrite.f を用いて計測を行った</li>
  </ul>
</div>

<div class='slide'>
<!-- _S9SLIDE_ -->
  <h1>Filesystem の速度比較</h1>
  <object width=520 height=370 data="images/filesystem_read_bench.pdf"></object>
  <object width=520 height=370 data="images/filesystem_write_bench.pdf"></object>
</div>

<div class='slide'>
<!-- _S9SLIDE_ -->
  <h1>Filesystem の速度比較 - 考察</h1>
  <ul>
    <li>Linux に標準的に使用されている Filesystem の ext4 は、Linux から直接アクセスされるため高速</li>
    <li>計測結果では、GFS2 の Read 速度は GFS2 と殆ど変わらない</li>
    <li>そのためコンテナのアプリケーションや VM が GFS2 上にあったとしても、読み込み速度はローカルディスクと変わらないため GFS2 が原因で速度が低下することはない</li>
    <li>Write に関してはファイルサイズが 100 MB までは ext4 と比べ殆ど変わらない。しかし 1GB 以上のファイルへの Read は ZFS とともに極端に落ちてしまう</li>
  </ul>
</div>

<div class='slide'>
<!-- _S9SLIDE_ -->
  <h1>複数ノードからの速度比較</h1>
  <object width=520 height=370 data="images/3node_read_bench.pdf"></object>
  <object width=520 height=370 data="images/3node_write_bench.pdf"></object>
</div>

<div class='slide'>
<!-- _S9SLIDE_ -->
  <h1>複数ノードからの速度比較 - 考察</h1>
  <ul>
    <li>GFS2 のロック機構である DLM は、inode ごとにロックを行っている</li>
    <li>そのため全く同一のファイルに対して読み書きを行なわなければ、一定の速度で読み書きすることができる</li>
    <li>グラフからも今回計測を行った 3 ノードからのアクセスでも殆ど変わらない結果が見て取れる</li>
  </ul>
</div>

<div class='slide'>
<!-- _S9SLIDE_ -->
  <h1>VM やコンテナとの速度比較</h1>
  <object width=520 height=370 data="images/each_guest_read_bench.pdf"></object>
  <object width=520 height=370 data="images/each_guest_write_bench.pdf"></object>
</div>

<div class='slide'>
<!-- _S9SLIDE_ -->
  <h1>VM やコンテナとの速度比較 - 考察</h1>
  <ul>
      <li>コンテナとホストの計測は、Read と Write の性能ともに殆ど変わらない</li>
      <li>VM に関してはハードウエアもエミュレートしているため、Read と Write ともに性能が低下している</li>
      <li>コンテナはホストと Linux kernel を共有しているため、IO が高速である</li>
  </ul>
</div>

<div class='slide'>
<!-- _S9SLIDE_ -->
  <h1>授業 Operating System での ie-virsh の使用</h1>
  <ul>
    <li>本学科では Operating System という授業が行われている</li>
    <li>授業 Operating System は、OS について学ぶ一環として VM について学習し、課題を提出させる</li>
    <li>授業ではまず受講生が自身の PC で VM を install し環境設定を行う</li>
    <li>実際に複数人の学生が ie-virsh を使用し、管理側の負担を抑えて管理することができた</li>
  </ul>
</div>

<div class='slide'>
<!-- _S9SLIDE_ -->
  <h1>外部へ公開</h1>
  <ul>
    <li>本学科では学生にグローバル IP アドレスを配布しており、ie-virsh で管理されている VM はグローバル IP アドレスを割り当てていた</li>
    <li>しかしそのため授業 Operating System での使用の際、学生に VM のセキュリティ設定が委ねられていた</li>
    <li>授業の課題のために起動した VM を管理せず放置してしまうと攻撃の対象なる</li>
    <li>放置されている VM を自動的に検知し、ユーザに停止を呼びかける必要がある</li>
    <li>また必要のない Port の開放や、脆弱なパスワードやユーザ名を使用している VM があるかを調査し通知する仕組みが必要</li>
  </ul>
</div>

<div class='slide'>
<!-- _S9SLIDE_ -->
  <h1>Vagrant Box の使用</h1>
  <p>授業 Operating System で Vagrant Box をストレージにアップロードさせ、受講者に使用させた。</p>
  <h2>Vagrant</h2>
  <ul>
    <li>異なる環境に移行可能な開発環境を構築・管理・配布することができる開発 環境作成ツール</li>
    <li>手軽にテスト環境を導入は気することができ、変更が加わっても開発環境・本番環境に自動的に適用できる</li>
  </ul>
  <h2>Vagrant Box</h2>
  <ul>
    <li>Vagrant で VM を利用する際に、VM のベースとなるイメージファイル</li>
    <li>Vagrant で Vagrant Box を VM イメージとして起動・設定し、開発環境を配布</li>
  </ul>
  <h2>授業 Operating System での Vagrant Box の使用</h2>
  <ul>
    <li>ie-virsh の VM イメージに、Vagrant Box を使用</li>
    <li>受講者の PC 上で Vagrant を使い開発環境を作成させる</li>
    <li>作成した Vagrant をブレードサーバへアップロードし、 ie-virsh で起動できる形式に変換</li>
    <li>Vagrant が簡易なパスワードとユーザ名で Vagrant Box を管理していたため、攻撃の対象になってしまう</li>
    <li>Vagrant Box イメージを使用する際は外部から攻撃されないような設定か確認する必要がある</li>
  </ul>
</div>

<div class='slide'>
<!-- _S9SLIDE_ -->
  <h1>さくらクラウドへの VM イメージ送信</h1>
  <p>クラウドサービスへのサービスのデプロイ方法の一つとして、 VM イメージを直接クラウドサービスへアップロードするという方法がある。本学科のブレードサーバからさくらクラウドへ VM イメージを送信した。送信に使用したコマンドは下記である</p>
  <p>% curl --ftp-ssl -T fedora20.img ftp://username:password@hostname:21</p>
  <table border=1>
    <tr>
      <td>
        VM イメージサイズ
      </td>
      <td>
        10.0 GB
      </td>
    </tr>
    <tr>
      <td>
        VM イメージ形式
      </td>
      <td>
        raw
      </td>
    </tr>
    <tr>
      <td>
        送信速度
      </td>
      <td>
        34.9 M
      </td>
    </tr>
    <tr>
      <td>
        送信時間
      </td>
      <td>
        00:04:53
      </td>
    </tr>
  </table>
  <p>授業 Operating System で VM をアップロードする方法を使用すると、一回の授業で 60 明の受講生が VM をさくらクラウドへ向けて送信してしまう。VM イメージのアップロードは現実的ではない</p>
  <p>またさくらクラウドでは、VM イメージをアップロードするために、新たにディスクを最低サイズ 20 GB からレンタルしなければならない</p>
</div>

<div class='slide'>
<!-- _S9SLIDE_ -->
  <h1>まとめ</h1>
  <ul>
    <li>本研究では Shien システムの構成要素である ie-docker と ie-virsh を実装を行った</li>
    <li>また Shien システムを構築し、検証を行った</li>
    <li>Shien システムで使用されている Filesystem 、GFS2 の計測と評価を行った</li>
    <li>GFS2 は複数のノードからでもホスト上のディスクの Read / Write と同等の速度でアクセスできることを述べた</li>
    <li>ホストとコンテナの Read / Write は同等の速度であり、VM はやや劣ることをした</li>
    <li>ie-virsh を授業 Operating System で使用し、複数のユーザへ対応可能か検証を行った</li>
    <li>ie-virsh で Vagrant Box から変換した VM イメージを使用し、Vagrant Box をそのまま公開する危険性について述べた</li>
    <li>次期システムの推奨構成は次のようになる</li>
  </ul>
</div>

<div class='slide'>
<!-- _S9SLIDE_ -->
  <h1>推奨するシステム</h1>
  <table>
    <tr>
      <td>
        <object width=550 height=650 data="images/new_system_suggest.pdf"></object>
      </td>
      <td>
        <ul>
          <li>Shien システムはオンプレミスでの使用とクラウドサービス上の使用に分かれている</li>
          <li>オンプレミスでは複数の計算機と、複数の計算機で共有される iSCSI ディスクで構成される</li>
          <li>iSCSI ディスクには VM イメージとコンテナで動作させるアプリケーションを配置</li>
          <li>ie-virsh で VM 、ie-docker でコンテナの管理を行う</li>
          <li>クラウドサービスでは ie-docker を使用する</li>
          <li>オンプレミスで使用しているコンテナをクラウドサービスへ移行する</li>
          <li>Docker は、 Docker イメージを Build しそのイメージをベースにコンテナを起動するため、大容量のデータをクラウドサービスへ転送する必要がない</li>
      </ul>
      </td>
    </tr>
  </table>
</div>

<div class='slide'>
<!-- _S9SLIDE_ -->
  <h1>今後の課題</h1>
  <h2>VM やコンテナへのセキュリティチェック</h2>
  <ul>
    <li>授業 Operating System で Vagraint Box を使用した例からも、脆弱な名前やパスワードを使用するユーザは多い</li>
    <li>管理者側が定期的にユーザ名やパスワード、開いているポートのチェックを行い、通知する機構が必要である</li>
    <li>ssh を使ったユーザ名とパスワードをチェックする場合、パスワードを 3000 個使用すると一つのユーザ名に関して2時間以上かかる</li>
  </ul>
  <h2>複数の計算機での VM とコンテナの使い分け</h2>
  <ul>
    <li>複数の計算機上でのコンテナと VM の使い分けを考えなければならない</li>
    <li>一つの計算機上でコンテナと VM を動かすのか、コンテナだけ、VM だけの計算機を構築するのか</li>
    <li>今回 Shien システムの ie-virsh と ie-docker は一つの計算機上で行った</li>
    <li>しかし iSCSI ディスクを共有している計算機は複数ある</li>
    <li>そのため複数の計算機ではどういった使用が適切か提案、検証、計測する必要がある</li>
  </ul>
</div>

<div class='slide'>
<!-- _S9SLIDE_ -->
  <h1>今後の課題</h1>
  <h2>複数の計算機への ie-virsh の対応</h2>
  <ul>
    <li>複数の計算機で ie-virsh を使用する際に、VM をどの計算機に配置するか決定する機能が必要</li>
    <li>ie-virsh は現在一つの計算機で動作することを想定している</li>
    <li>ユーザに配る VM を配置する計算機が複数ある場合、計算機のメモリやディスクの使用率を参照し VM を配置するとよい</li>
  </ul>
  <h2>継続的インテグレーション</h2>
  <ul>
    <li>単体のモジュールや関連する周辺のモジュール全体を含めてテストしたり、品質チェックすることを頻繁に実施し、早期に問題を発見すること</li>
    <li>ie-docker を使用させる場合、継続的インテグレーションを行えるように対応することでユーザの開発を補助できる</li>
    <li>具体的にはクラウドサービス上のホストに Jenkins を install し、ie-docker を使用させる</li>
    <li>しかし Jenkins は Jenkins ユーザを全ての Build で使用するため、ie-docker との協調方法を考える必要がある</li>
  </ul>
  <h2>クラウドサービスとオンプレミスの連携</h2>
  <ul>
    <li>Shien システムではサービスのデプロイは可能</li>
    <li>クラウドサービスとオンプレミスを切り替えることは難しい</li>
    <li>アプリケーションのデータの同期手法を実装する必要がある</li>
  </ul>
</div>

</div><!-- presentation -->
</body>
</html>