view slide/sigos.html @ 42:c399c755287d default tip

final slide
author taiki <taiki@cr.ie.u-ryukyu.ac.jp>
date Thu, 15 May 2014 14:45:30 +0900
parents f17088cd0db5
children
line wrap: on
line source

<!DOCTYPE html>
<html>
<head>
   <meta http-equiv="content-type" content="text/html;charset=utf-8"> 
   <title>sigos</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="sigos.css" media="projection" id="styleProjection">
<link rel="stylesheet" href="s6/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>OS 授業向けマルチユーザ VM 環境の構築</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">OS 授業向けのマルチユーザ VM 環境の提案</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, Shinji Kono</p>


</div>

<div class='slide '>
  <h1>発表の流れ</h1>
  <ol>
    <li>VM を用いた Web サービスの教育</li>  
    <li>授業 Operating System / Web サービスの学習で要求されること</li>
    <li>ie-virsh 導入前の VM 管理システム</li>  
    <li>ie-virsh の実装</li>
    <li>ie-virsh の動作するサーバ構成</li>
    <li>ie-virsh の動作するブレードサーバの性能</li>
    <li>ie-virsh の動作するブレードサーバの環境</li>
    <li>ie-virsh の機能</li>
    <li>ie-virsh の使用例</li>
    <li>リソースの制限</li>
    <li>Vagrant Box の使用</li>
    <li>構成に使ったツールと他のツールとの比較</li>
    <li>他の VM 管理ツールとの比較</li>
    <li>ie-virsh の改善点</li>
    <li>まとめと今後の課題</li>
  </ol>
</div>

<div class='slide'>
<!-- _S9SLIDE_ -->
<h1>VM を用いた Web サービスの教育</h1>
  <ul>
   <li>学生でも Web サービスを開発する技術は必須なものとなっており、学生個人での Web サービス開発でも、手持ちの PC でサービスを構築し外部の VPS やクラウド等へデプロイするワークフローを学ぶ必要がある。</li>
   <li>しかし外部のサービスを利用する場合に、学生が VM の管理を十分に行うことが難しく、コストの支払いも困難である。クラウド上で学生が使う VM の管理方法は、クラウドの運営者と協調して API などを通して実現する必要がある。</li>
   <li>ここでは学校にあるブレードなどのサーバ機器を用いて<font color="red"> Web サービスを学生が構築、開発、運用する方法の実装</font>を行った。</li>
 </ul>
</div>

<div class='slide'>
  <h1>VM を用いた Web サービスの教育</h1>
  <ul>
    <li>本学の情報工学科で提供している Operating System という授業で、OS について学習し課題を提出させる。課題では VM の環境を学生が設定し、情報工学科の持つブレードサーバ上にアップロードし、プログラムの実装や計測を行う。</li>
    <li>これを教師あるいはシステム管理者が学生の<font color="red">一つ一つの VM に対して対応を行うのは現実的ではない</font>。</li>
    <li>情報工学科のブレードサーバ上に VM に対する適切な権限を学生に委譲し、VM の起動・停止等の操作をさせる必要がある。また、VM 上で動く OS のセキュリティを適切に管理する必要がある。</li>
  </ul>
</div>

<div class='slide'>
  <h1>授業 Operating System / Web サービスの学習で要求されること</h1>
  <p>授業 Operating System では、VM での課題や実験を行う。Web サービスの学習では、VM を用いて構築した Web サービスを公開する。そのためには VM を学生が操作するにあたっての基本的な要件を満たす必要があり、また教師や管理者側の負担を減らさなければならない。</p>
  <table>
    <tr>
      <td>
        <img src="images/managetool.png">
      </td>
      <td>
        <ul>
          <li>学生のノート PC で環境設定したイメージを、本学科のブレードサーバ上で VM として動作させることができる</li>
          <li>作成した VM を、VM を持つ学生だけが削除できる</li>
          <li>学生自身の VM のみを起動・停止できる</li>
          <li>VM へ ssh でのアクセスが可能である</li>
          <li>パスワードやフィルタリングなどの安易な設定をチェックし、設定し直すよう勧告する</li>
          <li>授業 Operating System で使われる場合は実験後に電源入れたままの VM を、停止するように勧告する</li>
        </ul>
      </td>
    </table>
</div>

<div class='slide '>
 <h1>ie-virsh 導入前の VM 管理システム</h1>  
 <p>授業 Operating System では、ie-virsh を実装し適用する前に VMWare ESXI / vSphere Client を利用していた。</p>
 <h2>VMWare ESXI / vSphere Client</h2>  
 <ul>
   <li>vSphere Client は仮想環境の統合管理をするプラットフォーム vCenter Server と接続し、ハイパーバイザである VMWare ESXI 上の VM を管理する</li>
   <li>vSphere Client は詳細な権限の設定が可能で、複数の学生に対して VM を配布し権限を管理する事ができる</li>
 </ul>
 <h2>KVM / ie-virsh への変更</h2>  
 <ul>
   <li>vSphere Client は手動で権限を移譲する場合は管理者側の操作が増え、学生への権限の配布に手間と時間が掛かる。</li>
   <li>ie-virsh は権限を移譲するという操作が必要なく、機能も学生が VM を操作するには十分である。</li>
   <li>KVM / ie-virsh はオープンソースであり、導入コストやランニングコストがかからない</li>
 </ul>
 <p>授業 Operating System に使用するために、VMWare ESXI / vSphere Client の代わりに <font color="red">ie-virsh を実装した</font>。</p>
</div>


<div class='slide '>
  <h1>ie-virsh の実装</h1>
  <p>virsh をラップし、複数の学生が学生自身の VM のみを操作できるように実装した。virsh の個々の VM を操作するのに必要な機能だけを抜き出し、学生に提供する。</p>
  <h2>libvirt</h2>
  <p>仮想マシンの制御を抽象化したライブラリで、VM の情報を習得・操作することができる API 群である。KVM の他にも VMWare や Xen など多くのハイパーバイザに対応しており、アクセスすることができる。</p>
  <h2>virsh</h2>
  <ul>
    <li>libvirt にある CLI ツールである</li>
    <li>libvirt がアクセスできるハイパーバイザを操作できる</li>
    <li>libvirt の API を制御することができる</li>
    <li>VM の起動や停止、情報の表示、ゲストが接続しているネットワークデバイスの管理をすることができる</li>
  </ul>
</div>

<div class='slide '>
  <h1>ie-virsh の動作するサーバ構成</h1>  
  <h2>OCFS2</h2>
  <p>分散ファイルシステム Oracle Cluster FileSystem 2(OCFS2) を利用した。OCFS2 とは汎用の共有ディスククラスタファイルシステムであり、一つのブロックデバイスを複数の PC から同時に読み書きでき、整合性を保つことが可能である。</p>
  <h2>サーバ構成</h2>
  <table>
    <tr>
      <td>
        <img src="images/sanstructure.png">
      </td>
      <td>
        <ul>
          <li>ie-virsh は情報工学科のブレードサーバの一つで動作している</li>
          <li>OCFS2 により、ストレージは複数のブレードサーバから同時に参照・書き出しすることができる</li>
          <li>ブレードサーバ同士での VM イメージの参照を容易に行うことができる</li>
        </ul>
      </td>
    </tr>
  </table>
</div>

<div class='slide '>
  <h1>ie-virsh の動作するブレードサーバの性能</h1>
  <table border=1>
    <tr>
      <td>
        OS
      </td>
      <td>
        Debian 3.2.51
      </td>
    </tr>
    <tr>
      <td>
        CPU
      </td>
      <td>
        2 * Intel(R) Xeon(R) CPU X5650 @ 2.67GHz
      </td>
    </tr>
    <tr>
      <td>
        Memory
      </td>
      <td>
        128GB
      </td>
    </tr>
  </table>
  <p>この上で複数の学生が課題や Web サービスの学習を行う。</p>
</div>

<div class='slide '>
  <h1>ie-virsh の動作するブレードサーバの環境</h1>  
  <p>学生は ie-virsh を使用するためにブレードサーバ上のホスト OS へアクセスし、ie-virsh によって学生自身の VM を操作する。</p>
  <table>
    <tr>
      <td>
        <img src="images/serverstructure.png">
      </td>
      <td>
        <ul>
          <li>学生は学科のアカウントを用いて ssh でブレードサーバにアクセスし、ie-virsh を使用して VM を操作することができる</li>
          <li>情報工学科の IP アドレス配布に対応するため、仮想ブリッジで外部ネットワークと接続する</li>
          <li>設定した IP アドレスやドメイン名を使用して、VM へ ssh アクセスすることができる</li>
      </ul>
      </td>
    </tr>
  </table>
</div>

<div class='slide '>
  <h1>ie-virsh の機能</h1>
  <p>ie-virsh は virsh にある機能を制限し、学生に VM に必要な基本的な操作を提供する。</p>
  <table border=1 align=left>
    <tr>
      <th>command</th>
      <th>説明</th>
    </tr>
    <tr>
      <td>define</td>
      <td>XML の template を元に domain を作成</td>
    </tr>
    <tr>
      <td>undefine</td>
      <td>define で作成した domain の削除</td>
    </tr>
    <tr>
      <td>list</td>
      <td>define で作成した domain を一覧表示</td>
    </tr>
    <tr>
      <td>start</th>
      <td>指定した domain の VM を起動</td>
    </tr>
    <tr>
      <td>destroy</th>
      <td>指定した domain の VM を停止</td>
    </tr>
    <tr>
      <td>dumpxml</th>
      <td>domain の XML を参照</td>
    </tr>
  </table>
</div>

<div class='slide '>
  <h1>ie-virsh の使用例</h1>
  <p>授業 Operating System で学生にさせた操作の例を挙げる。</p>
  <h2>VM の作成</h2>
  <ol>
    <li>学生のノート PC で VMWare や VirtualBox を使用して Linux をインストール</li>
    <li>作成したイメージを OVF 形式から qcow2 へ変換</li>
    <li>ブレードサーバにアップロードし指定のディレクトリへ配置</li>
    <li>ie-virsh define [domain name] で domain name の VM を作成</li>
  </ol>
  <h2>VM の操作</h2>
  <ul>
    <li>ie-virsh start [domain name] で VM を起動</li>
    <li>ie-virsh destroy [domain name] で VM を停止</li>
    <li>ie-virsh delete [domain name] で [domain name] を削除</li>
  </ul>
</div>

<div class='slide '>
  <h1>マルチユーザへの対応</h1>
  <p>ie-virsh では各個人の操作を制限することによって、<font color="red">複数の学生の VM 使用を管理</font>することができる。</p>
  <ul>
    <li>学生の Web サービス構築の学習や、授業 Operating System での課題を少数のブレードサーバでさせるためには、マルチユーザに対応する必要がある</li>
    <li>ブレードサーバを情報工学科の LDAP サーバの情報を利用して、学生が情報工学科のアカウントで ssh ログイン可能な状態に設定した</li>
    <li>ie-virsh では学生がログインに用いたアカウントの持つ VM 以外は操作することができない</li>
    <li>そうすることで独自にアカウントを登録させる必要がなく、またアカウントは学籍番号で登録されているため管理が容易になる</li>
 </ul>
</div>

<div class='slide '>
  <h1>学生が持つことのできるリソースの制限</h1>
  <p>限られたリソースをマルチユーザとして複数の学生に配布するためには操作を制限するだけでなく、学生が個人で大量のリソースを取らないようにすることも必要である。</p>
  <h2>XML template</h2>
  <p>libvirt は VM を XML の設定ファイルを使用して管理している。ie-virsh ではその XML ファイルを事前に作成して template として用意することで、リソースを制限した。各学生が使用できる VM は、</p>
  <ul>
    <li>CPUの量: 1 core</li>
    <li>メモリ: 1 GB</li>
  </ul>
  <p>となっている。これらの設定を学生が使用する template XML ファイルに記述し、domain の作成時に自動的に適用する。</p>
  <h2>ドメイン数の制限</h2>
  <p>学生は VM のインスタンスを最大4つまで作ることができる。これは学生が大量に VM を作成・起動し、ブレードサーバのメモリや CPU を消費することを防ぐためである。</p>
</div>



<div class='slide '>
  <h1>Vagrant Box の使用</h1>  
  <h2>Vagrant</h2>
  <ul>
    <li>テスト用の仮想マシン作成や、環境設定などを自動化するツールである</li>
    <li>仮想環境の作成、破棄をコマンド実行で簡単に行える</li>
  </ul>
  <h2>Vagrant Box</h2>
  <ul>
    <li>Vagrant Box は Vagrant で使用される、仮想マシンのベースとなるイメージファイルである</li>
    <li>Vagrant を使って仮想マシンを操作するためには、Vagrant Box が必要</li>
  </ul>
  <h2>Vagrant Box の問題点</h2>
  <ul>
    <li>学生の PC で Vagrant を使って VM の設定し、設定した Vagrant Box からイメージファイルを抜き出して変換し、ブレードサーバにアップロードさせた</li>
    <li>Vagrant Box イメージは簡易なパスワードとユーザ名で Vagrant から管理されており、そのままブレードサーバへアップロードしグローバル IP アドレスを割り当ててしまうと、<font color="red">簡単に外部からの攻撃を受けてしまう</font></li>
    <li>そのためブレードサーバへアップロードしたイメージを<font color="red">起動して検査しセキュアな設定かどうかを確認する</font>必要がある</li>
  </ul>
</div>

<div class='slide '>
  <h1>構成に使ったツールと他のツールとの比較</h1>  
 <h2>OCFS2 と NAS</h2>  
 <ul>
   <li>ie-virsh の動作するサーバ構成では SAN へ複数のブレードサーバ が同時にアクセスするため ext3・ext4 のようなファイルシステムでフォーマットを行うと整合性が取れない</li>
   <li>OCFS2 は SAN に接続している複数の PC から同時に書き込まれてもファイルの整合性を保てる</li>
   <li>KVM から NFS で NAS に接続する、あるいは NFS 経由で自身の filesystem にアクセスすることでも同様なことが実現できるが、余計なネットワークトラフィックが出てしまう</li>
 </ul>
 <h2>KVM と VMWare ESXI</h2>  
 <ul>
   <li>ie-virsh はハイパーバイザとして KVM を使用している</li>
   <li>情報工学科では VMWare ESXI を利用しているが VMWare を使用するためにはコストがかかる</li>
   <li>KVM であれば Linux ベースの OS で利用できるため、無償で利用可能である</li>
   <li>性能的にもほぼ同等であるが、VMWare の方が若干高速である</li>
 </ul>
</div>

<div class='slide '>
 <h1>ie-virsh と他の VM 管理ツールとの比較 [1/2]</h1>  
 <h2>Vagrant</h2>  
 <ul>
   <li>KVM をプロバイダとするプラグインを持っているため、KVM を VirtualBox のようにプロバイダとして使用できる</li>
   <li>Vagrant をマルチユーザへ対応させ、学生が使えるように設定できるか試したが、Vagrant の KVM プラグイン vagrant-kvm が複数の VM でネットワークを使用できるように実装されていなかった</li>
   <li>また Vagrant を KVM で動かせたとしても、ie-virsh とできることがほぼ同じであり既存の Vagrant Box を使える以外の利点はない</li>
 </ul>
 <h2>OpenStack</h2>  
 <ul>
   <li>クラウド基盤ソフトウエアであり、仮想サーバやブロックストレージ、仮想ネットワークなどのリソースを提供する</li>
   <li>OpenStack はマルチユーザではないため、今回の複数の学生の権限を管理するツールとしては適さない</li>
 </ul>
</div>

<div class='slide '>
 <h1>ie-virsh と他の VM 管理ツールとの比較 [2/2]</h1>  
 <h2>Web サービス実装</h2>  
 <ul>
   <li>ie-virsh とは別に、<font color="red">vSphere の API を使用した Web サービス</font>が情報工学科で利用されている</li>
   <li>情報工学科の VMWare ESXI に VM を作成し、起動、停止することができる</li>
   <li>Web サービスは GUI を操作するためにブラウザを起動しなければならず、また新規に使用する際は GUI の操作になれる必要がある</li>
   <li>情報工学科の Web サービスは IP アドレスの配布と連携しているため VM 作成時に VM の IP アドレスの登録を自動で行う。ie-virsh は IP アドレスの登録は情報工学科のサービスを利用して行うため、新規に VM を作成する際には複数のサービスにまたがって操作する必要がある</li>
   <li>VM を管理するツールとして、<font color="red">webvirt</font> が本研究室で実装されている。仮想環境の Web 管理ツールである</li>
   <li>シングルノードのみを管理する目的で開発されているため、複数の学生が使用するにはマルチユーザ対応・リソースの制限ができるように実装する必要がある</li>
 </ul>
</div>

<div class='slide '>
 <h1>ie-virsh の改善点 [1/2]</h1>  
 <p>ie-virsh を実装し使用して発見した ie-virsh の改善が必要な点を挙げる。</p>
 <h2>VM のセキュリティチェック</h2> 
 <p>学生が VM のセキュリティ設定をしているか確認し、また VM に対して攻撃や不正なアクセスがないかを検査する機能が ie-virsh に必要である。</p>
 <ul>
   <li>簡単に VM へ侵入されてしまうことを防ぐために、Vagrant Box のような簡易なパスワードやユーザ名が設定されている VM のパスワードやユーザ名を変更するように促す</li>
   <li>外部からの不正なトラフィックを受け取らないように、ファイアウォールなどの機能が適切に設定されているかをチェックする</li>
   <li>侵入後に他の VM や外部へ攻撃しているかをチェックするために、VM までのトラフィックを監視し、学生の VM が外部へ不正なトラフィックを送っていないかを監視する</li>
 </ul>
</div>

<div class='slide '>
 <h1>ie-virsh の改善点 [2/2]</h1>  
 <h2>クラウドへのデプロイ</h2> 
 <p>学生が Web サービスを構築し、運用を続けるためには遠方からのアクセスにも対応する必要が出てくる。そのためには AWS やさくら VPS などの外部のクラウドサービスへ VM をデプロイできるようにする。</p>
  <table>
    <tr class="img-table">
      <td>
        <img style="margin: 20px;" src="images/workflow.png">
      </td>
      <td>
        <p>始めに学生は学生の PC 上の VM を設定し、ブレードサーバへアップロードする。Web サービスの構築を終わらせ、ブレードサーバでの運用が可能になると、次は遠方からのアクセスに対応しなければならない。</p>
        <p>遠方からのアクセスはネットワークの速度が遅く、ネットワーク的に近いクラウドサービスを利用しなければならない。そのため、ブレードサーバから外部のクラウドサービスへ Web サービスをデプロイする仕組みが必要である。</p>
      </td>
    </tr>
  </table>
</div>

<div class='slide '>
 <h1>まとめ</h1>  
 <ul>
   <li>学生が授業や Web サービスの学習を行えるよう ie-virsh を実装し、既存の管理ツールとの比較を行った。</li>
   <li>学生の権限を制限し、使用できる資源を絞る事によって管理者の手間を減らす事ができ、また学生と管理者のやりとりを減らすこともできた。</li>
   <li>学生は情報工学科のアカウントを持っていれば、Web サービスの構築や課題の学習の為に管理者とのやりとりなしに VM を作成し利用することができる。</li>
 </ul>
 <h1>今後の課題</h1>
 <ul>
   <li>安易なパスワードやユーザ名の設定されている VM を検出し、運営している学生に対して連絡する仕組みを実装する</li>
   <li>学生の VM に対してスキャンをかけ、適切なフィルタリングかを確認する</li>
   <li>不正なトラフィックを監視する</li>
   <li>クラウドサービスへ簡単にデプロイできるようにする</li>
   <li>起動したまま放置されている VM を見つけ、学生へ報告する仕組みを作る</li>
 </ul>
</div>

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