仮想化通信

日本仮想化技術株式会社の公式エンジニアブログ

RancherOS + RancherでNvidia Dockerホストを使ってみた(前編・構築編)

RancherOS + RancherでNvidia Dockerホストを使ってみました。

これまでの検証でコンテナーでGPUを使うことはできるようになったものの、もう少しわかりやすくコンテナーを管理できないかなと思いRancherOSとRancherを使ったら割と便利だったので、ブログにまとめてみようと思いました。

インストールから利用まで書くとだいぶ長くなりそうですので、前後編に分けます。今回は前編の構築編です。 インストール手順に入る前に、ざっと今回使うソフトウェアについて解説します。

RancherOSとは

RancherOSとはRancher Labが開発、提供しているコンテナーを動かすためのシンプルなOSです。色々なサービスがコンテナー上で動きます。 RancherOSはシステムコンテナーとユーザーコンテナーに分かれており、ユーザーがアプリケーションを動かすのに使うのはユーザーコンテナーになります。

インストールに必要な設定はYAMLに書いて、コマンド一発でインストールが完了します。

Rancherとは

RancherはRancher Labが開発、提供している、アプリケーションのデプロイ、コンテナー、コンテナーホストをWebインターフェイスや専用のコマンドラインツールを使って管理するできるソフトウェアです。

Nvidia Dockerとは

Nvidia DockerはNvidia GPUをDockerで活用して、コンテナーのパフォーマンスを上げたりすることができるコンテナーランタイムライブラリーとユーティリティです。

インストール開始

それでは早速インストールしたいと思います。

RancherOSをインストール

Rancherを動かすため、RancherOSをインストールします。 インストール方法については公式のドキュメントがありますので詳細は割愛します。

IPアドレスは固定のものを割り当ててください。

f:id:virtualtech:20190827172805p:plain

Rancherをデプロイ

RancherOSのセットアップが終わったら、Rancherをデプロイしましょう。 今回はKubernetesではなくNvidia Dockerを使うことが目的なので、Rancher 2.xではなくRancher 1.6.xを利用します。

RancherOS 1.5.xの場合、コマンド一発でRancher 1.6.xを起動できます(もちろん、Rancher自体はDockerのイメージがあるので、イメージを使ってdocker runでも動かすことはできます)。

一行目はサービスの有効化、二行目の方がサービスの起動です。

$ sudo ros service enable rancher-server
$ sudo ros service up rancher-server

少々デプロイには時間がかかります。次のコマンドを実行して正常にサービスが稼働しているか確認します。 Rancher 1.6.xではTCPポートの8080番を使って通信するため、ポートが開いていることを確認します。

$ sudo ros service list|grep enable
enabled  rancher-server
$ ss -natu |grep 8080
tcp    LISTEN     0      128      :::8080                 :::* 

これでGPUコンテナー環境を管理する側のRancherOSとRancherの環境のセットアップは終了です。 RancherOSホストのIPアドレスの8080ポートにブラウザーでアクセスすると、RancherのWebインターフェイスにアクセスできます。

f:id:virtualtech:20190827173728p:plain

デフォルトのままだと認証せずにアクセスできてしまうので、上部メニューの「ADMIN > Access Control」からなんらかの方法でユーザー認証するように構成してください。特に該当するものがなければ「ローカル認証」を設定し、ユーザーとパスワードを入力することで、次回ログイン時にそのユーザーでRancherにログインできます。

GPUコンテナーホストの用意

次にGPUコンテナーホストを用意します。次の要件にマッチしたOSが必要です。今回はMAASを使ってUbuntu 18.04.3を用意することにしました。このホストには事前にNVIDIAのGPUを接続しておく必要があります。

インストール方法は公式のドキュメントもありますし、難しくはないのでざっとやることをまとめると...

Ubuntu 18.04.3の場合

  • CUDA Toolkit 10.1 Update 2のパッケージリポジトリーを有効にする
  • cuda-drivers と依存するパッケージを一通りインストール
  • Nvidia Dockerのパッケージリポジトリーを有効にする
  • nvidia-docker2 とDockerをインストールする

Docker 19.03以降の場合は nvidia-docker2 ではなく nvidia-container-toolkit をインストールします。 今回はUbuntu Archive版のdocker.io (2019/08/26現在は18.09ベース)をインストールするため、nvidia-docker2の方をインストールする必要があります。次のようにパッケージをインストールしました。

$ sudo apt-get update 
$ sudo apt-get install -y docker.io
$ sudo apt-get install -y nvidia-docker2
$ sudo systemctl restart docker

インストール後は一旦再起動します。 再起動後に次のようにコマンドを実行して、コンテナー内でnvidia-smiコマンドの結果が出ることを確認します。

結果が出力されれば、コンテナーでGPUを使うための環境は準備完了です。

% sudo docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi

前編は以上です。 後編ではこのGPUコンテナーホストをRancherのノードとして登録し、アプリケーションをいろいろ実行してみたいと思います。