# HG changeset patch # User Ken Miyahira # Date 1596445792 -32400 # Node ID db794a6414e4f0912785b0d12ca2106f2e11b118 # Parent ef6f19e8ec753dea9683191cc40f01e53b8ae469 update tex, add figs diff -r ef6f19e8ec75 -r db794a6414e4 paper/Images/apibase.pdf Binary file paper/Images/apibase.pdf has changed diff -r ef6f19e8ec75 -r db794a6414e4 paper/Images/apihukusu.pdf Binary file paper/Images/apihukusu.pdf has changed diff -r ef6f19e8ec75 -r db794a6414e4 paper/Images/nagi.graffle Binary file paper/Images/nagi.graffle has changed diff -r ef6f19e8ec75 -r db794a6414e4 paper/Images/singularity.pdf Binary file paper/Images/singularity.pdf has changed diff -r ef6f19e8ec75 -r db794a6414e4 paper/mk-wm.pdf Binary file paper/mk-wm.pdf has changed diff -r ef6f19e8ec75 -r db794a6414e4 paper/mk-wm.tex --- a/paper/mk-wm.tex Mon Aug 03 14:39:40 2020 +0900 +++ b/paper/mk-wm.tex Mon Aug 03 18:09:52 2020 +0900 @@ -177,7 +177,7 @@ だが, イメージの Build には sudo 権限が必要となる。Docker イメージの Build を申請性にすると, 管理者の仕事が増え, 学生も利用しづらい。 また, Singularity はユーザ権限で動作するため, 学生が ssh でブレードサーバへ接続し利用する方が適している。 そこで, Web コンソールから Singularity 用のイメージをダウンロードできる仕様とする。\par -学生は利用したいイメージをダウンロードし, ブレードサーバへ送信して Singularity を使用することができる。 +学生は利用したいイメージをダウンロードし, ブレードサーバへ送信して Singularity を使用する。Singularity を利用する流れを図\ref{fig:singu} に示す。 \begin{figure}[tb] \begin{center} @@ -187,42 +187,60 @@ \label{fig:wm} \end{figure} +\begin{figure}[tb] + \begin{center} + \includegraphics[width=80mm]{Images/singularity.pdf} + \end{center} + \caption{Singularityの利用} + \label{fig:singu} +\end{figure} + \section{サービスの実装} 本コースでは ブレードサーバが 4 台導入され, 1 台に 1 つ GPU が搭載されている。コンテナ貸出サービスの機能を 1 つにまとめると Docker の操作が 1台のブレードサーバのみになる。 -そこで, 機能ごとに以下の 3 つにサービスに分ける。また, Docker や Kubernetes の操作を HTTP API で提供することで, リクエスト先の変更で複数のブレードサーバにコンテナを分散することができる。\par +そこで, 機能ごとに以下の 3 つにサービスに分ける。また, Docker や Kubernetes の操作を HTTP API で提供することで, 図\ref{fig:api} のようにリクエスト先の変更にで複数のブレードサーバにコンテナを分散することができる。 +だが, 現時点では未実装である。\par 実装にはDocker や Kubernetes の実装言語であり, 操作するためのライブラリが揃っている Go 言語を使用する。 \begin{itemize} - \item Web コンソールの表示 + \item Web コンソール \item Docker の操作 \item Kubernetes の操作 \end{itemize} -\subsection{Web コンソールの表示} -実装には Go 言語の Web フレームワークの 1 つである Gin を使用した。 +\begin{figure}[tb] + \begin{center} + \includegraphics[width=80mm]{Images/apihukusu.pdf} + \end{center} + \caption{機能の分散} + \label{fig:api} +\end{figure} + +\subsection{Web コンソール} +Web コンソールは本コースの学生や教員が利用するため, 学科のアカウントでログインできる LDAP 認証が必須である。 +また, GUI で操作するため, 新しく GUI の操作に慣れる必要があることから, ユーザが操作しやすい必要がある。\par +Docker の操作や Kubernetes の操作を行う HTTP API はセッション管理を行わないため, Web コンソールで管理する必要がある。 +そのため, ユーザのコンテナやイメージをデータベースに格納して管理する。 +ユーザのアカウントID と コンテナに紐づけられたアカウントID が等しい場合のみ操作を行うことができる。そのため, 他のユーザのコンテナやイメージを操作できない。 +また, ユーザが作成する Docker イメージは他のユーザに共有や非共有ができる。共有されたイメージは共有イメージの一覧に表示され, 他のユーザがコンテナを作成する時に利用することができる。 +コンテナ作成時にイメージの確認が行われることで, 非共有に設定したイメージを他のユーザが利用することはできない。 \subsection{Docker の操作} -実装には Web コンソールと同じ Gin を使用し, Docker の操作を行うための SDK である Docker client \cite{dockercli} を使用する。 +実装には Docker の操作を行うための SDK である Docker client \cite{dockercli} を使用する。 Docker は sock に対して curl コマンドで操作できる HTTP API を提供している。sock だと複数のサーバに対応できないため, Go で HTTP API を実装する。\par サービスを提供する上で Docker の必要となる操作は以下である。 \begin{itemize} \item コンテナの作成 \item コンテナの削除 - \item コンテナでコマンド実行 + \item コンテナでのコマンド実行 \item コンテナへファイル送信 + \item イメージ一覧の取得 \item イメージの削除 \item GitLab Runner の作成 \end{itemize} -コンテナを作成するにあたって必要となるリクエスト情報は以下である。 -\begin{itemize} - \item コンテナ名 - \item コンテナ - \item イメージの削除 - \item GitLab Runner の作成 -\end{itemize} \subsection{Kubernetes の操作} -実装には Web コンソールと同じ Gin を使用し, Kubernetes の操作を行うためのライブラリである client-go \cite{kubecli} を使用する。 +実装には Kubernetes の操作を行うためのライブラリである client-go \cite{kubecli} を使用する。 + \section{サービスの評価}