view slide/sigos.html @ 33:1e9927bf5bea

update slide
author taiki <taiki@cr.ie.u-ryukyu.ac.jp>
date Tue, 06 May 2014 18:04:41 +0900
parents 6ed41b9464ed
children ec442b0542cb
line wrap: on
line source

<!DOCTYPE html>
<html>
<head>
   <meta http-equiv="content-type" content="text/html;charset=utf-8"> 
   <title>Slide Show (S9) 10-Minute Tutorial</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 style="font-size:70px;margin:60px;padding:5px">OS 授業向けのマルチユーザ VM 環境の構築</p>
<p style="font-size:30px;margin:60px;padding:5px">琉球大学大学院 理工学研究科 情報工学専攻</p>
<p style="font-size:30px;margin:60px;padding:5px">平良 太貴</p>

</div>

<div class='slide'>
<!-- _S9SLIDE_ -->
<h1>研究目的</h1>

<h2>VM を用いた Web サービスの教育</h2>

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

</div>

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

<div class='slide '>
  <h1>ie-virsh</h1>
  <p>virsh をラップし、複数の学生が学生自身の VM のみを操作できるように実装した。virsh の個々の VM を操作するのに必要な機能だけを抜き出し、学生に提供する。</p>
  <h2>virsh</h2>
  <ul>
    <li>libvirt にある CLI ツールである</li>
    <li>libvirt の API を制御することができる</li>
    <li>VM の起動や停止、情報の表示、ゲストが接続しているネットワークデバイスの管理をすることができる。</li>
    <li>別のホストへゲストを移動することができる。</li>
  </ul>
</div>


<div class='slide '>
  <h1>ie-virsh - ie-virsh の機能</h1>
  <p>ie-virsh は virsh にある機能を制限し、学生に VM に必要な基本的な操作を提供する。またこれらの操作を、学生自身の VM 以外の 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>
  <ol>
    <li>学生のノート PC で VMWare や VirtualBox を使用して Linux をインストール</li>
    <li>作成したイメージをブレードサーバへアップロード</li>
    <li>イメージを OVF 形式から qcow2 形式へ変換し、指定のディレクトリへ配置</li>
    <li>ie-virsh define [domain name] で domain name を定義</li>
    <li>ie-virsh start [domain name] でイメージを元に VM を起動</li>
  </ol>
</div>

<div class='slide '>
  <h1>ie-virsh - リソースの制限</h1>
  <p>学生が個人で大量のリソースを取らないよう、制限する必要がある。</p>
  <h2>XML template</h2>
  <p>libvirt は VM を、XML の設定ファイルを使用して管理している。ie-virsh ではその XML ファイルを template として用意することにより、リソースを制限した。</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>ie-virsh - マルチユーザ</h1>
  <p>学生の Web サービス構築の学習や、授業 Operating System での課題をさせるためにはマルチユーザに対応する必要がある。</p>
  <p>ホストを、情報工学科の LDAP サーバの情報を利用して、学生が情報工学科のアカウントで ssh ログイン可能な状態に設定した。</p>
  <p>そうすることで独自にアカウントを登録させる必要がなく、またアカウントは学籍番号で登録されているため管理が用意になる。</p>
</div>

<div class='slide '>
  <h1>ie-virsh - OCFS2 を使った構成</h1>  
  <p>汎用の共有ディスククラスタファイルシステムであり一つのブロックデバイスを複数の PC から同時に読み書きすることができる。</p>
  <table>
    <tr class="img-table">
      <td>
        <img src="images/sanstructure.png">
      </td>
      <td>
        <p>ie-virsh は情報工学科のブレードサーバの一つで動作している。OCFS2 により、ストレージは複数のブレードサーバから同時に参照することができる。ブレードサーバ同士での VM の移動やコピーを容易に行うことができる。</p>
      </td>
    </tr>
  </table>
  <p>またこのブレードサーバの一つを、学生が使用する。</p>
</div>

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

<div class='slide '>
  <h1>ie-virsh - Vagrant Box の使用</h1>  
  <ul>
    <li>VM を使用する際は学生の PC で VM を設定させ、VM イメージをアップロードさせるという形をとった。授業 Operating System では VM を学ぶ環境として学生の PC で Vagrant を使用させた。</li>
    <li>Vagrant Box は Vagrant での、仮想マシンのベースとなるイメージファイルである。</li>
    <li>Vagrant Box イメージは簡易なパスワードとユーザ名で Vagrant から管理されており、そのままブレードサーバへアップロードしグローバル IP アドレスを割り当ててしまうと、外部からの攻撃を受けてしまう。そのためブレードサーバへアップロードしたイメージを検知し、攻撃されないような設定かどうかを確認する必要がある。</li>
  </ul>
</div>

<div class='slide '>
 <h1>他のツールとの比較</h1>  
 <h2>OCFS2 と NAS</h2>  
 <ul>
   <li>ie-virsh の動作するサーバ構成では SAN へ複数の PC がアクセスし、同時にアクセスするため ext3・ext4 のようなファイルシステムでフォーマットを行うと整合性が取れない。</li>
   <li>OCFS2 は SAN 上の複数の PC から書き込まれてもファイルは整合性を保てる。</li>
 </ul>
 <h2>KVM と VMWare ESXI</h2>  
 <ul>
   <li>ie-virsh はハイパーバイザとして KVM を使用している。</li>
   <li>情報工学科では VMWare ESXI を利用しているが VMWare を使用するためにはコストがかかる。</li>
   <li>KVM であれば Linux ベースの OS で利用できるため、無償で利用可能である。</li>
 </ul>
</div>

<div class='slide '>
 <h1>他のツールとの比較 - 管理ツールとの比較</h1>  
 <h2>vSphere Client</h2>  
 <ul>
   <li>vSphere Client は仮想環境の統合管理をするプラットフォーム vCenter Server と接続し、管理する。</li>
   <li>vSphere Client は詳細な権限の設定が可能で、複数の学生に対して VM を配布し権限を管理する。</li>
   <li>手動で権限を移譲する場合は管理者側の操作が増え、学生への権限の配布に手間と時間が掛かる。</li>
   <li>ie-virsh は権限を移譲するという操作が必要なく、機能も学生が VM を操作するには十分である。</li>
 </ul>
 <h2>Vagrant</h2>  
 <ul>
   <li>KVM をプロバイダとするプラグインを持っているため、KVM を VirtualBox の用にプロバイダとして使用できる。</li>
   <li>Vagrant をマルチユーザへ対応させ、学生が使えるように設定できるか試したが、Vagrant の KVM プラグイン vagrant-kvm が複数でネットワークを使用できるように実装されていなかった。</li>
   <li>また ie-virsh と できることがほぼ同じであり、既存の Box を使える以外の利点はない。</li>
 </ul>
</div>

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

<div class='slide '>
 <h1>他のツールとの比較 - 管理ツールとの比較</h1>  
 <h2>OpenStack</h2>  
 <ul>
   <li>クラウド基盤ソフトウエアであり、仮想サーバやブロックストレージ、仮想ネットワークなどのリソースを提供する。</li>
   <li>OpenStack はマルチユーザではないため、今回の複数の学生の権限を管理するツールとしては適さない。</li>
 </ul>
</div>

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

<div class='slide '>
 <h1>ie-virsh の改善点</h1>  
 <h2>クラウドへのデプロイ</h2> 
 <p>学生が Web サービスを構築し、運用を続けるためには遠方からのアクセスにも対応する必要が出てくる。そのためには AWS やさくら VPS などの外部のクラウドサービスへ VM をデプロイできるようにする。</p>
  <table>
    <tr class="img-table">
      <td>
        <img 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></li>
 </ul>
</div>

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