comparison mid_thesis.tex @ 7:bc9290d12651 default tip

del par
author Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
date Tue, 15 Sep 2020 12:59:54 +0900
parents 5f52fac4bacf
children
comparison
equal deleted inserted replaced
6:5f52fac4bacf 7:bc9290d12651
41 \begin{multicols*}{2} 41 \begin{multicols*}{2}
42 \section{コンテナ技術を用いた学習環境の提供} 42 \section{コンテナ技術を用いた学習環境の提供}
43 情報通信技術の普及に伴い学生が学ぶ学習環境が必要となる。その学習環境として VM や コンテナにより,手軽に開発し試せる技術が普及している。 43 情報通信技術の普及に伴い学生が学ぶ学習環境が必要となる。その学習環境として VM や コンテナにより,手軽に開発し試せる技術が普及している。
44 だが,手元の PC 上で VM や コンテナを立ち上げ,開発を行うことはできるが,VM や コンテナの使用には高性能 PC や 有料のクラウドサービスが必要になる場合がある。 44 だが,手元の PC 上で VM や コンテナを立ち上げ,開発を行うことはできるが,VM や コンテナの使用には高性能 PC や 有料のクラウドサービスが必要になる場合がある。
45 この大きな負担を学生に負わせない仕組みが必要である。 45 この大きな負担を学生に負わせない仕組みが必要である。
46 \par 46
47 本コースでは希望する学生に学科のブレードサーバから仮想環境を貸出すサービスを行なっている。 47 本コースでは希望する学生に学科のブレードサーバから仮想環境を貸出すサービスを行なっている。
48 貸出 VM スペックは CPU 1コア,メモリ 1GB,ストレージ 10GB である。 48 貸出 VM スペックは CPU 1コア,メモリ 1GB,ストレージ 10GB である。
49 このスペックで不足する場合,要望に応じてスペックの変更を行なっている。 49 このスペックで不足する場合,要望に応じてスペックの変更を行なっている。
50 だが,貸出 VM でも課題によっては処理に時間がかかることがある。 50 だが,貸出 VM でも課題によっては処理に時間がかかることがある。
51 例として,人工知能の講義において課される課題においては CPU より GPU が必要となる場合がある。 51 例として,人工知能の講義において課される課題においては CPU より GPU が必要となる場合がある。
57 57
58 \section{技術概要} 58 \section{技術概要}
59 本研究で使用したコンテナ仮想化技術,また本コースで利用しているサービスについての概要を説明する。 59 本研究で使用したコンテナ仮想化技術,また本コースで利用しているサービスについての概要を説明する。
60 60
61 \subsection{Docker} 61 \subsection{Docker}
62 Docker とは OS レベルの仮想化技術を利用して,ソフトウェアをコンテナと呼ばれるパッケージで提供する。またコンテナの実行だけでなく, 62 Docker\cite{docker} とは OS レベルの仮想化技術を利用して,ソフトウェアをコンテナと呼ばれるパッケージで提供する。またコンテナの実行だけでなく,
63 コンテナの実行に用いるイメージの作成,イメージを共有する仕組みを持つコンテナ管理ソフトウェアである。 63 コンテナの実行に用いるイメージの作成,イメージを共有する仕組みを持つコンテナ管理ソフトウェアである。
64 コンテナの実行には Docker 社が提供している Docker Hub\cite{dockerhub} に登録されているイメージ,Dockerfile を用いて作成したイメージを利用することができる。 64 コンテナの実行には Docker 社が提供している Docker Hub\cite{dockerhub} に登録されているイメージ,Dockerfile を用いて作成したイメージを利用することができる。
65 Dockerfile を用いることで,必要なソフトウェアや各種設定を含んだイメージを作成できる。 65 Dockerfile を用いることで,必要なソフトウェアや各種設定を含んだイメージを作成できる。
66 66
67 \subsection{Kubernetes} 67 \subsection{Kubernetes}
68 Kubernetes\cite{k8s} とは,アプリケーションのデプロイ,スケーリング,及び管理を用意にするためのコンテナを動的管理するコンテナオーケストレーションである。 68 Kubernetes\cite{k8s} とは,アプリケーションのデプロイ,スケーリング,及び管理を用意にするためのコンテナを動的管理するコンテナオーケストレーションである。
69 Kubernetes ではオブジェクトによりクラスターの状態を表現する。オブジェクトはコンテナだけでなく,ネットワークやストレージ,接続ポリシーの望ましい状態を記述できる。 69 Kubernetes ではオブジェクトによりクラスターの状態を表現する。オブジェクトはコンテナだけでなく,ネットワークやストレージ,接続ポリシーの望ましい状態を記述できる。
70 70
71 \subsection{Singularity} 71 \subsection{Singularity}
72 Singularity とは,HPC クラスタ上で複雑なアプリケーションを実行するために開発されたコンテナプラットフォームである。 72 Singularity\cite{singu} とは,HPC クラスタ上で複雑なアプリケーションを実行するために開発されたコンテナプラットフォームである。
73 Singularity は マルチユーザに対応しており,コンテナ内での権限は実行ユーザの権限を引き継ぐため,ユーザに特別な権限の設定が必要ない。 73 Singularity は マルチユーザに対応しており,コンテナ内での権限は実行ユーザの権限を引き継ぐため,ユーザに特別な権限の設定が必要ない。
74 またデフォルトで,\$HOME,/tmp,/proc,/sys,/dev がコンテナにマウントされ,サーバ上の GPU を簡単に利用できる。 74 またデフォルトで,\$HOME,/tmp,/proc,/sys,/dev がコンテナにマウントされ,サーバ上の GPU を簡単に利用できる。
75 Singularity のコンテナイメージは Docker Hub に登録されているイメージ,またはDockerfile から作成したイメージを変換することで利用することができる。 75 Singularity のコンテナイメージは Docker Hub に登録されているイメージ,またはDockerfile から作成したイメージを変換することで利用することができる。
76 76
77 \subsection{GitLab} 77 \subsection{GitLab}
78 GitLab\cite{gitlab} とは バージョン管理システムである Git のリポジトリマネージャである。 78 GitLab\cite{gitlab} とは バージョン管理システムである Git のリポジトリマネージャである。
79 GitLab は GitHub と違い,オンプレミス環境に構築することができるため,本コースでは GitLab を使用している。 79 GitLab は GitHub と違い,オンプレミス環境に構築することができるため,本コースでは GitLab を使用している。
80 本研究では GitLab の統合機能の GitLab CI/CD\cite{gitlabcicd},また GitLab CI/CD と組み合わせて使用する GitLab Runner\cite{gitlabrunner} を利用する。\par 80 本研究では GitLab の統合機能の GitLab CI/CD\cite{gitlabcicd},また GitLab CI/CD と組み合わせて使用する GitLab Runner\cite{gitlabrunner} を利用する。
81
81 GitLab CI/CD は 継続的インテグレーション(CI)・継続的デリバリー(CD)を GitLab から利用することができる。 82 GitLab CI/CD は 継続的インテグレーション(CI)・継続的デリバリー(CD)を GitLab から利用することができる。
82 CI では GitLab のコードを定期的または自動的にビルド・テストを行う。CD は CI を拡張した機能であり,ビルドやテストだけでなくリリースの準備も行う。 83 CI では GitLab のコードを定期的または自動的にビルド・テストを行う。CD は CI を拡張した機能であり,ビルドやテストだけでなくリリースの準備も行う。
83 \par 84
84 GitLab Runner とは,ビルドのためのアプリケーションであり,GitLab CI と連携することで別の場所でビルドを動かすことができる。 85 GitLab Runner とは,ビルドのためのアプリケーションであり,GitLab CI と連携することで別の場所でビルドを動かすことができる。
85 86
86 \subsection{digdog} 87 \subsection{digdog}
87 digdog\cite{digdog} とは Kubernetes を利用し Web コンソールからコンテナを作成することができるコンテナ貸出サービスである。 88 digdog\cite{digdog} とは Kubernetes を利用し Web コンソールからコンテナを作成することができるコンテナ貸出サービスである。
88 学生は学科アカウントを使用して Web サービスへログインし,登録されている Docker イメージでコンテナを作成することができる。 89 学生は学科アカウントを使用して Web サービスへログインし,登録されている Docker イメージでコンテナを作成することができる。
93 GPU を含む学習環境を提供するために,複数のコンテナへ GPU を共有できる仕組み,またコンテナへのファイルの共有ができる仕組みが必要となる。 94 GPU を含む学習環境を提供するために,複数のコンテナへ GPU を共有できる仕組み,またコンテナへのファイルの共有ができる仕組みが必要となる。
94 95
95 \subsection{マルチユーザへの対応} 96 \subsection{マルチユーザへの対応}
96 Docker は基本的に root 権限で動作する。また一般ユーザが docker コマンドを使用するには docker グループに追加する必要がある。 97 Docker は基本的に root 権限で動作する。また一般ユーザが docker コマンドを使用するには docker グループに追加する必要がある。
97 そのため docker グループに追加されたユーザは,他ユーザのコンテナを操作できるなどセキュリティ上の問題がある。 98 そのため docker グループに追加されたユーザは,他ユーザのコンテナを操作できるなどセキュリティ上の問題がある。
98 \par 99
99 そこで,Web コンソールを用いて管理を行う。 Web コンソールには学科のアカウントを用いてログインし,コンテナの作成や操作を可能とする。 100 そこで,Web コンソールを用いて管理を行う。 Web コンソールには学科のアカウントを用いてログインし,コンテナの作成や操作を可能とする。
100 コンテナ作成は Docker コンテナと Kubernetes コンテナの 2つから選択することができる。 101 コンテナ作成は Docker コンテナと Kubernetes コンテナの 2つから選択することができる。
101 コンテナ作成を選択するとコンテナを作成するために必要な情報を入力する。入力する内容は表\ref{tb:wmcon} である。 102 コンテナ作成を選択するとコンテナを作成するために必要な情報を入力する。入力する内容は表\ref{tb:wmcon} である。
102 作成時にコンテナ名をユーザのアカウント名で補完されるため,他のユーザと被ることはない。 103 作成時にコンテナ名をユーザのアカウント名で補完されるため,他のユーザと被ることはない。
103 104
104 \begin{table}[H] 105 \begin{table}[H]
105 \begin{center} 106 \begin{center}
106 \caption{コンテナ作成時の入力内容} 107 \caption{コンテナ作成時の入力内容}
107 \begin{tabular}{c|l} \hline 108 \begin{tabular}{|c|l|} \hline
108 ContainerName & コンテナ名 \\ \hline 109 ContainerName & コンテナ名 \\ \hline
109 Image & Docker イメージ \\ \hline 110 Image & Docker イメージ \\ \hline
110 Environments & コンテナ作成時の環境変数 \\ \hline 111 Environments & コンテナ作成時の環境変数 \\ \hline
111 GuestPort & コンテナが使用するポート番号 \\ \hline 112 GuestPort & コンテナが使用するポート番号 \\ \hline
112 GPU & GPU を使用するか \\ \hline 113 GPU & GPU を使用するか \\ \hline
141 \subsection{ファイルの共有} 142 \subsection{ファイルの共有}
142 コンテナに大量のデータを送信する必要がある場合や,データを永続化させたい場合に Singularity を利用する。 143 コンテナに大量のデータを送信する必要がある場合や,データを永続化させたい場合に Singularity を利用する。
143 Singularity はユーザ権限で動作することから,学生が ssh でブレードサーバへ接続し利用する方が適している。 144 Singularity はユーザ権限で動作することから,学生が ssh でブレードサーバへ接続し利用する方が適している。
144 Singularity は Docker イメージを変換し使用できる。 145 Singularity は Docker イメージを変換し使用できる。
145 だが,イメージの変換には sudo 権限が必要となる。 146 だが,イメージの変換には sudo 権限が必要となる。
146 %Docker イメージの変換を申請性にすると,管理者の仕事が増え,またユーザも利用しづらい。 147 そこで,Web コンソールから Singularity 用のイメージをダウンロードできる仕様とする。
147 そこで,Web コンソールから Singularity 用のイメージをダウンロードできる仕様とする。\par 148
148 ユーザは利用したいイメージをダウンロードし,ブレードサーバへ送信して Singularity を使用する。Singularity を利用する流れを図\ref{fig:singu} に示す。 149 ユーザは利用したいイメージをダウンロードし,ブレードサーバへ送信して Singularity を使用する。Singularity を利用する流れを図\ref{fig:singu} に示す。
149 150
150 \begin{figure}[H] 151 \begin{figure}[H]
151 \begin{center} 152 \begin{center}
152 \includegraphics[width=80mm]{Images/singularity.pdf} 153 \includegraphics[width=80mm]{Images/singularity.pdf}
158 \section{サービスの実装} 159 \section{サービスの実装}
159 160
160 サービスのシステム構成を図\ref{fig:wm} に示す。 161 サービスのシステム構成を図\ref{fig:wm} に示す。
161 Web コンソールで Docker や Kubernetes の操作をまとめるのではなく,機能ごとに以下の 3 つにサービスを分ける。 162 Web コンソールで Docker や Kubernetes の操作をまとめるのではなく,機能ごとに以下の 3 つにサービスを分ける。
162 Web コンソールから HTTP API で各機能へリクエストを送信し操作を行う。 163 Web コンソールから HTTP API で各機能へリクエストを送信し操作を行う。
163 \par 164
164 実装にはDocker や Kubernetes の実装言語であり,操作するためのライブラリが揃っている Go 言語を使用する。 165 実装にはDocker や Kubernetes の実装言語であり,操作するためのライブラリが揃っている Go 言語を使用する。
165 \begin{itemize} 166 \begin{itemize}
166 \setlength{\parskip}{0cm} % 段落間 167 \setlength{\parskip}{0cm} % 段落間
167 \setlength{\itemsep}{0cm} % 項目間 168 \setlength{\itemsep}{0cm} % 項目間
168 \item Web コンソール 169 \item Web コンソール
177 \caption{システム構成} 178 \caption{システム構成}
178 \label{fig:wm} 179 \label{fig:wm}
179 \end{figure*} 180 \end{figure*}
180 181
181 \subsection{Web コンソール} 182 \subsection{Web コンソール}
182 Web コンソールは本コースの学生や教員が利用するため,学科アカウントでログインできる必要がある。学科の LDAP サーバを利用して学科アカウントで LDAP 認証を実装する。\par 183 Web コンソールは本コースの学生や教員が利用するため,学科アカウントでログインできる必要がある。学科の LDAP サーバを利用して学科アカウントで LDAP 認証を実装する。
184
183 Docker の操作や Kubernetes の操作を行う機能では,ユーザの管理を行わないため Web コンソールで管理する必要がある。 185 Docker の操作や Kubernetes の操作を行う機能では,ユーザの管理を行わないため Web コンソールで管理する必要がある。
184 そのため,ユーザのコンテナやイメージの情報をデータベースに格納して管理する。 186 そのため,ユーザのコンテナやイメージの情報をデータベースに格納して管理する。
185 ユーザがコンテナやイメージの操作を行う時は,紐づけられたアカウントID の確認を行うことで,他のユーザのコンテナやイメージの操作を制限する。 187 ユーザがコンテナやイメージの操作を行う時は,紐づけられたアカウントID の確認を行うことで,他のユーザのコンテナやイメージの操作を制限する。
186 188
187 \subsection{Docker の操作} 189 \subsection{Docker の操作}
188 Docker は Docker Engine API を提供している。Docker デーモンは指定した IP アドレスと ポート を リッスンする。 IP アドレスと ポートの指定を行うことで外部から Docker の操作が可能になる。 190 Docker は Docker Engine API を提供している。Docker デーモンは指定した IP アドレスと ポート を リッスンする。 IP アドレスと ポートの指定を行うことで外部から Docker の操作が可能になる。
189 だが,Dockr デーモンが稼働しているホスト上の root アクセスを得られるため,推奨されてない。 191 だが,Dockr デーモンが稼働しているホスト上の root アクセスを得られるため,推奨されてない。
190 また,本研究で実装するサービスでは Docker のすべての操作を必要としない。そこで,Docker の操作を行うための SDK \cite{sdk} を使用し,必要な機能のみを実装する。\par 192 また,本研究で実装するサービスでは Docker のすべての操作を必要としない。そこで,Docker の操作を行うための SDK \cite{sdk} を使用し,必要な機能のみを実装する。
193
191 サービスを提供する上で Docker の必要となる操作は以下である。 194 サービスを提供する上で Docker の必要となる操作は以下である。
192 \begin{itemize} 195 \begin{itemize}
193 \setlength{\parskip}{0cm} % 段落間 196 \setlength{\parskip}{0cm} % 段落間
194 \setlength{\itemsep}{0cm} % 項目間 197 \setlength{\itemsep}{0cm} % 項目間
195 \item コンテナの作成 198 \item コンテナの作成
222 そのため,RBAC への認証トークンを取得する。RBAC で許可するリソースの操作は表\ref{tb:wm} である。 225 そのため,RBAC への認証トークンを取得する。RBAC で許可するリソースの操作は表\ref{tb:wm} である。
223 226
224 \begin{table}[H] 227 \begin{table}[H]
225 \begin{center} 228 \begin{center}
226 \caption{kubectl のコマンド} 229 \caption{kubectl のコマンド}
227 \begin{tabular}{c|l} \hline 230 \begin{tabular}{|c|l|} \hline
228 get & Pod,Deployment,Service,Ingress の一覧を表示する \\ \hline 231 get & Pod, Deployment, Service, Ingress の一覧を表示する \\ \hline
229 log & Pod の Log を表示する \\ \hline 232 log & Pod の Log を表示する \\ \hline
230 exec & Pod にアクセスする \\ \hline 233 exec & Pod にアクセスする \\ \hline
231 cp & Pod にファイルを送信する \\ \hline 234 cp & Pod にファイルを送信する \\ \hline
232 \end{tabular} 235 \end{tabular}
233 \label{tb:wm} 236 \label{tb:wm}
234 \end{center} 237 \end{center}
235 \end{table} 238 \end{table}
236 239
237 \section{今後の課題} 240 \section{今後の課題}
238 本研究で実装したサービスでは学生が学習環境として利用するには,まだ必要な実装が不足している。\par 241 本研究で実装したサービスでは学生が学習環境として利用するには,まだ必要な実装が不足している。
242
239 本サービスでは,大量のデータを用いる時に Singularity を使用できる環境を用意している。 243 本サービスでは,大量のデータを用いる時に Singularity を使用できる環境を用意している。
240 だが,Web コンソールから作成した Docker や Kubernetes のコンテナではデータの永続化に対応していないため,コンテナの削除で削除されてしまう。 244 だが,Web コンソールから作成した Docker や Kubernetes のコンテナではデータの永続化に対応していないため,コンテナの削除で削除されてしまう。
241 そこで,学科のサーバでは学生ごとのディレクトリにマウントするなどの対策を行う必要がある。 245 そこで,学科のサーバでは学生ごとのディレクトリにマウントするなどの対策を行う必要がある。
242 \par 246
243 本サービスでは,学生が自由に Docker イメージを作成できる。また,Docker イメージを Singularity 用のイメージに変換する。 247 本サービスでは,学生が自由に Docker イメージを作成できる。また,Docker イメージを Singularity 用のイメージに変換する。
244 そのため,イメージの容量でブレードサーバのストレージを圧迫してしまう可能性があることから,あまり利用されていないイメージは定期的に削除する必要がある。 248 そのため,イメージの容量でブレードサーバのストレージを圧迫してしまう可能性があることから,あまり利用されていないイメージは定期的に削除する必要がある。
245 \par 249
246 次にネットワークの設定である。 250 次にネットワークの設定である。
247 作成したコンテナへのアクセスには,コンテナが動作しているサーバの IP アドレス,設定されたポート番号を使用する。 251 作成したコンテナへのアクセスには,コンテナが動作しているサーバの IP アドレス,設定されたポート番号を使用する。
248 そのため,外部からアクセスなどに対応することができない。そこで,コンテナごとに IP アドレスを設定するなどの対策が必要である。 252 そのため,外部からアクセスなどに対応することができない。そこで,コンテナごとに IP アドレスを設定するなどの対策が必要である。
249 \par 253
250 また,本サービスではユーザごとにリソースの制限を行っていないため,過剰なリソースの占有を防ぐための対策をする必要がある。 254 また,本サービスではユーザごとにリソースの制限を行っていないため,過剰なリソースの占有を防ぐための対策をする必要がある。
251 GPU などの負荷がかかるプログラムの実行で使用されるリソースにはジョブ管理ソフトウェアなどで対策をとる。\ 255 GPU などの負荷がかかるプログラムの実行で使用されるリソースにはジョブ管理ソフトウェアなどで対策をとる。\
252 256
253 \begin{thebibliography}{99} 257 \begin{thebibliography}{99}
254 258
255 \bibitem{singu} Singularity. https://sylabs.io/singularity/, 2020/9/11.
256 \bibitem{docker} Docker, https://www.docker.com/. 2020/9/11. 259 \bibitem{docker} Docker, https://www.docker.com/. 2020/9/11.
257 \bibitem{dockerhub} Docker Hub, https://hub.docker.com/, 2020/9/11. 260 \bibitem{dockerhub} Docker Hub, https://hub.docker.com/, 2020/9/11.
258 \bibitem{k8s} Kubernetes, https://kubernetes.io/, 2020/9/11. 261 \bibitem{k8s} Kubernetes, https://kubernetes.io/, 2020/9/11.
262 \bibitem{singu} Singularity. https://sylabs.io/singularity/, 2020/9/11.
263 \bibitem{gitlab} GitLab, https://about.gitlab.com/, 2020/9/11.
264 \bibitem{gitlabcicd} GitLab CI/CD, https://docs.gitlab.com/ce/ci/, 2020/9/11.
265 \bibitem{gitlabrunner} GitLab Runner Docs, https://docs.gitlab.com/runner/, 2020/9/11.
266 \bibitem{digdog} 秋田 海人 and 高瀬 大空 and 上地 悠斗 and 長田 智和 and 谷口 祐治, 情報系学科における教育研究情報システムの運用管理並びに新規システムの構築に関する取り組み, インターネットと運用技術シンポジウム(2019).
267 \bibitem{nvidia-docker} NVIDIA Container Toolkit, https://github.com/NVIDIA/nvidia-docker, 2020/9/11.
259 \bibitem{sdk} Docker Engine API, https://docs.docker.com/engine/api/, 2020/9/11. 268 \bibitem{sdk} Docker Engine API, https://docs.docker.com/engine/api/, 2020/9/11.
260 \bibitem{kubecli} Go clients for talking to a kubernetes cluster, https://github.com/kubernetes/client-go, 2020/9/11. 269 \bibitem{kubecli} Go clients for talking to a kubernetes cluster, https://github.com/kubernetes/client-go, 2020/9/11.
261 \bibitem{gitlab} GitLab, https://about.gitlab.com/, 2020/9/11. 270
262 \bibitem{gitlabrunner} GitLab Runner Docs, https://docs.gitlab.com/runner/, 2020/9/11. 271 %\bibitem{kvm} KVM, https://www.linux-kvm.org/, 2020/9/11.
263 \bibitem{kvm} KVM, https://www.linux-kvm.org/, 2020/9/11.
264 \bibitem{gitlabcicd} GitLab CI/CD, https://docs.gitlab.com/ce/ci/, 2020/9/11.
265 \bibitem{nvidia-docker} NVIDIA Container Toolkit, https://github.com/NVIDIA/nvidia-docker, 2020/9/11.
266 \bibitem{digdog} 秋田 海人 and 高瀬 大空 and 上地 悠斗 and 長田 智和 and 谷口 祐治, 情報系学科における教育研究情報システムの運用管理並びに新規システムの構築に関する取り組み, インターネットと運用技術シンポジウム(2019).
267 %\bibitem{ie-virsh} 平良 太貴 and 河野 真治, OS 授業向けマルチユーザ VM 環境の構築, 研究報告システムソフトウェアとオペレーティング・システム(OS)(2014). 272 %\bibitem{ie-virsh} 平良 太貴 and 河野 真治, OS 授業向けマルチユーザ VM 環境の構築, 研究報告システムソフトウェアとオペレーティング・システム(OS)(2014).
268 273
269 \end{thebibliography} 274 \end{thebibliography}
270 \end{multicols*} 275 \end{multicols*}
271 276