# HG changeset patch # User Ken Miyahira # Date 1600142394 -32400 # Node ID bc9290d12651184ccce02226020bced120388adc # Parent 5f52fac4bacf2defe3ec14004499e331f6dc1850 del par diff -r 5f52fac4bacf -r bc9290d12651 mid_thesis.pdf Binary file mid_thesis.pdf has changed diff -r 5f52fac4bacf -r bc9290d12651 mid_thesis.tex --- a/mid_thesis.tex Mon Sep 14 23:51:06 2020 +0900 +++ b/mid_thesis.tex Tue Sep 15 12:59:54 2020 +0900 @@ -43,7 +43,7 @@ 情報通信技術の普及に伴い学生が学ぶ学習環境が必要となる。その学習環境として VM や コンテナにより,手軽に開発し試せる技術が普及している。 だが,手元の PC 上で VM や コンテナを立ち上げ,開発を行うことはできるが,VM や コンテナの使用には高性能 PC や 有料のクラウドサービスが必要になる場合がある。 この大きな負担を学生に負わせない仕組みが必要である。 -\par + 本コースでは希望する学生に学科のブレードサーバから仮想環境を貸出すサービスを行なっている。 貸出 VM スペックは CPU 1コア,メモリ 1GB,ストレージ 10GB である。 このスペックで不足する場合,要望に応じてスペックの変更を行なっている。 @@ -59,7 +59,7 @@ 本研究で使用したコンテナ仮想化技術,また本コースで利用しているサービスについての概要を説明する。 \subsection{Docker} -Docker とは OS レベルの仮想化技術を利用して,ソフトウェアをコンテナと呼ばれるパッケージで提供する。またコンテナの実行だけでなく, +Docker\cite{docker} とは OS レベルの仮想化技術を利用して,ソフトウェアをコンテナと呼ばれるパッケージで提供する。またコンテナの実行だけでなく, コンテナの実行に用いるイメージの作成,イメージを共有する仕組みを持つコンテナ管理ソフトウェアである。 コンテナの実行には Docker 社が提供している Docker Hub\cite{dockerhub} に登録されているイメージ,Dockerfile を用いて作成したイメージを利用することができる。 Dockerfile を用いることで,必要なソフトウェアや各種設定を含んだイメージを作成できる。 @@ -69,7 +69,7 @@ Kubernetes ではオブジェクトによりクラスターの状態を表現する。オブジェクトはコンテナだけでなく,ネットワークやストレージ,接続ポリシーの望ましい状態を記述できる。 \subsection{Singularity} -Singularity とは,HPC クラスタ上で複雑なアプリケーションを実行するために開発されたコンテナプラットフォームである。 +Singularity\cite{singu} とは,HPC クラスタ上で複雑なアプリケーションを実行するために開発されたコンテナプラットフォームである。 Singularity は マルチユーザに対応しており,コンテナ内での権限は実行ユーザの権限を引き継ぐため,ユーザに特別な権限の設定が必要ない。 またデフォルトで,\$HOME,/tmp,/proc,/sys,/dev がコンテナにマウントされ,サーバ上の GPU を簡単に利用できる。 Singularity のコンテナイメージは Docker Hub に登録されているイメージ,またはDockerfile から作成したイメージを変換することで利用することができる。 @@ -77,10 +77,11 @@ \subsection{GitLab} GitLab\cite{gitlab} とは バージョン管理システムである Git のリポジトリマネージャである。 GitLab は GitHub と違い,オンプレミス環境に構築することができるため,本コースでは GitLab を使用している。 -本研究では GitLab の統合機能の GitLab CI/CD\cite{gitlabcicd},また GitLab CI/CD と組み合わせて使用する GitLab Runner\cite{gitlabrunner} を利用する。\par +本研究では GitLab の統合機能の GitLab CI/CD\cite{gitlabcicd},また GitLab CI/CD と組み合わせて使用する GitLab Runner\cite{gitlabrunner} を利用する。 + GitLab CI/CD は 継続的インテグレーション(CI)・継続的デリバリー(CD)を GitLab から利用することができる。 CI では GitLab のコードを定期的または自動的にビルド・テストを行う。CD は CI を拡張した機能であり,ビルドやテストだけでなくリリースの準備も行う。 -\par + GitLab Runner とは,ビルドのためのアプリケーションであり,GitLab CI と連携することで別の場所でビルドを動かすことができる。 \subsection{digdog} @@ -95,7 +96,7 @@ \subsection{マルチユーザへの対応} Docker は基本的に root 権限で動作する。また一般ユーザが docker コマンドを使用するには docker グループに追加する必要がある。 そのため docker グループに追加されたユーザは,他ユーザのコンテナを操作できるなどセキュリティ上の問題がある。 -\par + そこで,Web コンソールを用いて管理を行う。 Web コンソールには学科のアカウントを用いてログインし,コンテナの作成や操作を可能とする。 コンテナ作成は Docker コンテナと Kubernetes コンテナの 2つから選択することができる。 コンテナ作成を選択するとコンテナを作成するために必要な情報を入力する。入力する内容は表\ref{tb:wmcon} である。 @@ -104,7 +105,7 @@ \begin{table}[H] \begin{center} \caption{コンテナ作成時の入力内容} - \begin{tabular}{c|l} \hline + \begin{tabular}{|c|l|} \hline ContainerName & コンテナ名 \\ \hline Image & Docker イメージ \\ \hline Environments & コンテナ作成時の環境変数 \\ \hline @@ -143,8 +144,8 @@ Singularity はユーザ権限で動作することから,学生が ssh でブレードサーバへ接続し利用する方が適している。 Singularity は Docker イメージを変換し使用できる。 だが,イメージの変換には sudo 権限が必要となる。 -%Docker イメージの変換を申請性にすると,管理者の仕事が増え,またユーザも利用しづらい。 -そこで,Web コンソールから Singularity 用のイメージをダウンロードできる仕様とする。\par +そこで,Web コンソールから Singularity 用のイメージをダウンロードできる仕様とする。 + ユーザは利用したいイメージをダウンロードし,ブレードサーバへ送信して Singularity を使用する。Singularity を利用する流れを図\ref{fig:singu} に示す。 \begin{figure}[H] @@ -160,7 +161,7 @@ サービスのシステム構成を図\ref{fig:wm} に示す。 Web コンソールで Docker や Kubernetes の操作をまとめるのではなく,機能ごとに以下の 3 つにサービスを分ける。 Web コンソールから HTTP API で各機能へリクエストを送信し操作を行う。 -\par + 実装にはDocker や Kubernetes の実装言語であり,操作するためのライブラリが揃っている Go 言語を使用する。 \begin{itemize} \setlength{\parskip}{0cm} % 段落間 @@ -179,7 +180,8 @@ \end{figure*} \subsection{Web コンソール} -Web コンソールは本コースの学生や教員が利用するため,学科アカウントでログインできる必要がある。学科の LDAP サーバを利用して学科アカウントで LDAP 認証を実装する。\par +Web コンソールは本コースの学生や教員が利用するため,学科アカウントでログインできる必要がある。学科の LDAP サーバを利用して学科アカウントで LDAP 認証を実装する。 + Docker の操作や Kubernetes の操作を行う機能では,ユーザの管理を行わないため Web コンソールで管理する必要がある。 そのため,ユーザのコンテナやイメージの情報をデータベースに格納して管理する。 ユーザがコンテナやイメージの操作を行う時は,紐づけられたアカウントID の確認を行うことで,他のユーザのコンテナやイメージの操作を制限する。 @@ -187,7 +189,8 @@ \subsection{Docker の操作} Docker は Docker Engine API を提供している。Docker デーモンは指定した IP アドレスと ポート を リッスンする。 IP アドレスと ポートの指定を行うことで外部から Docker の操作が可能になる。 だが,Dockr デーモンが稼働しているホスト上の root アクセスを得られるため,推奨されてない。 -また,本研究で実装するサービスでは Docker のすべての操作を必要としない。そこで,Docker の操作を行うための SDK \cite{sdk} を使用し,必要な機能のみを実装する。\par +また,本研究で実装するサービスでは Docker のすべての操作を必要としない。そこで,Docker の操作を行うための SDK \cite{sdk} を使用し,必要な機能のみを実装する。 + サービスを提供する上で Docker の必要となる操作は以下である。 \begin{itemize} \setlength{\parskip}{0cm} % 段落間 @@ -224,8 +227,8 @@ \begin{table}[H] \begin{center} \caption{kubectl のコマンド} - \begin{tabular}{c|l} \hline - get & Pod,Deployment,Service,Ingress の一覧を表示する \\ \hline + \begin{tabular}{|c|l|} \hline + get & Pod, Deployment, Service, Ingress の一覧を表示する \\ \hline log & Pod の Log を表示する \\ \hline exec & Pod にアクセスする \\ \hline cp & Pod にファイルを送信する \\ \hline @@ -235,35 +238,37 @@ \end{table} \section{今後の課題} -本研究で実装したサービスでは学生が学習環境として利用するには,まだ必要な実装が不足している。\par +本研究で実装したサービスでは学生が学習環境として利用するには,まだ必要な実装が不足している。 + 本サービスでは,大量のデータを用いる時に Singularity を使用できる環境を用意している。 だが,Web コンソールから作成した Docker や Kubernetes のコンテナではデータの永続化に対応していないため,コンテナの削除で削除されてしまう。 そこで,学科のサーバでは学生ごとのディレクトリにマウントするなどの対策を行う必要がある。 -\par + 本サービスでは,学生が自由に Docker イメージを作成できる。また,Docker イメージを Singularity 用のイメージに変換する。 そのため,イメージの容量でブレードサーバのストレージを圧迫してしまう可能性があることから,あまり利用されていないイメージは定期的に削除する必要がある。 -\par + 次にネットワークの設定である。 作成したコンテナへのアクセスには,コンテナが動作しているサーバの IP アドレス,設定されたポート番号を使用する。 そのため,外部からアクセスなどに対応することができない。そこで,コンテナごとに IP アドレスを設定するなどの対策が必要である。 -\par + また,本サービスではユーザごとにリソースの制限を行っていないため,過剰なリソースの占有を防ぐための対策をする必要がある。 GPU などの負荷がかかるプログラムの実行で使用されるリソースにはジョブ管理ソフトウェアなどで対策をとる。\ \begin{thebibliography}{99} -\bibitem{singu} Singularity. https://sylabs.io/singularity/, 2020/9/11. \bibitem{docker} Docker, https://www.docker.com/. 2020/9/11. \bibitem{dockerhub} Docker Hub, https://hub.docker.com/, 2020/9/11. \bibitem{k8s} Kubernetes, https://kubernetes.io/, 2020/9/11. +\bibitem{singu} Singularity. https://sylabs.io/singularity/, 2020/9/11. +\bibitem{gitlab} GitLab, https://about.gitlab.com/, 2020/9/11. +\bibitem{gitlabcicd} GitLab CI/CD, https://docs.gitlab.com/ce/ci/, 2020/9/11. +\bibitem{gitlabrunner} GitLab Runner Docs, https://docs.gitlab.com/runner/, 2020/9/11. +\bibitem{digdog} 秋田 海人 and 高瀬 大空 and 上地 悠斗 and 長田 智和 and 谷口 祐治, 情報系学科における教育研究情報システムの運用管理並びに新規システムの構築に関する取り組み, インターネットと運用技術シンポジウム(2019). +\bibitem{nvidia-docker} NVIDIA Container Toolkit, https://github.com/NVIDIA/nvidia-docker, 2020/9/11. \bibitem{sdk} Docker Engine API, https://docs.docker.com/engine/api/, 2020/9/11. \bibitem{kubecli} Go clients for talking to a kubernetes cluster, https://github.com/kubernetes/client-go, 2020/9/11. -\bibitem{gitlab} GitLab, https://about.gitlab.com/, 2020/9/11. -\bibitem{gitlabrunner} GitLab Runner Docs, https://docs.gitlab.com/runner/, 2020/9/11. -\bibitem{kvm} KVM, https://www.linux-kvm.org/, 2020/9/11. -\bibitem{gitlabcicd} GitLab CI/CD, https://docs.gitlab.com/ce/ci/, 2020/9/11. -\bibitem{nvidia-docker} NVIDIA Container Toolkit, https://github.com/NVIDIA/nvidia-docker, 2020/9/11. -\bibitem{digdog} 秋田 海人 and 高瀬 大空 and 上地 悠斗 and 長田 智和 and 谷口 祐治, 情報系学科における教育研究情報システムの運用管理並びに新規システムの構築に関する取り組み, インターネットと運用技術シンポジウム(2019). + +%\bibitem{kvm} KVM, https://www.linux-kvm.org/, 2020/9/11. %\bibitem{ie-virsh} 平良 太貴 and 河野 真治, OS 授業向けマルチユーザ VM 環境の構築, 研究報告システムソフトウェアとオペレーティング・システム(OS)(2014). \end{thebibliography} diff -r 5f52fac4bacf -r bc9290d12651 mk-thesis.bib --- a/mk-thesis.bib Mon Sep 14 23:51:06 2020 +0900 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,70 +0,0 @@ -@manual{singu, -author = "{Singularity}", -title ="{https://sylabs.io/singularity/}", -} - -@manual{docker, -author = "{Docker}", -title ="{https://www.docker.com/}", -} - -@manual{dockerhub, -author = "{Docker Hub}", -title ="{https://hub.docker.com/}", -} - -@manual{k8s, -author = "{kubernetes}", -title ="{https://kubernetes.io/}", -} - -@manual{sdk, -author = "{Docker Engine API}", -title ="{https://docs.docker.com/engine/api/}", -} - -@manual{kubecli, -author = "{Go clients for talking to a kubernetes cluster}", -title ="{https://github.com/kubernetes/client-go}", -} - -@manual{gitlab, -author = "{GitLab}", -title ="{https://about.gitlab.com/}", -} - -@manual{gitlabrunner, -author = "{GitLab Runner Docs}", -title ="{https://docs.gitlab.com/runner/}", -} - -@manual{kvm, -author = "{KVM}", -title ="{https://www.linux-kvm.org/}", -} - -@manual{gitlabcicd, -author = "{GitLab CI/CD}", -title ="{https://docs.gitlab.com/ce/ci/}", -} - -@manual{nvidia-docker, -author = "{NVIDIA Container Toolkit}", -title ="{https://github.com/NVIDIA/nvidia-docker}", -} - -@article{digdog, - author = "秋田 海人 and 高瀬 大空 and 上地 悠斗 and 長田 智和 and 谷口 祐治", - title = "情報系学科における教育研究情報システムの運用管理並びに新規システムの構築に関する取り組み", - year = "2019", - institution = "琉球大学大学院理工学研究科情報工学専攻, 琉球大学工学部情報工学科, 琉球大学工学部工学科知能情報コース, 琉球大学工学部情報工学科, 琉球大学工学部情報工学科", - journal = "インターネットと運用技術シンポジウム", -} - -@article{ie-virsh, - author = "平良 太貴 and 河野 真治", - title = "OS 授業向けマルチユーザ VM 環境の構築", - year = "2014", - institution = "琉球大学大学院理工学研究科情報工学専攻, 琉球大学工学部情報工学科", - journal = "研究報告システムソフトウェアとオペレーティング・システム(OS)", -} \ No newline at end of file