view paper/ievirsh.tex @ 16:9fe7c82f0a9c

fix pdf
author taiki <taiki@cr.ie.u-ryukyu.ac.jp>
date Mon, 21 Apr 2014 19:24:03 +0900
parents 733691adea78
children 81cd898c04d4
line wrap: on
line source

\section{ie-virsh}\label{section:ievirsh}
ie-virsh は、virsh をラップして作られた VM 管理用のツールである。学生は ssh で学科アカウントを使用してブレードサーバに接続し、ie-virsh を使用して VM を操作することができる。
表\ref{table:ievirshfunc}が ie-virsh の機能である。

\begin{tiny}
    \begin{table}[ht]
        \begin{center}
            \caption{ie-virsh のコマンド}
            \label{table:ievirshfunc}
            \small
            \begin{tabular}[t]{c|l}
                \hline
                define & XML の template を元に domain を作成 \\
                \hline
                undefine & define で作成した domain を削除 \\
                \hline
                list & define で作成した domain を一覧表示 \\
                \hline
                start & 指定した domain 名の VM を起動 \\
                \hline
                destroy & 指定した domain 名の VM を停止 \\
                \hline
                dumpxml & domain の XML を参照 \\
                \hline
            \end{tabular}
        \end{center}
    \end{table}
\end{tiny}

ie-virsh には virsh にあるような、ネットワークの構成などの管理者側がするべき操作はなく、管理者でない学生は操作できないようになっている。また学生は、他の学生の VM を操作することもできない。

学生が ie-virsh を使用して VM を起動する手順はこうである。まず学生のノートPCで、VMWare や VirtualBox を使って Linux をインストールし、イメージを作成する。作成したイメージをブレードサーバにアップロードする。イメージを VirtualBox の OVF 形式から qcow2 形式に変換して指定のディレクトリに配置し、以下のコマンドを実行する。

\begin{verbatim}
% ie-virsh define [domain name]
\end{verbatim}

そうすると、template XML を元に domain が生成される。
ie-virsh は XML の template を持ち、その template は学生が VM のイメージをブレードサーバにアップロードして define した際に使用される。template には virsh 上で VM を使用するために必要な設定が記述されている。
生成された domain は以下のように起動することができる。

\begin{verbatim}
% ie-virsh start [domain name]
\end{verbatim}

自身が持っている VM の状態を、下記のコマンドで見ることができる。

\begin{verbatim}
% ie-virsh list
uid 45273 gid 45273 name taiki
    -     test/taiki/01         shut off

    -     test/taiki/02         shut off
\end{verbatim}

\subsection{ie-virsh の動作環境}

ホストサーバの環境は以下である。

\begin{itemize}
\item OS:debian
\item CPU: Intel(R) Xeon(R) CPU X5650 @ 2.67GHz
\item CPU 数: 2
\item Core 数: 6 core (論理 core 24)
\item メモリ: 128GB
\end{itemize}

SAN は Oracle Cluster Filesystem(OCFS2) でのフォーマットを行った。OCFS2 は汎用の、共有ディスククラスタファイルシステムである。一つのブロックデバイスを複数の PC から同時に読み書きすることができる。

各計算ノードがそれぞれファイルシステムへの処理を行い、ストレージに対して個別に読み書きをする。一貫性を持った読み書きを実現する機構として Distributed Lock Manager (DLM) が使われる。DLM で他の計算ノードと矛盾しないように調整しながらそれぞれの計算ノードが並行してストレージへの読み書きを行うことで、全体として一貫性のあるファイルシステムを実現している。

標準のファイルシステムインターフェイスを通じてすべてのノードが並行してストレージに読み書きできるため、クラスタにまたがって動作するアプリケーションの管理が容易になる。

OCFS2 との接続は、図\ref{fig:sanstructure}となっている。複数台のブレードサーバから OCFS2 でフォーマットされたファイルシステムへ接続し、書き込みを行う。ブレードに内蔵されている SSD では大量の VM イメージを保存するには足りないため、外部の記憶装置を利用する必要があるためである。
また別のブレードサーバ上に KVM をたてた場合に移行が容易になる。

\begin{figure}[htb]
    \begin{center}
        \includegraphics[scale=0.6]{./images/sanstructure.pdf}
    \end{center}
    \caption{San structure}
    \label{fig:sanstructure}
\end{figure}

情報工学科では、グローバルIPアドレスを取得することができる。学生は取得したIPアドレスを使用して VM へ ssh アクセスする。そのため、virsh が作る仮想ネットワークではなく、情報工学科の DHCP サーバによって学生のIPアドレスが受け取られるように設定する必要がある。それには仮想ブリッジを配置してその問題に対処した。

図\ref{fig:serverstructure}は ie-virsh を使用して学生が VM を配置するホストの構成である。

\begin{figure}[htb]
    \begin{center}
        \includegraphics[scale=0.6]{./images/serverstructure.pdf}
    \end{center}
    \caption{Server structure}
    \label{fig:serverstructure}
\end{figure}


\subsection{資源の制限}
学生が作成する VM は、XML のテンプレートを元に作成される。テンプレートは VM にしておくべき設定が記述されており、ie-virsh はこのテンプレートを元に学生の XML ファイルを生成する。
XML template にされている設定は以下のようになる。これによって学生が使用するブレードサーバの資源を制限し、過剰なメモリや CPU の確保を防ぐ。

\begin{itemize}
\item ネットワークの設定
\item I/O 設定
\item VM イメージのフォーマット
\item CPU 数
\item メモリ容量
\end{itemize}

ie-virsh は XML template を元に以下の設定を追記したファイルを作成する。

\begin{itemize}
\item VM 名
\item UUID
\item VM イメージの配置
\end{itemize}

また学生が VM を大量に作成することを防ぐため、作成できる VM の台数を4台に制限した。授業 Operating System を 60 名の学生が受講する場合、最大 240 台作成される。

学生の Web サービス構築の学習や、授業 Operating System で複数の学生の使用に対応するため ie-virsh はマルチユーザで動作する必要がある。情報工学科で使用されている LDAP サーバの情報を使用して、学生が学科のアカウントで ssh ログイン可能な状態に設定した。そうすることで、学生一人一人のアカウントを登録する必要がない。またアカウント名は学籍番号になっているため学籍番号で管理することができる。

複数の学生に VM を貸し出す際に管理しなければならないのは、学生が持つ権限である。ie-virsh で学生が可能なことは、自身の VM の作成・削除と、起動・停止である。すべての VM に関係する仮想ネットワークの設定や、他の学生の VM に対する操作はできないように設定した。

\subsection{Vagrant Box の利用}

VM を使用する際は学生の PC で VM を設定し、VM イメージをアップロードさせるという形をとった。授業 Operating System では VM を学ぶ環境として学生の PC で Vagrant を使用させた。

Vagrant は異なる環境に移行可能な開発環境を簡単に構築・管理・配布することが出来る開発環境作成ツールである。手軽にテスト環境を導入することができ、変更が加わっても開発環境・本番環境に自動的に適用される。また、環境を気軽に捨てることも可能である。ホスト環境として、VirtualBox や VMWare などで動かすことができる。表\ref{table:vagrantfunc}は Vagrant で使用することの主な機能である。

\begin{tiny}
    \begin{table}
        \begin{center}
            \caption{vagrant の主なコマンド}
            \label{table:vagrantfunc}
            \small
            \begin{tabular}[t]{c|l}
                \hline
                up & Vagrant Box を起動 \\
                \hline
                destroy & 仮想マシンの削除 \\
                \hline
                halt & 起動している Vagrant Box の停止 \\
                \hline
                ssh & 起動している Vagrant Box へ ssh 接続 \\
                \hline
                status & ステータスの確認 \\
                \hline
                box add & 新しい Vagrant Box の追加 \\
                \hline
            \end{tabular}
        \end{center}
    \end{table}
\end{tiny}

また Vagrant で仮想マシンを利用する際に、仮想マシンのベースとなるイメージファイルが Vagrant Box である。Vagrant で Vagrant Box を VM イメージとして起動し、開発環境を構築し配布することができる。また配布されている Vagrant Box を取得し、Vagrant で起動し使用することが可能である。

Vagrant は学生の PC の VirtualBox で使用させたため、Vagrant Box の VM イメージは VirtualBox に対応する OVF 形式となっていた。そのため OVF 形式から、KVM で動作する形式へ変換する必要があった。学生はブレードサーバへ VM イメージをアップロードする際、OVF 形式から KVM で動作する qcow2 形式へ変換する。

しかし Vagrant Box イメージは簡易なパスワードとユーザ名で Vagrant から管理されており、そのままブレードサーバへアップロードしグローバルIPアドレスを割り当ててしまうと、外部からの攻撃を受けてしまう。そのためブレードサーバへアップロードしたイメージを検知し、攻撃されないような設定かどうかを確認する必要がある。