# HG changeset patch # User Ken Miyahira # Date 1596522889 -32400 # Node ID 790bc05dc78c3602e2b48aaa55ac9d70c28e60ab # Parent db794a6414e4f0912785b0d12ca2106f2e11b118 update tex, mm diff -r db794a6414e4 -r 790bc05dc78c mm/mk-sigiot.mm --- a/mm/mk-sigiot.mm Mon Aug 03 18:09:52 2020 +0900 +++ b/mm/mk-sigiot.mm Tue Aug 04 15:34:49 2020 +0900 @@ -67,6 +67,9 @@ + + + @@ -78,6 +81,7 @@ + diff -r db794a6414e4 -r 790bc05dc78c mm/mk-sigiot.pdf Binary file mm/mk-sigiot.pdf has changed diff -r db794a6414e4 -r 790bc05dc78c paper/mk-wm.bib --- a/paper/mk-wm.bib Mon Aug 03 18:09:52 2020 +0900 +++ b/paper/mk-wm.bib Tue Aug 04 15:34:49 2020 +0900 @@ -3,7 +3,7 @@ title ="{https://sylabs.io/singularity/}", } -@manual{dockercli, +@manual{sdk, author = "{Docker Engine API}", title ="{https://docs.docker.com/engine/api/}", } diff -r db794a6414e4 -r 790bc05dc78c paper/mk-wm.pdf Binary file paper/mk-wm.pdf has changed diff -r db794a6414e4 -r 790bc05dc78c paper/mk-wm.tex --- a/paper/mk-wm.tex Mon Aug 03 18:09:52 2020 +0900 +++ b/paper/mk-wm.tex Tue Aug 04 15:34:49 2020 +0900 @@ -196,8 +196,12 @@ \end{figure} \section{サービスの実装} -本コースでは ブレードサーバが 4 台導入され, 1 台に 1 つ GPU が搭載されている。コンテナ貸出サービスの機能を 1 つにまとめると Docker の操作が 1台のブレードサーバのみになる。 -そこで, 機能ごとに以下の 3 つにサービスに分ける。また, Docker や Kubernetes の操作を HTTP API で提供することで, 図\ref{fig:api} のようにリクエスト先の変更にで複数のブレードサーバにコンテナを分散することができる。 +本コースでは学科システムを教員の指導の下, 学生主体でシステム管理チームと呼ばれる組織によって構築・運用・管理が行われている。 +学科システムはブレードサーバを 4 台, SAN 用ストレージと汎用ストレージをそれぞれ 2台ずつ導入している。本コースの基幹サービスはこのブレードサーバの仮想環境上で VM として動作している。 +新たにサービスを実装するとなると, システム管理チームが運用・管理を行いやすい実装にする必要がある。\par +Web コンソールや Docker の操作を 1 つにまとめると, Docker コンテナの作成が 1台のブレードサーバのみになってしまう。 +そこで, コンテナ貸出システムは, 機能ごとに以下の 3 つにサービスに分ける。 +Docker や Kubernetes の操作を HTTP API で提供することで, 図\ref{fig:api} のようにリクエスト先の変更で複数のブレードサーバにコンテナを分散することができる。 だが, 現時点では未実装である。\par 実装にはDocker や Kubernetes の実装言語であり, 操作するためのライブラリが揃っている Go 言語を使用する。 \begin{itemize} @@ -218,14 +222,15 @@ Web コンソールは本コースの学生や教員が利用するため, 学科のアカウントでログインできる LDAP 認証が必須である。 また, GUI で操作するため, 新しく GUI の操作に慣れる必要があることから, ユーザが操作しやすい必要がある。\par Docker の操作や Kubernetes の操作を行う HTTP API はセッション管理を行わないため, Web コンソールで管理する必要がある。 -そのため, ユーザのコンテナやイメージをデータベースに格納して管理する。 +そのため, ユーザのコンテナやイメージの情報をデータベースに格納して管理する。 ユーザのアカウントID と コンテナに紐づけられたアカウントID が等しい場合のみ操作を行うことができる。そのため, 他のユーザのコンテナやイメージを操作できない。 -また, ユーザが作成する Docker イメージは他のユーザに共有や非共有ができる。共有されたイメージは共有イメージの一覧に表示され, 他のユーザがコンテナを作成する時に利用することができる。 +また, ユーザが作成する Docker イメージは他のユーザに共有や非共有ができる。共有されたイメージは共有イメージの一覧に表示され, 他のユーザがコンテナ作成時に利用することができる。 コンテナ作成時にイメージの確認が行われることで, 非共有に設定したイメージを他のユーザが利用することはできない。 \subsection{Docker の操作} -実装には Docker の操作を行うための SDK である Docker client \cite{dockercli} を使用する。 -Docker は sock に対して curl コマンドで操作できる HTTP API を提供している。sock だと複数のサーバに対応できないため, Go で HTTP API を実装する。\par +Docker は Docker Engine API を提供している。Docker デーモンは指定した IP アドレスと ポート を リッスンする。 IP アドレスと ポートの指定を行うことで外部から Docker の操作が可能になる。 +だが, Dockr デーモンが稼働しているホスト上の root アクセスを得られるため, 推奨されてない。 +また, 本論文で実装するサービスでは Docker のすべての操作を必要としない。そこで, Docker の操作を行うための SDK \cite{sdk} を使用し, 必要な機能のみを実装する。\par サービスを提供する上で Docker の必要となる操作は以下である。 \begin{itemize} \item コンテナの作成 @@ -234,7 +239,6 @@ \item コンテナへファイル送信 \item イメージ一覧の取得 \item イメージの削除 - \item GitLab Runner の作成 \end{itemize}