docker, kubernetesとの関係

docker

dockerは、コンテナの一種です。コンテナは、プロセスを用いて実現される仮想環境です。通常のプロセスは、システムごとにファイルや通信に関する資源を共有していますが、コンテナでは、プロセスごとに独立したファイルや通信資源が用意されていることが異なります。これによって、コンテナはそれぞれ高い独立性を持った仮想化機構として利用することができるようになります。ファイルシステムを丸ごと持っているので、あらかじめ必要なソフトウェアをインストールしたファイルシステムイメージを使用し、実行環境に依存することなく、どのサーバ上でも確実にソフトウェアを実行することが可能になります。これは、アプリケーションの構造が複雑化している現在、きわめて大きな利点であると言えます。

docker環境は、各OSで簡単にインストールが行えるようになっています。MAGIプロジェクトでは、Windows上に、WSLを用いてインストールされたdocker desktopを標準的な環境として利用しています。

dockerを構成するファイルシステムの初期イメージは、docker imageの形式で、レポジトリに保存されます。レポジトリは、自ノードのみのプライベートレポジトリと、共有するための共有レポジトリがあります。プライベートレポジトリは、docker desktopに最初から含まれています。共有レポジトリとしてはdocker社が運用するDocker Hubが著名ですが、これとは別に、自前で共有レポジトリを運用することも可能です。

dockerを利用するためには、Docker fileの記述方法を知っている必要がありまが、その他の処理は、VSCodeのcloud codeプラグインが自動的に実施してくれます。

kubernetes

一つのアプリケーションシステムで実行されるコンテナの数が増えると、それらを組み合わせて、全体として信頼できる形式で実行することが難しくなってきます。kubernetesは、このような複雑なシステムを構築、運用することを支援することを目的としたミドルウェアです。以下のような資源を定義し、その組み合わせでシステムを運用します。

  • Pod
  • Deployment
  • Service
  • Ingress

kubernetes(長いので、k8sと略記されます)は、当初はインターネット向けのWebサーバの構築が主な利用目的ですが、その特徴を生かすと、より広い利用が可能になります。

MAGIとdocker

MAGIは、kubernetes上で動作し、いろいろなdockerを簡単に実行できるようにしているシステム基盤です。MAGI固有のアプリケーションはなく、何でも実行できますが、標準的な利用のために、以下のようなdockerをあらかじめ用意しています。もちろん、ここにない以下のようなdockerを利用することも可能です。

  • ROS関連のdocker
  • 階層的強化学習を実行するためのdocker

MAGIは、特に、人工知能、および、IoTアプリケーションへの適用を試みたものです。人工知能プログラムでは、Python等で記述された多種の深層学習系が使用されます。これは、もちろん、内部のプログラムによって異なるふるまいをしますが、それだけでなく、学習後のネットワークの構造によっても大きくふるまいがことなります。このような深層学習系を、保存したり、他の開発者、研究者と共有したりするためには、プログラムとデータを一体にして保存し、再利用する機構が必要になります。そのような目的には、コンテナはうってつけです。将来的には、コンテナの形式で深層学習系を多数集め、一種のデータベースを構成し、ロボットが置かれた環境の変化に応じた多様な対応をとるようなことが行えるようになると考えられます。また、複雑なロボットの制御系を階層的に集められた強化学習の集まりで体系的に構成することも行われるようになると予想されます。

まとめ

MAGIを利用するためには、docker, k8sに関する知識に応じて、以下の3段階のやり方が考えられます。利用目的に合わせて使い分けてください

  1. まったく知識なし
    docker, k8sに関する知識がまったくなくてもMAGIを利用することが可能です。その場合は、Web経由で利用します。たとえば、MAGIからJupyterを起動すると、ブラウザを用いてPythonプログラムの作成が可能になります。さらに、そこでは、簡単なAPIを使ってROS環境を呼び出すことができます。これによって、pythonのプログラムからROSによる自律移動ロボットの移動を制御することが可能です。ROSによる自律移動ロボットの標準はTurtlebot3ですが、自分でロボットを制作する方法についても公開してゆきます。GazeboシミュレータもMAGIが自動的に起動するので、特に設定なしで利用できます。
  2. docker desktop + VSCode cloud codeを使用
    自分で新たなdocker imageを作成することも可能です。前提として、dockerに関するある程度の知識が必要になります。たとえばWindows環境では、docker desktopとVSCodeのインストールが必要になります。VSCodeのcloud codeプラグインの解説を参照すると、短時間でdockerを実行できるようになります。そこでは、VSCodeのリモートデバッグ機能を生かしたまま、dockerのプログラミングが可能になりますので、通常のプログラミング環境に近い環境による開発が可能です。作成したdocker imageは、MAGI上で簡単な定義ファイルを作成することによって、MAGIから利用できるようになります。このためには、特に、cloud codeの利用に関する知識、および、リポジトリの利用方法について知っている必要があります。
  3. OpenVPNを使用
    k8sの環境とローカル環境をOpenVPNで接続すると、MAGI上のコンテナと連携させながら、ローカル環境上のコンテナ化されていないロボットプログラムや人工知能プログラムを開発することが可能になります。このためには、特にネットワーク環境に関して、ある程度のシステム知識が必要になります。