changeset 30:17d034fa49be

update slide
author Ken Miyahira <e175733@ie.u-ryukyu.ac.jp>
date Thu, 03 Sep 2020 13:42:56 +0900
parents 01e61c619a1b
children 482467c71a63
files slide/slide.html slide/slide.md
diffstat 2 files changed, 111 insertions(+), 113 deletions(-) [+]
line wrap: on
line diff
--- a/slide/slide.html	Tue Sep 01 15:23:40 2020 +0900
+++ b/slide/slide.html	Thu Sep 03 13:42:56 2020 +0900
@@ -78,31 +78,6 @@
 " data-marpit-pagination="4" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
 ;">
 <h1>本コースで利用しているサービス</h1>
-<p>VM 貸出サービスはどちらも libvirt と virsh の機能を用いて実装されている。</p>
-<ul>
-<li>
-<p>libvirt</p>
-<ul>
-<li>仮想マシンの制御を抽象化したライブラリ</li>
-<li>KVM や VMWare, Xen など多くのハイパーバイザに対応している</li>
-</ul>
-</li>
-<li>
-<p>virsh</p>
-<ul>
-<li>libvirt にある CLI ツール</li>
-<li>libvirt がアクセスできるハイパーバイザを操作できる</li>
-</ul>
-</li>
-</ul>
-</section>
-</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="5" data-paginate="true" data-theme="default" data-style="section {
-  background-color: #FFFFFF;
-  font-size: 28px;
-}
-" data-marpit-pagination="5" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
-;">
-<h1>本コースで利用しているサービス</h1>
 <ul>
 <li>
 <p>デフォルトのスペック</p>
@@ -113,7 +88,7 @@
 </ul>
 </li>
 <li>
-<p>GPU の使用に対応していない</p>
+<p>GPU の共有に対応していない</p>
 </li>
 <li>
 <p>PCI パススルーが必要である</p>
@@ -124,11 +99,11 @@
 </ul>
 <p>そこで新たにコンテナ技術を用いて学生の学習環境を提供するサービスの実装を行った。</p>
 </section>
-</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="6" data-paginate="true" data-theme="default" data-style="section {
+</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="5" data-paginate="true" data-theme="default" data-style="section {
   background-color: #FFFFFF;
   font-size: 28px;
 }
-" data-marpit-pagination="6" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
+" data-marpit-pagination="5" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
 ;">
 <h1>新規サービスの設計</h1>
 <p>コンテナ貸出を行うため, コンテナ仮想化を利用できる Docker と Kubernetes, Singularity を利用する。</p>
@@ -149,16 +124,16 @@
 <p>Singularity</p>
 <ul>
 <li>HCP クラスタ上で複雑なアプリケーションを実行するために開発されたコンテナプラットフォームである。</li>
-<li>Docker イメージを利用することができる。</li>
+<li>マルチユーザ環境で利用できる</li>
 </ul>
 </li>
 </ul>
 </section>
-</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="7" data-paginate="true" data-theme="default" data-style="section {
+</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="6" data-paginate="true" data-theme="default" data-style="section {
   background-color: #FFFFFF;
   font-size: 28px;
 }
-" data-marpit-pagination="7" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
+" data-marpit-pagination="6" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
 ;">
 <h1>新規サービスの設計</h1>
 <p>コンテナで学習環境を提供するにあたって以下の用件が必要となる。</p>
@@ -177,11 +152,11 @@
 </li>
 </ul>
 </section>
-</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="8" data-paginate="true" data-theme="default" data-style="section {
+</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="7" data-paginate="true" data-theme="default" data-style="section {
   background-color: #FFFFFF;
   font-size: 28px;
 }
-" data-marpit-pagination="8" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
+" data-marpit-pagination="7" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
 ;">
 <h1>新規サービスの設計</h1>
 <p>他のユーザのコンテナを削除や操作ができなくするために, Web コンソールを用意する。</p>
@@ -191,11 +166,11 @@
 </ul>
 <p><img src="images/conlist.png" alt="" /></p>
 </section>
-</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="9" data-paginate="true" data-theme="default" data-style="section {
+</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="8" data-paginate="true" data-theme="default" data-style="section {
   background-color: #FFFFFF;
   font-size: 28px;
 }
-" data-marpit-pagination="9" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
+" data-marpit-pagination="8" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
 ;">
 <h1>新規サービスの設計</h1>
 <p>イメージの作成には, 学科で使用している GitLab の CI/CD 機能を利用する。</p>
@@ -205,11 +180,11 @@
 </ul>
 <p><img src="images/gitlab.png" alt="" /></p>
 </section>
-</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="10" data-paginate="true" data-theme="default" data-style="section {
+</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="9" data-paginate="true" data-theme="default" data-style="section {
   background-color: #FFFFFF;
   font-size: 28px;
 }
-" data-marpit-pagination="10" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
+" data-marpit-pagination="9" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
 ;">
 <h1>新規サービスの設計</h1>
 <p>GPU を利用するために, NVIDIA Container Toolkit を導入する。</p>
@@ -220,17 +195,32 @@
 <pre><code class="language-yaml"><svg data-marp-fitting="svg" data-marp-fitting-code><foreignObject><span data-marp-fitting-svg-content><span data-marp-fitting-svg-content-wrap><span class="hljs-string">FROM</span> <span class="hljs-string">nvidia/cuda:10.0-base</span>
 </span></span></foreignObject></svg></code></pre>
 </section>
+</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="10" data-paginate="true" data-theme="default" data-style="section {
+  background-color: #FFFFFF;
+  font-size: 28px;
+}
+" data-marpit-pagination="10" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
+;">
+<h1>新規サービスの設計</h1>
+<p>ファイル共有のとして, Singularity を利用する。</p>
+<ul>
+<li>$HOME, /tmp, /proc, /sys, /dev がコンテナにマウントされる</li>
+<li><code>--nv</code> で GPU を利用することも可能となる</li>
+</ul>
+</section>
 </foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="11" data-paginate="true" data-theme="default" data-style="section {
   background-color: #FFFFFF;
   font-size: 28px;
 }
 " data-marpit-pagination="11" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
 ;">
-<h1>新規サービスの設計</h1>
-<p>ファイル共有のとして, Singularity を利用する。</p>
+<h1>新規サービスの実装</h1>
+<p>コンテナ貸出を行うサービスとして以下を実装した。</p>
 <ul>
-<li>$HOME, /tmp, /proc, /sys, /dev がコンテナにマウントされる</li>
-<li><code>--nv</code> で GPU を利用することも可能となる</li>
+<li>Web コンソール</li>
+<li>Docker の操作</li>
+<li>Kubernetes の操作</li>
+<li>Singularity イメージの提供</li>
 </ul>
 </section>
 </foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="12" data-paginate="true" data-theme="default" data-style="section {
@@ -240,12 +230,10 @@
 " data-marpit-pagination="12" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
 ;">
 <h1>新規サービスの実装</h1>
-<p>コンテナ貸出を行うサービスとして以下の機能を実装した。</p>
+<p>Web コンソールとして以下の機能を実装した。</p>
 <ul>
-<li>Web コンソール</li>
-<li>Docker の操作</li>
-<li>Kubernetes の操作</li>
-<li>Singularity イメージの提供</li>
+<li>本コースの教員や学生が利用できるように LDAP 認証</li>
+<li>コンテナやイメージの管理を行う DB</li>
 </ul>
 </section>
 </foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="13" data-paginate="true" data-theme="default" data-style="section {
@@ -255,19 +243,6 @@
 " data-marpit-pagination="13" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
 ;">
 <h1>新規サービスの実装</h1>
-<p>Web コンソールとして以下の機能を実装した。</p>
-<ul>
-<li>本コースの教員や学生が利用できるように LDAP 認証</li>
-<li>コンテナやイメージの管理を行う DB</li>
-</ul>
-</section>
-</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="14" data-paginate="true" data-theme="default" data-style="section {
-  background-color: #FFFFFF;
-  font-size: 28px;
-}
-" data-marpit-pagination="14" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
-;">
-<h1>新規サービスの実装</h1>
 <p>Docker の操作には Docker Engine SDKs を使用し, コンテナやイメージの操作に必要な機能を抜き出し実装した。実装した機能は以下である。</p>
 <ul>
 <li>コンテナの作成</li>
@@ -278,11 +253,11 @@
 <li>イメージの一覧取得</li>
 </ul>
 </section>
-</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="15" data-paginate="true" data-theme="default" data-style="section {
+</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="14" data-paginate="true" data-theme="default" data-style="section {
   background-color: #FFFFFF;
   font-size: 28px;
 }
-" data-marpit-pagination="15" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
+" data-marpit-pagination="14" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
 ;">
 <h1>新規サービスの実装</h1>
 <p>GPU を利用する場合, コンテナに割り当てるリソースを宣言する。</p>
@@ -303,11 +278,11 @@
 }
 </span></span></foreignObject></svg></code></pre>
 </section>
-</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="16" data-paginate="true" data-theme="default" data-style="section {
+</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="15" data-paginate="true" data-theme="default" data-style="section {
   background-color: #FFFFFF;
   font-size: 28px;
 }
-" data-marpit-pagination="16" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
+" data-marpit-pagination="15" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
 ;">
 <h1>新規サービスの実装</h1>
 <p>Kubernetes の操作には Kubernetes クラスターと対話するライブラリである client-go を使用し, 必要な機能を抜き出し実装した。</p>
@@ -317,11 +292,11 @@
 <li>Kubernetes API のアクセス制御</li>
 </ul>
 </section>
-</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="17" data-paginate="true" data-theme="default" data-style="section {
+</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="16" data-paginate="true" data-theme="default" data-style="section {
   background-color: #FFFFFF;
   font-size: 28px;
 }
-" data-marpit-pagination="17" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
+" data-marpit-pagination="16" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
 ;">
 <h1>新規サービスの実装</h1>
 <p>学生ごとの Namespace を作成する。また Role を以下のように定義することで, 学生が手元の PC から自身の Namespace のリソースを操作することができる。</p>
@@ -348,11 +323,11 @@
 }
 </span></span></foreignObject></svg></code></pre>
 </section>
-</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="18" data-paginate="true" data-theme="default" data-style="section {
+</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="17" data-paginate="true" data-theme="default" data-style="section {
   background-color: #FFFFFF;
   font-size: 28px;
 }
-" data-marpit-pagination="18" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
+" data-marpit-pagination="17" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
 ;">
 <h1>新規サービスの実装</h1>
 <p>Singularity はマルチユーザに対応しているため, CLI から操作できるようにする。</p>
@@ -366,6 +341,16 @@
 </ul>
 <p><img src="images/singularity.png" alt="w:450 h:300" style="width:450px;height:300px;" /></p>
 </section>
+</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="18" data-paginate="true" data-theme="default" data-style="section {
+  background-color: #FFFFFF;
+  font-size: 28px;
+}
+" data-marpit-pagination="18" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
+;">
+<h1>サービスの使用例</h1>
+<p>Web コンソールからコンテナを作成する例である。</p>
+<p><img src="images/create2.png" alt="w:1000 H:700" style="width:1000px;" /></p>
+</section>
 </foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="19" data-paginate="true" data-theme="default" data-style="section {
   background-color: #FFFFFF;
   font-size: 28px;
@@ -373,8 +358,8 @@
 " data-marpit-pagination="19" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
 ;">
 <h1>サービスの使用例</h1>
-<p>Web コンソールからコンテナを作成する例である。</p>
-<p><img src="images/create2.png" alt="w:1000 H:700" style="width:1000px;" /></p>
+<p>コンテナ作成時に GPU を使用するにチェックを入れることで, コンテナから GPU を利用することができる。</p>
+<p><img src="images/ope.png" alt="w:850 h:530" style="width:850px;height:530px;" /></p>
 </section>
 </foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="20" data-paginate="true" data-theme="default" data-style="section {
   background-color: #FFFFFF;
@@ -383,16 +368,6 @@
 " data-marpit-pagination="20" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
 ;">
 <h1>サービスの使用例</h1>
-<p>コンテナ作成時に GPU を使用するにチェックを入れることで, コンテナから GPU を利用することができる。</p>
-<p><img src="images/ope.png" alt="w:850 h:530" style="width:850px;height:530px;" /></p>
-</section>
-</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="21" data-paginate="true" data-theme="default" data-style="section {
-  background-color: #FFFFFF;
-  font-size: 28px;
-}
-" data-marpit-pagination="21" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
-;">
-<h1>サービスの使用例</h1>
 <p>Kubernetes で作成したコンテナには, 手元の PC からコンテナの操作を行うことができる。</p>
 <p><img src="images/kube.png" alt="" /></p>
 <pre><code class="language-shell"><svg data-marp-fitting="svg" data-marp-fitting-code><foreignObject><span data-marp-fitting-svg-content><span data-marp-fitting-svg-content-wrap><span class="hljs-meta">&gt;</span><span class="bash">&gt;&gt; kube get pods        </span>
@@ -401,11 +376,11 @@
 e175733-web2-6775767cc8-4rmt9   1/1     Running   0          92s
 </span></span></foreignObject></svg></code></pre>
 </section>
-</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="22" data-paginate="true" data-theme="default" data-style="section {
+</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="21" data-paginate="true" data-theme="default" data-style="section {
   background-color: #FFFFFF;
   font-size: 28px;
 }
-" data-marpit-pagination="22" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
+" data-marpit-pagination="21" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
 ;">
 <h1>比較</h1>
 <ul>
@@ -418,11 +393,11 @@
 </li>
 </ul>
 </section>
-</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="23" data-paginate="true" data-theme="default" data-style="section {
+</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="22" data-paginate="true" data-theme="default" data-style="section {
   background-color: #FFFFFF;
   font-size: 28px;
 }
-" data-marpit-pagination="23" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
+" data-marpit-pagination="22" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
 ;">
 <h1>比較</h1>
 <p>本コースでは VM 貸出サービス以外にコンテナを利用できるサービスもある。</p>
@@ -440,11 +415,11 @@
 </li>
 </ul>
 </section>
-</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="24" data-paginate="true" data-theme="default" data-style="section {
+</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="23" data-paginate="true" data-theme="default" data-style="section {
   background-color: #FFFFFF;
   font-size: 28px;
 }
-" data-marpit-pagination="24" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
+" data-marpit-pagination="23" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
 ;">
 <h1>比較</h1>
 <ul>
@@ -464,11 +439,11 @@
 </li>
 </ul>
 </section>
-</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="25" data-paginate="true" data-theme="default" data-style="section {
+</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="24" data-paginate="true" data-theme="default" data-style="section {
   background-color: #FFFFFF;
   font-size: 28px;
 }
-" data-marpit-pagination="25" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
+" data-marpit-pagination="24" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
 ;">
 <h1>比較</h1>
 <ul>
@@ -480,13 +455,13 @@
 </li>
 </ul>
 </section>
-</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="26" data-paginate="true" data-theme="default" data-style="section {
+</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="25" data-paginate="true" data-theme="default" data-style="section {
   background-color: #FFFFFF;
   font-size: 28px;
 }
-" data-marpit-pagination="26" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
+" data-marpit-pagination="25" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
 ;">
-<h1>改善点</h1>
+<h1>改善点 1/2</h1>
 <ul>
 <li>データの永続化
 <ul>
@@ -501,6 +476,32 @@
 <li>Docker イメージのセキュリティ対策を考える必要</li>
 </ul>
 </li>
+</ul>
+</section>
+</foreignObject></svg><svg data-marpit-svg="" viewBox="0 0 1280 720"><foreignObject width="1280" height="720"><section id="26" data-paginate="true" data-theme="default" data-style="section {
+  background-color: #FFFFFF;
+  font-size: 28px;
+}
+" data-marpit-pagination="26" data-marpit-pagination-total="27" style="--paginate:true;--theme:default;
+;">
+<h1>改善点 2/2</h1>
+<ul>
+<li>ネットワーク
+<ul>
+<li>コンテナのサービスにアクセスには, ブレードサーバの IP とポート番号となる</li>
+<li>コンテナごとに IP アドレスを設定する</li>
+<li>Docker コンテナでは
+<ul>
+<li>pipework</li>
+</ul>
+</li>
+<li>Kubernetes のコンテナでは
+<ul>
+<li>MetalLB</li>
+</ul>
+</li>
+</ul>
+</li>
 <li>リソースの占有
 <ul>
 <li>ユーザごとにリソースの制限</li>
@@ -518,8 +519,8 @@
 <h1>まとめ</h1>
 <ul>
 <li>本コースで利用する新規サービスの設計と実装, また本コースで利用しているサービスとの比較を行った</li>
-<li>学生がコンテナ技術を用いて学習環境を利用できるサービスの実装をすることができた</li>
-<li>今後テスト環境にデプロイを行い, ユーザやシステム管理チームからのフィードバックをもらい, 改善や実証実験を目指す</li>
+<li>コンテナ技術を用いて学生が利用できる学習環境を提供するサービスの実装をすることができた</li>
+<li>今後テスト環境にデプロイを行い, ユーザや管理者からのフィードバックをもらい, 改善や実証実験を目指す</li>
 </ul>
 </section>
 <script>!function(){"use strict";let t=void 0;function e(e){let r=!1;Array.from(document.querySelectorAll("svg[data-marpit-svg]"),i=>{const{children:o,clientHeight:n,clientWidth:a,viewBox:s}=i;i.style.transform||(i.style.transform="translateZ(0)");const l=e||window!==window.parent&&window.parent.marpitSVGPolyfillZoomFactor||i.currentScale||1;t!==l&&(t=l,r=l);const c=s.baseVal.width/l,d=s.baseVal.height/l,p=Math.min(n/d,a/c);for(let t=0;t<o.length;t+=1){const{style:e}=o[t].firstChild;e.position||(e.position="fixed"),e.transformOrigin||(e.transformOrigin="0 0"),e.transform=`scale(${p}) translateZ(0)`}}),!1!==r&&Object.defineProperty(window,"marpitSVGPolyfillZoomFactor",{configurable:!0,value:r})}const r=(t,e,r)=>{if(t.getAttribute(e)!==r)return t.setAttribute(e,r),!0};function i(t=!0){for(const t of"Apple Computer, Inc."===navigator.vendor?[e]:[])t();Array.from(document.querySelectorAll('svg[data-marp-fitting="svg"]'),t=>{var e;const i=t.firstChild,o=i.firstChild,{scrollWidth:n,scrollHeight:a}=o;let s,l=1;if(t.hasAttribute("data-marp-fitting-code")&&(s=null===(e=t.parentElement)||void 0===e?void 0:e.parentElement),t.hasAttribute("data-marp-fitting-math")&&(s=t.parentElement),s){const t=getComputedStyle(s),e=Math.ceil(s.clientWidth-parseFloat(t.paddingLeft||"0")-parseFloat(t.paddingRight||"0"));e&&(l=e)}const c=Math.max(n,l),d=Math.max(a,1),p=`0 0 ${c} ${d}`;r(i,"width",""+c),r(i,"height",""+d),r(t,"preserveAspectRatio",getComputedStyle(t).getPropertyValue("--preserve-aspect-ratio")||"xMinYMin meet"),r(t,"viewBox",p)&&t.classList.toggle("__reflow__")}),t&&window.requestAnimationFrame(()=>i(t))}!function(){if("undefined"==typeof window)throw new Error("Marp Core's browser script is valid only in browser context.");window.marpCoreBrowserScript?console.warn("Marp Core's browser script has already executed."):(Object.defineProperty(window,"marpCoreBrowserScript",{value:!0}),i())}()}();
--- a/slide/slide.md	Tue Sep 01 15:23:40 2020 +0900
+++ b/slide/slide.md	Thu Sep 03 13:42:56 2020 +0900
@@ -48,26 +48,12 @@
 
 # 本コースで利用しているサービス
 
-VM 貸出サービスはどちらも libvirt と virsh の機能を用いて実装されている。
-
-- libvirt
-    - 仮想マシンの制御を抽象化したライブラリ
-    - KVM や VMWare, Xen など多くのハイパーバイザに対応している
-
-- virsh
-    - libvirt にある CLI ツール
-    - libvirt がアクセスできるハイパーバイザを操作できる
-
----
-
-# 本コースで利用しているサービス
-
 - デフォルトのスペック
     - CPU 1コア
     - メモリ 1GB
     - ディスク 10GB
 
-- GPU の使用に対応していない
+- GPU の共有に対応していない
 - PCI パススルーが必要である
     - VM 1つに 1台の GPU が必要となる
 
@@ -87,7 +73,7 @@
 
 - Singularity
     - HCP クラスタ上で複雑なアプリケーションを実行するために開発されたコンテナプラットフォームである。
-    - Docker イメージを利用することができる。
+    - マルチユーザ環境で利用できる
 
 ---
 
@@ -147,7 +133,7 @@
 
 # 新規サービスの実装
 
-コンテナ貸出を行うサービスとして以下の機能を実装した。
+コンテナ貸出を行うサービスとして以下を実装した。
 
 - Web コンソール
 - Docker の操作
@@ -323,7 +309,7 @@
 
 ---
 
-# 改善点
+# 改善点 1/2
 
 - データの永続化
     - Singularity でデータの永続化はできるが, Docker や Kubernetes のコンテナでは永続化ができない
@@ -332,14 +318,25 @@
     - Docker イメージ, Singularity イメージで容量を圧迫する可能性がある
     - 使用されていないイメージを削除するなどの対策が必要
     - Docker イメージのセキュリティ対策を考える必要
+
+---
+
+# 改善点 2/2
+
+- ネットワーク
+    - コンテナのサービスにアクセスには, ブレードサーバの IP とポート番号となる
+    - コンテナごとに IP アドレスを設定する
+    - Docker コンテナでは
+        - pipework
+    - Kubernetes のコンテナでは
+        - MetalLB
 - リソースの占有
     - ユーザごとにリソースの制限
     - GPU などをジョブスケジューラで管理する
-
 ---
 
 # まとめ
 
 - 本コースで利用する新規サービスの設計と実装, また本コースで利用しているサービスとの比較を行った
-- 学生がコンテナ技術を用いて学習環境を利用できるサービスの実装をすることができた
-- 今後テスト環境にデプロイを行い, ユーザやシステム管理チームからのフィードバックをもらい, 改善や実証実験を目指す
+- コンテナ技術を用いて学生が利用できる学習環境を提供するサービスの実装をすることができた
+- 今後テスト環境にデプロイを行い, ユーザや管理者からのフィードバックをもらい, 改善や実証実験を目指す