0
|
1 %%
|
|
2 %% 研究報告用スイッチ
|
|
3 %% [techrep]
|
|
4 %%
|
|
5 %% 欧文表記無しのスイッチ(etitle,eabstractは任意)
|
|
6 %% [noauthor]
|
|
7 %%
|
|
8
|
|
9 %\documentclass[submit,techrep]{ipsj}
|
|
10 \documentclass[submit,techrep,noauthor]{ipsj}
|
|
11
|
|
12
|
|
13
|
|
14 \usepackage[dvips,dvipdfmx]{graphicx}
|
|
15 \usepackage{latexsym}
|
|
16 \usepackage{listings}
|
|
17 \lstset{
|
|
18 language=C,
|
|
19 tabsize=2,
|
|
20 frame=single,
|
|
21 basicstyle={\tt\footnotesize}, %
|
|
22 identifierstyle={\footnotesize}, %
|
|
23 commentstyle={\footnotesize\itshape}, %
|
|
24 keywordstyle={\footnotesize\ttfamily}, %
|
|
25 ndkeywordstyle={\footnotesize\ttfamily}, %
|
|
26 stringstyle={\footnotesize\ttfamily},
|
|
27 breaklines=true,
|
|
28 captionpos=b,
|
|
29 columns=[l]{fullflexible}, %
|
|
30 xrightmargin=0zw, %
|
|
31 xleftmargin=1zw, %
|
|
32 aboveskip=1zw,
|
|
33 numberstyle={\scriptsize}, %
|
|
34 stepnumber=1,
|
|
35 numbersep=0.5zw, %
|
|
36 lineskip=-0.5ex,
|
|
37 }
|
|
38 \usepackage{caption}
|
|
39
|
|
40
|
|
41 \def\Underline{\setbox0\hbox\bgroup\let\\\endUnderline}
|
|
42 \def\endUnderline{\vphantom{y}\egroup\smash{\underline{\box0}}\\}
|
|
43 \def\|{\verb|}
|
|
44 %
|
|
45
|
|
46 %\setcounter{巻数}{59}%vol59=2018
|
|
47 %\setcounter{号数}{10}
|
|
48 %\setcounter{page}{1}
|
|
49 \renewcommand{\lstlistingname}{Code}
|
|
50
|
|
51 \begin{document}
|
|
52
|
|
53
|
|
54 \title{情報工学科演習用のコンテナ技術を用いた新規サービスの設計・実装}
|
|
55
|
|
56 %\etitle{How to Prepare Your Paper for IPSJ SIG Technical Report \\ (version 2018/10/29)}
|
|
57
|
|
58 \affiliate{KIE}{琉球大学大学院理工学研究科情報工学専攻}
|
|
59 \affiliate{IE}{琉球大学工学部工学科知能情報コース}
|
|
60
|
|
61
|
|
62 \author{宮平 賢}{Miyahira Ken}{IE}[mk@cr.ie.u-ryukyu.ac.jp]
|
|
63 \author{河野 真治}{Shinji Kono}{IE}[kono@ie.u-ryukyu.ac.jp]
|
|
64
|
|
65 \begin{abstract}
|
|
66 IT技術を学ぶ時の学習環境の 1つとして, OS 上の隔離された環境を構築する技術であるコンテナがある. これらはローカルに設置された計算機, あるいはクラウド上に作られる.
|
|
67 作成されるコンテナは学生, あるいは教員側から適切に管理するシステムが必要となる.
|
|
68 管理システムはマルチユーザで動作するのは当然として, 利用者や管理者に適したUI, sudo権限で動作するコンテナへの対処などが含まれる.
|
|
69 学生の演習には, Webサービスの実装や人工知能の学習などがある. そのため, 気軽に開発環境やテスト環境などを用意できる利用のしやすさが重要である.
|
|
70 本稿ではコンテナ管理ソフトウェアである Docker, Singularity を用いた新規 Web サービスの設計・実装を行う.
|
|
71 \end{abstract}
|
|
72
|
|
73
|
|
74 \maketitle
|
|
75
|
|
76 \section{はじめに}
|
|
77 情報通信技術の普及に伴い学生が学ぶ学習環境が必要となる。その学習環境として VM や コンテナにより, 手軽に開発し試せる技術が普及している。
|
|
78 だが, 手元の PC 上で VM や コンテナを立ち上げ, 開発を行うことはできるが, VM や コンテナの使用には高性能 PC や 有料のクラウドサービスが必要になる場合がある。
|
|
79 この大きな負担を学生に負わせない仕組みが必要である。\par
|
5
|
80 琉球大学工学部工学科知能情報コースでは希望の学生に学科のブレードサーバから仮想環境を貸出すサービスを行なっている。貸出をする VM のデフォルトのスペックでは
|
|
81 不足の場合, 要望に応じてスペックの変更を行なっている。だが, 貸出サービスでは GPU を利用した処理環境を提供することができない。
|
0
|
82 %だが, 貸出サービスでは近年盛んに行われている人工知能の研究に必要な環境を提供することができない。
|
5
|
83 GPU が搭載されている PC は研究室によっては用意されているが, 研究室に所属していない学生は利用することができない。そのため, 新たな仕組みが必要である。\par
|
|
84 学科のブレードサーバに搭載される GPU は VM の貸出サービスでは利用することができない。そこでコンテナ技術を利用する。
|
|
85 コンテナ管理ソフトウェアである Docker では NVIDIA Container Toolkit である nvidia-docker を利用することで, 複数のコンテナで GPU を共有することができる。
|
|
86 Docker は基本的に root 権限で動作する。また一般ユーザが docker コマンドを使用するには docker グループに追加する必要がある。
|
|
87 そのため Docker をマルチユーザ環境で使用すると, 他ユーザのコンテナへアクセスができるなどセキュリティの問題がある。\par
|
0
|
88 そこで, 本論文では, Docker と マルチユーザ環境で利用しやすい Linux コンテナである Singularity を利用したコンテナ貸出サービスを提案する。
|
5
|
89 このコンテナ貸出サービスでは, Web コンソールからコンテナの操作を行うことで他ユーザのコンテナへの操作をさせない。また, 本コースの類似サービスの課題でもあったデータの永続化を
|
|
90 Singularity で, 外部リポジトリの利用を Docker の操作を HTTP API で提供することで解消する。
|
0
|
91
|
|
92
|
5
|
93 \section{本コースの類似サービス}
|
|
94 本サービスに類似したサービスとして, Docker をラップし複数のユーザで利用することを目的とした ie-docker \cite{ie-docker}, Kubernetes を利用した教育用コンテナ貸出を目的とした, digdog \cite{digdog} がある。
|
0
|
95 \subsection{ie-docker}
|
|
96 ie-docker とは Docker をラップし複数のユーザで利用することのできるコンテナ管理ツールである。
|
|
97 利用する学生は ssh でブレードサーバへ接続し, ie-docker を使用してコンテナを操作することができる。
|
|
98 ie-docker は UID 及び GID 情報を取得し他のユーザのコンテナを操作させない。
|
5
|
99 またユーザが使える docker の機能を制限する。表\ref{tb:ie-docker}が ie-docker で利用できる機能である。
|
0
|
100
|
|
101 \begin{table}[htb]
|
|
102 \begin{center}
|
|
103 \caption{ie-docker のコマンド}
|
|
104 \begin{tabular}{c|l} \hline
|
|
105 ps & 起動中のコンテナの一覧を表示する \\ \hline
|
|
106 run & コンテナを作成する \\ \hline
|
|
107 start & コンテナを起動する \\ \hline
|
|
108 stop & コンテナを停止する \\ \hline
|
|
109 attach & 起動しているコンテナに attach する \\ \hline
|
|
110 cp & コンテナにファイルを送信する \\ \hline
|
|
111 rm & コンテナを削除する \\ \hline
|
|
112 \end{tabular}
|
|
113 \label{tb:ie-docker}
|
|
114 \end{center}
|
|
115 \end{table}
|
|
116
|
|
117 \subsection{digdog}
|
|
118 digdog とは Kubernetes を利用したコンテナ貸出サービスである。
|
|
119 学生は Dockerfile を GitLab CI/CD を利用して GitLab Registry に Docker イメージを登録する。
|
5
|
120 学科アカウントを使用して Web サービスへログインし, 登録した Docker イメージでコンテナを作成することができる。
|
|
121 コンテナ作成時は digdog が Kubernetes に Deployment を設定する。Deployment は学生のアカウント名で作成された Namespace に設定される。
|
|
122 Namespace は RBAC を用いたリソース操作のアクセス制御が設定されている。そのため学生は Kubernetes コマンドである kubectl コマンドで 手元の PC から Pod の操作を行うことができる。
|
0
|
123 RBAC で許可されているリソース操作は表\ref{tb:digdog}である。
|
|
124
|
|
125 \begin{table}[htb]
|
|
126 \begin{center}
|
|
127 \caption{kubectl のコマンド}
|
|
128 \begin{tabular}{c|l} \hline
|
|
129 get & Pod の一覧を表示する \\ \hline
|
|
130 log & Pod の Log を表示する \\ \hline
|
|
131 exec & Pod にアクセスする \\ \hline
|
|
132 \end{tabular}
|
|
133 \label{tb:digdog}
|
|
134 \end{center}
|
|
135 \end{table}
|
|
136
|
5
|
137
|
|
138 \section{サービスの設計}
|
|
139 学生が学習環境を利用する流れを図\ref{fig:wm} に示し, 概要を以下で説明する。
|
|
140
|
|
141 \subsection{利用技術}
|
|
142 サービスではコンテナ貸出を行う。
|
|
143 そこで, コンテナ管理ソフトウェアである Docker, コンテナオーケストレーションソフトである Kubernetes, マルチユーザ環境に適した Linux コンテナである Singularity を利用する。\par
|
|
144 サービスは Docker や Kubernetes のみで提供することもできる。だが, コンテナ内のデータの永続化が問題となる。そのため Singularity を利用する。
|
|
145 Singularity では デフォルトで \$HOME, /tmp, /proc, /sys, /dev がコンテナにマウントされる。そのため, コンテナのデータの永続化や大量のデータを扱う場合に適している。
|
|
146
|
|
147 \subsection{コンテナの作成}
|
|
148 学生は学科アカウントで Web コンソールへログインする。Web コンソールでは 学生のコンテナ一覧や Docker イメージ一覧を確認することができる。
|
|
149 コンテナ作成を選択するとコンテナを作成するために必要な情報を入力する。入力する内容は表\ref{tb:wmcon} である。コンテナ名には学生のアカウント名が補完されるため, 他の学生と被ることはない。
|
|
150 Docker イメージは Docker Hub に登録されているイメージや, 作成したイメージを入力することができる。環境変数とゲストポートはスペース区切りで複数入力することができる。
|
|
151 ホストポートは, エフェメラルポート の範囲から設定される。学生は設定されたホストポートを使用してコンテナのサービスへアクセスする。
|
|
152 また, 学生はコンテナに対して Web コンソールから, または手元の PC から操作することができる。
|
|
153 必要なくなったコンテナは Web コンソールのコンテナ一覧から削除することができる。
|
|
154
|
|
155 \begin{table}[htb]
|
|
156 \begin{center}
|
|
157 \caption{コンテナ作成時の入力内容}
|
|
158 \begin{tabular}{c|l} \hline
|
|
159 ContainerName & コンテナ名 \\ \hline
|
|
160 Image & Docker イメージ \\ \hline
|
|
161 Environments & コンテナ作成時の環境変数 \\ \hline
|
|
162 GuestPort & コンテナが使用するポート番号 \\ \hline
|
|
163 \end{tabular}
|
|
164 \label{tb:wmcon}
|
|
165 \end{center}
|
|
166 \end{table}
|
|
167
|
|
168 \subsection{イメージの作成}
|
|
169 Docker イメージの作成は学科で利用している GitLab の CI/CD 機能を使用する。
|
|
170 学生は学科 GitLab から CI/CD トークンを取得し, Web コンソールで取得したトークンをセットする。この時 Docker 側に GitLab Runner の立ち上げを依頼する。
|
|
171 トークンの設定後, Web コンソールから CI/CD 用の Yaml ファイルをダウンロードし Dockerfile と一緒に学科 GitLab のリポジトリに Push する。
|
|
172 Docker イメージの Build が成功すると Web コンソールのイメージ一覧で確認ができる。作成した Docker イメージは編集からイメージの使い方を記述でき, 他の学生に共有するか設定を行える。
|
|
173 必要なくなったイメージは Web コンソールのイメージ一覧から削除することができる。
|
|
174
|
|
175 \subsection{Singularity の利用}
|
|
176 Singularity は Docker イメージをSingularity 用に Build することで, Docker イメージを使用することができる。
|
|
177 だが, イメージの Build には sudo 権限が必要となる。Docker イメージの Build を申請性にすると, 管理者の仕事が増え, 学生も利用しづらい。
|
|
178 また, Singularity はユーザ権限で動作するため, 学生が ssh でブレードサーバへ接続し利用する方が適している。
|
|
179 そこで, Web コンソールから Singularity 用のイメージをダウンロードできる仕様とする。\par
|
|
180 学生は利用したいイメージをダウンロードし, ブレードサーバへ送信して Singularity を使用することができる。
|
0
|
181
|
|
182 \begin{figure}[tb]
|
|
183 \begin{center}
|
|
184 \includegraphics[width=80mm]{Images/whalemountain.pdf}
|
|
185 \end{center}
|
|
186 \caption{システム構成}
|
|
187 \label{fig:wm}
|
|
188 \end{figure}
|
|
189
|
5
|
190 \section{サービスの実装}
|
|
191 本コースでは ブレードサーバが 4 台導入され, 1 台に 1 つ GPU が搭載されている。コンテナ貸出サービスの機能を 1 つにまとめると Docker の操作が 1台のブレードサーバのみになる。
|
|
192 そこで, 機能ごとに以下の 3 つにサービスに分ける。また, Docker や Kubernetes の操作を HTTP API で提供することで, リクエスト先の変更で複数のブレードサーバにコンテナを分散することができる。\par
|
|
193 実装にはDocker や Kubernetes の実装言語であり, 操作するためのライブラリが揃っている Go 言語を使用する。
|
|
194 \begin{itemize}
|
|
195 \item Web コンソールの表示
|
|
196 \item Docker の操作
|
|
197 \item Kubernetes の操作
|
|
198 \end{itemize}
|
|
199
|
|
200 \subsection{Web コンソールの表示}
|
|
201 実装には Go 言語の Web フレームワークの 1 つである Gin を使用した。
|
0
|
202
|
5
|
203 \subsection{Docker の操作}
|
|
204 実装には Web コンソールと同じ Gin を使用し, Docker の操作を行うための SDK である Docker client \cite{dockercli} を使用する。
|
|
205 Docker は sock に対して curl コマンドで操作できる HTTP API を提供している。sock だと複数のサーバに対応できないため, Go で HTTP API を実装する。\par
|
|
206 サービスを提供する上で Docker の必要となる操作は以下である。
|
|
207 \begin{itemize}
|
|
208 \item コンテナの作成
|
|
209 \item コンテナの削除
|
|
210 \item コンテナでコマンド実行
|
|
211 \item コンテナへファイル送信
|
|
212 \item イメージの削除
|
|
213 \item GitLab Runner の作成
|
|
214 \end{itemize}
|
0
|
215
|
5
|
216 コンテナを作成するにあたって必要となるリクエスト情報は以下である。
|
|
217 \begin{itemize}
|
|
218 \item コンテナ名
|
|
219 \item コンテナ
|
|
220 \item イメージの削除
|
|
221 \item GitLab Runner の作成
|
|
222 \end{itemize}
|
|
223
|
|
224 \subsection{Kubernetes の操作}
|
|
225 実装には Web コンソールと同じ Gin を使用し, Kubernetes の操作を行うためのライブラリである client-go \cite{kubecli} を使用する。
|
|
226
|
|
227 \section{サービスの評価}
|
|
228
|
|
229 \section{類似サービスとの評価}
|
0
|
230
|
|
231 %\begin{lstlisting}[frame=lrbt,label=src:example,caption={コード書き方例}]
|
|
232 %package main
|
|
233 %import "fmt"
|
|
234
|
|
235 %func main() {
|
|
236 % fmt.Println("Hello, World!!")
|
|
237 %}
|
|
238 %\end{lstlisting}
|
|
239
|
|
240 \section{今後の課題}
|
|
241
|
|
242 \section{まとめ}
|
|
243
|
|
244 \nocite{*}
|
|
245 \bibliographystyle{ipsjunsrt}
|
|
246 \bibliography{mk-wm}
|
|
247
|
5
|
248 \end{document} |