view paper/chapter4.tex @ 29:2345e39de180 default tip

add poster data and 5 minute presentation slide
author taiki
date Sun, 22 Feb 2015 00:22:01 +0900
parents 75220d70dfd9
children
line wrap: on
line source

\chapter{Shien システムでの管理方法}

本章では、Shien システムを用いたシステム管理の方法と、 VM やコンテナ操作方法を述べる。

\section{LDAP による権限管理}

VMWare vSphere Client では VM やシステムに対する権限を細かく設定できる。しかし各ユーザに対して適切な権限を振るのは多くの時間を要するため、自動的に権限を配布する必要がある。

教育用の計算機システムでは、権限は管理者とユーザのみに分けられる。そのため権限の配布は同一の権限をユーザに一度に振るのがよい。

本研究で提案する計算機システムでは、LDAP から取得したアカウントによって権限を配布する。情報工学科では学生や教師などのユーザアカウントを LDAP で管理しており、そのアカウントをそのまま権限配布に使用することができるためである。

またデータや VM のイメージを保存する iSCSI ストレージに各利用者へディレクトリを自動的に作成し、そのディレクトリにそれらを保存する。ディレクトリに各ユーザと管理者だけがアクセスできるように権限を設定する。

Shien システムの利用者は他の利用者の VM やコンテナに対して操作を行うことができず、またデータや VM を操作・改編することができない。

そのように、LDAP を使用して権限を管理できる。

\section{ie-virsh で使用する VM イメージのアップロード}

ユーザは iSCSI ストレージに VM イメージを保存する。この計算機システムでは各 VM 所有者ごとにディレクトリを分けて使う。

VM 使用者は手元の PC で VM イメージを作成し、実験・開発環境を作成する。次に VM イメージを iSCSI ストレージにアップロードする。アップロード先は iSCSIストレージ上にあるユーザ自身のディレクトリである。ie-virsh は VM を設定する XML ファイルをテンプレートから作成するため、VM イメージの形式は固定である。そのため、VM イメージをテンプレートに合わせた形式に変換する。

アップロードした後は、ie-virsh で XML テンプレートを使用したドメインを作成する。ie-virsh は virsh のドメインを自動的に定義することができる define コマンドを持っており、そのコマンドでドメインを作成する。

ドメインの定義は下記のように行う。

\begin{verbatim}
% ie-virsh define [01 - 04]
\end{verbatim}

ドメインは 01 から 04 までの名前をつけることができる。これは一人のユーザに対し、VM を4台に制限しているためである。

\section{VM の起動}

ie-virsh を使用して、作成したドメインの VM を起動する。
起動するには、下記の操作を行う。

\begin{verbatim}
% ie-virsh start [01 - 04]
\end{verbatim}

また、VM に適切な設定を行うことによって、console でログインすることができる。
console を使用するには下記の操作を行う。

\begin{verbatim}
% ie-virsh console [01 - 04]
\end{verbatim}

各 VM 所有者自身で console にアクセスすることができるため、間違った VM の設定を適用したとしても管理者に連絡する必要はない。console でアクセスし、正しい設定に変更することができる。

\section{VM のリストの取得}

VM 所有者は ie-virsh を使用して自身の持つ VM の一覧を見ることができる。下記の操作を行う。

\begin{verbatim}
% ie-virsh list
\end{verbatim}

virsh はオプションで --all をつけることによって停止した VM も一覧することができるが、ie-virsh はサーバ用途以外の実験にも使用されるため、VM を停止する場合も多い。そのため ie-virsh の  list コマンドではオプションを付けなくても停止している VM が一覧に含まれる。

\section{VM の停止}

VM の停止は下記のコマンドで行う。

\begin{verbatim}
% ie-virsh destroy [01 - 04]
\end{verbatim}

virsh の destroy コマンドをため、VM を強制的に停止させる。

\section{VM への console ログイン}

VM へ console でログインするには、下記の操作を行う。VM が console から見れるよう、正しく設定しておく必要がある。

\begin{verbatim}
% ie-virsh console [01 - 04]
\end{verbatim}

VM へリモートログインできなくなった時に、VM の設定を修正するために使用させる。管理者は console ログインするための連絡を使用者とやりとりする必要はない。

\section{VM のブレードサーバ間の移動}

ブレードサーバは GFS2 でフォーマットされた Fibre Channel ストレージを共有している。Shien システムではそのストレージに VM イメージを配置する。VM イメージはどのブレードサーバからでも起動することができる。

VM を他のブレードサーバへ移動するには、VM の XML 設定ファイルを移動先のブレードサーバへコピーし、virsh のコマンドで define する。

Fibre Channel ストレージにある VM イメージのパスが同じであれば、そのまま起動することができる。

また VM イメージは共有しているため、移動元の起動中の VM の VM イメージを使って移動先のブレードサーバで VM を起動することも可能となっている。

virsh の機能として、ライブマイグレーション機能がある。GFS2 はライブマイグレーションに対応している。ライブマイグレーション機能を利用することで、他のブレードサーバへ起動中の VM を起動したまま移動させることが可能である。

\section{Kernel debug 方法}

本研究では、ie-virsh の新しい機能として debug コマンドの実装を行った。本学科には Operating System という授業がある。その授業では OS について学習するため、Linux kernel を読む課題を出す。ie-virsh の開発はその授業 Operating System の課題に対応するためである。

KVM には gdb で接続するための Port を指定し、接続すると gdb から Linux kernel のデバッグへ入ることができる。更に libvirt の XML 設定ファイルに、KVM へ gdb で接続するために開ける VM の Port を記述することで、VM の Port を開くことができる。

今回は図\ref{fig:ievirshdebug} のように、Port の Pool から Port 番号を取得し、デバッグ対象の VM を起動し、その VM へ gdb で接続するという方法で実装した。Port は、libvirt の XML 設定ファイルに Port 番号を書き込み、VM を起動することで割り当てられる。

\begin{figure}[htpb]
  \begin{center}
    \includegraphics[scale=0.7]{figures/ievirshdebug.pdf}
    \caption{ie-virsh debug}
    \label{fig:ievirshdebug}
  \end{center}
\end{figure}

Kernel debug をするためには、下記のコマンドを実行する。

\begin{verbatim}
% ie-virsh debug
\end{verbatim}

実行後は gdb に入る。

\section{ie-docker によるコンテナの起動}

任意の Process name を下記のコマンドを使用して割り当て、コンテナを起動する。

\begin{verbatim}
% ie-docker run -i -t --name [process name] [image name] [exec command]
\end{verbatim}

Process name は任意に割り当てることができる。同名の Process name は使用できない。また process name はアカウント名が ie-docker によって補完されるため、他のユーザが作成したp Process name と被ることはない。

一度 run を行ったコンテナに対しては、run を打たなくても下記のように起動することができる。

\begin{verbatim}
% ie-docker start [process name]
\end{verbatim}

\section{ie-docker によるコンテナの停止}

コンテナの停止は下記のコマンドを使用する。

\begin{verbatim}
% ie-docker stop [process name]
\end{verbatim}


\section{Docker からの iSCSI ストレージの使用}

最初に iSCSI ストレージ上に Repository を作成する。 下記のコマンドを実行することによって管理者が指定した iSCSI ストレージ上のディレクトリに Repository が作成される。また Repository ごとの Port 割り当ても下記のコマンド実行時に行われる。

\begin{verbatim}
% ie-docker create [repository name]
\end{verbatim}

次に Repository name を使用してコンテナを起動する。またコンテナ内部から外へ出す Port を指定する。これによってホストの Port とコンテナの Port を接続し、コンテナの外部と通信することができる。

Docker の特徴として、Commit を行なわずにコンテナを止めてしまうと、コンテナ内部に保存していたデータが消える。つまり Commit 前にコンテナに追加されたデータを保つためには、コンテナの外部にデータを保存しておかなければならない。

Shien システムでは、iSCSI で接続されたストレージにコンテナのデータを保存する。そうすることによってデータを保護することができ、またコンテナのイメージ内に動作に必要でないデータを配置しなくてよい。

Docker は、ホストのディレクトリをコンテナ内部のディレクトリにマッピングすることができる。ie-docker もその機能を持つ。-v オプションを使い、下記のように Docker コンテナを実行する。

\begin{verbatim}
% ie-docker run -i -t -p [port number] -v [directory:container directory] \ 
    --name [process name] fedora:20 /bin/bash
\end{verbatim}

実行されたコンテナはホストのディレクトリにマッピングされた、任意の名前のディレクトリを参照することができる。iSCSI ストレージ上にアプリケーションの Repository を配置し、コンテナでその Repository 上のアプリケーションを動作させる。

また ie-docker は指定したディレクトリにまとめてユーザの Repository を作成する。管理者は指定したホストのディレクトリに対して容量の制限をかければよい。

起動中のコンテナに対しては、下記のコマンドで接続し操作することができる。

\begin{verbatim}
% ie-docker attach [process name]
\end{verbatim}

attatch 後は Ctrl-p Ctrl-q でコンテナを止めずに切断することができる。