Mercurial > hg > Papers > 2020 > mk-sigiot
annotate paper/mk-wm.tex @ 10:e4de1a56f77f
add ie-virsh, update figs
author | Ken Miyahira <e175733@ie.u-ryukyu.ac.jp> |
---|---|
date | Wed, 05 Aug 2020 18:39:09 +0900 |
parents | bf3c55a19edb |
children | 5ae4054bcc94 |
rev | line source |
---|---|
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{本コースの類似サービス} |
10
e4de1a56f77f
add ie-virsh, update figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
94 本サービスに類似したサービスとして, libvirt の CLI である virsh をラップしマルチユーザ VM 環境を提供する ie-virsh。 |
e4de1a56f77f
add ie-virsh, update figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
95 また, Docker をラップし複数のユーザで利用することを目的とした ie-docker \cite{ie-docker}, Kubernetes を利用した教育用コンテナ貸出を目的とした, digdog \cite{digdog} がある。 |
e4de1a56f77f
add ie-virsh, update figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
96 |
e4de1a56f77f
add ie-virsh, update figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
97 \subsection{ie-virsh} |
e4de1a56f77f
add ie-virsh, update figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
98 ie-virsh とは, 本コースの Operating System という講義に向けに libvirt の CLI である virsh をラップし複数のユーザで利用することができる VM 管理ツールである。 |
e4de1a56f77f
add ie-virsh, update figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
99 ie-virsh は 本コースの講義に向け作成されたが, 学生の演習でも利用ができる。 |
e4de1a56f77f
add ie-virsh, update figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
100 課題では VM の環境を学生が設定し, 情報工学科の持つブレードサーバ上にアップロードし, プログラムの実装や測定を行う。\cite{ie-virsh} |
e4de1a56f77f
add ie-virsh, update figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
101 学生は手元の PC で作成した VM をブレードサーバ上にデプロイすることで, 演習環境を構築することができる。 |
e4de1a56f77f
add ie-virsh, update figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
102 ie-virsh は ユーザの UID 及び GID 情報を取得することで, 他のユーザの VM を操作させない。表\ref{tb:ie-virsh}は ユーザが利用できる ie-virsh の機能である。 |
e4de1a56f77f
add ie-virsh, update figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
103 |
e4de1a56f77f
add ie-virsh, update figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
104 \begin{table}[htb] |
e4de1a56f77f
add ie-virsh, update figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
105 \begin{center} |
e4de1a56f77f
add ie-virsh, update figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
106 \caption{ie-virsh のコマンド} |
e4de1a56f77f
add ie-virsh, update figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
107 \begin{tabular}{c|l} \hline |
e4de1a56f77f
add ie-virsh, update figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
108 define & XML の template を下に domain を作成 \\ \hline |
e4de1a56f77f
add ie-virsh, update figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
109 undefine & define で作成した domain を削除 \\ \hline |
e4de1a56f77f
add ie-virsh, update figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
110 list & define で作成した domain の一覧表示 \\ \hline |
e4de1a56f77f
add ie-virsh, update figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
111 start & 指定した domain 名の VM を起動 \\ \hline |
e4de1a56f77f
add ie-virsh, update figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
112 destroy & 指定した domain 名の VM を停止 \\ \hline |
e4de1a56f77f
add ie-virsh, update figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
113 dumpxml & domain の XML を参照 \\ \hline |
e4de1a56f77f
add ie-virsh, update figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
114 \end{tabular} |
e4de1a56f77f
add ie-virsh, update figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
115 \label{tb:ie-virsh} |
e4de1a56f77f
add ie-virsh, update figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
116 \end{center} |
e4de1a56f77f
add ie-virsh, update figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
117 \end{table} |
e4de1a56f77f
add ie-virsh, update figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
118 |
0 | 119 \subsection{ie-docker} |
120 ie-docker とは Docker をラップし複数のユーザで利用することのできるコンテナ管理ツールである。 | |
121 利用する学生は ssh でブレードサーバへ接続し, ie-docker を使用してコンテナを操作することができる。 | |
10
e4de1a56f77f
add ie-virsh, update figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
122 ie-docker は UID 及び GID 情報を取得することで, 他のユーザのコンテナを操作させない。 |
5 | 123 またユーザが使える docker の機能を制限する。表\ref{tb:ie-docker}が ie-docker で利用できる機能である。 |
0 | 124 |
125 \begin{table}[htb] | |
126 \begin{center} | |
127 \caption{ie-docker のコマンド} | |
128 \begin{tabular}{c|l} \hline | |
129 ps & 起動中のコンテナの一覧を表示する \\ \hline | |
130 run & コンテナを作成する \\ \hline | |
131 start & コンテナを起動する \\ \hline | |
132 stop & コンテナを停止する \\ \hline | |
133 attach & 起動しているコンテナに attach する \\ \hline | |
134 cp & コンテナにファイルを送信する \\ \hline | |
135 rm & コンテナを削除する \\ \hline | |
136 \end{tabular} | |
137 \label{tb:ie-docker} | |
138 \end{center} | |
139 \end{table} | |
140 | |
141 \subsection{digdog} | |
142 digdog とは Kubernetes を利用したコンテナ貸出サービスである。 | |
143 学生は Dockerfile を GitLab CI/CD を利用して GitLab Registry に Docker イメージを登録する。 | |
5 | 144 学科アカウントを使用して Web サービスへログインし, 登録した Docker イメージでコンテナを作成することができる。 |
145 コンテナ作成時は digdog が Kubernetes に Deployment を設定する。Deployment は学生のアカウント名で作成された Namespace に設定される。 | |
146 Namespace は RBAC を用いたリソース操作のアクセス制御が設定されている。そのため学生は Kubernetes コマンドである kubectl コマンドで 手元の PC から Pod の操作を行うことができる。 | |
0 | 147 RBAC で許可されているリソース操作は表\ref{tb:digdog}である。 |
148 | |
149 \begin{table}[htb] | |
150 \begin{center} | |
151 \caption{kubectl のコマンド} | |
152 \begin{tabular}{c|l} \hline | |
153 get & Pod の一覧を表示する \\ \hline | |
154 log & Pod の Log を表示する \\ \hline | |
155 exec & Pod にアクセスする \\ \hline | |
156 \end{tabular} | |
157 \label{tb:digdog} | |
158 \end{center} | |
159 \end{table} | |
160 | |
5 | 161 |
162 \section{サービスの設計} | |
163 学生が学習環境を利用する流れを図\ref{fig:wm} に示し, 概要を以下で説明する。 | |
164 | |
165 \subsection{利用技術} | |
166 サービスではコンテナ貸出を行う。 | |
167 そこで, コンテナ管理ソフトウェアである Docker, コンテナオーケストレーションソフトである Kubernetes, マルチユーザ環境に適した Linux コンテナである Singularity を利用する。\par | |
168 サービスは Docker や Kubernetes のみで提供することもできる。だが, コンテナ内のデータの永続化が問題となる。そのため Singularity を利用する。 | |
169 Singularity では デフォルトで \$HOME, /tmp, /proc, /sys, /dev がコンテナにマウントされる。そのため, コンテナのデータの永続化や大量のデータを扱う場合に適している。 | |
170 | |
171 \subsection{コンテナの作成} | |
172 学生は学科アカウントで Web コンソールへログインする。Web コンソールでは 学生のコンテナ一覧や Docker イメージ一覧を確認することができる。 | |
173 コンテナ作成を選択するとコンテナを作成するために必要な情報を入力する。入力する内容は表\ref{tb:wmcon} である。コンテナ名には学生のアカウント名が補完されるため, 他の学生と被ることはない。 | |
174 Docker イメージは Docker Hub に登録されているイメージや, 作成したイメージを入力することができる。環境変数とゲストポートはスペース区切りで複数入力することができる。 | |
175 ホストポートは, エフェメラルポート の範囲から設定される。学生は設定されたホストポートを使用してコンテナのサービスへアクセスする。 | |
176 また, 学生はコンテナに対して Web コンソールから, または手元の PC から操作することができる。 | |
177 必要なくなったコンテナは Web コンソールのコンテナ一覧から削除することができる。 | |
178 | |
179 \begin{table}[htb] | |
180 \begin{center} | |
181 \caption{コンテナ作成時の入力内容} | |
182 \begin{tabular}{c|l} \hline | |
183 ContainerName & コンテナ名 \\ \hline | |
184 Image & Docker イメージ \\ \hline | |
185 Environments & コンテナ作成時の環境変数 \\ \hline | |
186 GuestPort & コンテナが使用するポート番号 \\ \hline | |
187 \end{tabular} | |
188 \label{tb:wmcon} | |
189 \end{center} | |
190 \end{table} | |
191 | |
192 \subsection{イメージの作成} | |
193 Docker イメージの作成は学科で利用している GitLab の CI/CD 機能を使用する。 | |
8 | 194 学生は学科 GitLab から CI/CD トークンを取得し, Web コンソールで取得したトークンをセットする。この時 Docker 側に GitLab Runner \cite{gitlabrunner} の立ち上げを依頼する。 |
5 | 195 トークンの設定後, Web コンソールから CI/CD 用の Yaml ファイルをダウンロードし Dockerfile と一緒に学科 GitLab のリポジトリに Push する。 |
196 Docker イメージの Build が成功すると Web コンソールのイメージ一覧で確認ができる。作成した Docker イメージは編集からイメージの使い方を記述でき, 他の学生に共有するか設定を行える。 | |
197 必要なくなったイメージは Web コンソールのイメージ一覧から削除することができる。 | |
198 | |
199 \subsection{Singularity の利用} | |
200 Singularity は Docker イメージをSingularity 用に Build することで, Docker イメージを使用することができる。 | |
201 だが, イメージの Build には sudo 権限が必要となる。Docker イメージの Build を申請性にすると, 管理者の仕事が増え, 学生も利用しづらい。 | |
202 また, Singularity はユーザ権限で動作するため, 学生が ssh でブレードサーバへ接続し利用する方が適している。 | |
203 そこで, Web コンソールから Singularity 用のイメージをダウンロードできる仕様とする。\par | |
6
db794a6414e4
update tex, add figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
204 学生は利用したいイメージをダウンロードし, ブレードサーバへ送信して Singularity を使用する。Singularity を利用する流れを図\ref{fig:singu} に示す。 |
0 | 205 |
10
e4de1a56f77f
add ie-virsh, update figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
206 \begin{figure*}[tb] |
0 | 207 \begin{center} |
10
e4de1a56f77f
add ie-virsh, update figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
208 \includegraphics[width=100mm]{Images/whalemountain.pdf} |
0 | 209 \end{center} |
210 \caption{システム構成} | |
211 \label{fig:wm} | |
10
e4de1a56f77f
add ie-virsh, update figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
212 \end{figure*} |
0 | 213 |
6
db794a6414e4
update tex, add figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
214 \begin{figure}[tb] |
db794a6414e4
update tex, add figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
215 \begin{center} |
db794a6414e4
update tex, add figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
216 \includegraphics[width=80mm]{Images/singularity.pdf} |
db794a6414e4
update tex, add figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
217 \end{center} |
db794a6414e4
update tex, add figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
218 \caption{Singularityの利用} |
db794a6414e4
update tex, add figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
219 \label{fig:singu} |
db794a6414e4
update tex, add figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
220 \end{figure} |
db794a6414e4
update tex, add figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
221 |
5 | 222 \section{サービスの実装} |
7 | 223 本コースでは学科システムを教員の指導の下, 学生主体でシステム管理チームと呼ばれる組織によって構築・運用・管理が行われている。 |
224 学科システムはブレードサーバを 4 台, SAN 用ストレージと汎用ストレージをそれぞれ 2台ずつ導入している。本コースの基幹サービスはこのブレードサーバの仮想環境上で VM として動作している。 | |
225 新たにサービスを実装するとなると, システム管理チームが運用・管理を行いやすい実装にする必要がある。\par | |
226 Web コンソールや Docker の操作を 1 つにまとめると, Docker コンテナの作成が 1台のブレードサーバのみになってしまう。 | |
227 そこで, コンテナ貸出システムは, 機能ごとに以下の 3 つにサービスに分ける。 | |
228 Docker や Kubernetes の操作を HTTP API で提供することで, 図\ref{fig:api} のようにリクエスト先の変更で複数のブレードサーバにコンテナを分散することができる。 | |
6
db794a6414e4
update tex, add figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
229 だが, 現時点では未実装である。\par |
5 | 230 実装にはDocker や Kubernetes の実装言語であり, 操作するためのライブラリが揃っている Go 言語を使用する。 |
231 \begin{itemize} | |
6
db794a6414e4
update tex, add figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
232 \item Web コンソール |
5 | 233 \item Docker の操作 |
234 \item Kubernetes の操作 | |
235 \end{itemize} | |
236 | |
6
db794a6414e4
update tex, add figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
237 \begin{figure}[tb] |
db794a6414e4
update tex, add figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
238 \begin{center} |
db794a6414e4
update tex, add figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
239 \includegraphics[width=80mm]{Images/apihukusu.pdf} |
db794a6414e4
update tex, add figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
240 \end{center} |
db794a6414e4
update tex, add figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
241 \caption{機能の分散} |
db794a6414e4
update tex, add figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
242 \label{fig:api} |
db794a6414e4
update tex, add figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
243 \end{figure} |
db794a6414e4
update tex, add figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
244 |
db794a6414e4
update tex, add figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
245 \subsection{Web コンソール} |
9 | 246 Web コンソールは本コースの学生や教員が利用するため, 学科アカウントでログインできる必要がある。学科の LDAP サーバを利用して学科アカウントで LDAP 認証を実装する。\par |
6
db794a6414e4
update tex, add figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
247 Docker の操作や Kubernetes の操作を行う HTTP API はセッション管理を行わないため, Web コンソールで管理する必要がある。 |
7 | 248 そのため, ユーザのコンテナやイメージの情報をデータベースに格納して管理する。 |
9 | 249 ユーザが作成する Docker イメージの情報を取得しユーザのアカウントID と紐付けを行う。また, 作成した Docker イメージは共有することができ, 共有されたイメージはユーザのイメージ一覧とは別の一覧で確認することができる。 |
250 ユーザはコンテナ作成時にイメージを入力することができる。この時, 他のユーザの作成したイメージの場合, そのイメージが共有されたイメージなのか確認を行うことで, 非共有に設定されたイメージではコンテナの作成はできない。 | |
251 コンテナの操作を行う時, コンテナに紐づけられたアカウントID との確認が行われることで, 他のユーザのコンテナを操作することはできない。 | |
252 同様にイメージの削除を行う時にもアカウントID の確認が行われる。 | |
0 | 253 |
5 | 254 \subsection{Docker の操作} |
7 | 255 Docker は Docker Engine API を提供している。Docker デーモンは指定した IP アドレスと ポート を リッスンする。 IP アドレスと ポートの指定を行うことで外部から Docker の操作が可能になる。 |
256 だが, Dockr デーモンが稼働しているホスト上の root アクセスを得られるため, 推奨されてない。 | |
257 また, 本論文で実装するサービスでは Docker のすべての操作を必要としない。そこで, Docker の操作を行うための SDK \cite{sdk} を使用し, 必要な機能のみを実装する。\par | |
5 | 258 サービスを提供する上で Docker の必要となる操作は以下である。 |
259 \begin{itemize} | |
260 \item コンテナの作成 | |
261 \item コンテナの削除 | |
6
db794a6414e4
update tex, add figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
262 \item コンテナでのコマンド実行 |
5 | 263 \item コンテナへファイル送信 |
6
db794a6414e4
update tex, add figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
264 \item イメージ一覧の取得 |
5 | 265 \item イメージの削除 |
266 \end{itemize} | |
0 | 267 |
8 | 268 コンテナは, 表\ref{tb:wmcon} で入力した情報を下に作成を行う。コンテナ名は Web コンソールからリクエストを送るタイミングで補完される。 |
9 | 269 また, コンテナが属するネットワーク名も補完される。リクエストは JSON 形式で受け, JSON 形式でレスポンスを返す。 |
270 リクエストからコンテナを作成後, 作成したコンテナID や ネットワークID , コンテナのステータスを返却する。 | |
8 | 271 返却したコンテナID や ネットワークID を下にコンテナ削除やコマンドの実行, ファイルの送信を処理する。 |
9 | 272 だが, ファイルの送信では JSON 形式ではなく multipart/form-data 形式でリクエストを受ける。\par |
8 | 273 Docker イメージは GitLab CI/CD を利用して作成するが, Build が成功したかを判断することはできない。 |
10
e4de1a56f77f
add ie-virsh, update figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
9
diff
changeset
|
274 そのため, Web コンソール側から 5 分に一度イメージの更新リクエストを受け, Docker イメージの一覧をリストにまとめ返却を行う。\par |
8 | 275 ユーザが作成するコンテナとは別に GitLab CI/CD で Docker イメージを Build するための GitLab Runner を立てる必要がある。 |
9 | 276 立ち上げはユーザが Web コンソールで CI/CD トークンの設定時に行われる。GitLab Runner をユーザごとに立ち上げることで, 複数のユーザが同時に Build を行うことができる。 |
5 | 277 |
278 \subsection{Kubernetes の操作} | |
6
db794a6414e4
update tex, add figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
279 実装には Kubernetes の操作を行うためのライブラリである client-go \cite{kubecli} を使用する。 |
db794a6414e4
update tex, add figs
Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
parents:
5
diff
changeset
|
280 |
5 | 281 |
282 \section{サービスの評価} | |
283 | |
284 \section{類似サービスとの評価} | |
0 | 285 |
286 %\begin{lstlisting}[frame=lrbt,label=src:example,caption={コード書き方例}] | |
287 %package main | |
288 %import "fmt" | |
289 | |
290 %func main() { | |
291 % fmt.Println("Hello, World!!") | |
292 %} | |
293 %\end{lstlisting} | |
294 | |
295 \section{今後の課題} | |
296 | |
297 \section{まとめ} | |
298 | |
299 \nocite{*} | |
300 \bibliographystyle{ipsjunsrt} | |
301 \bibliography{mk-wm} | |
302 | |
5 | 303 \end{document} |