RancherにはボリュームプラグインとしてNFSをマウントする機能がある、というのはちょっと調べれば出てくる話ですが、肝心の使い方に触れた記事ってあんまり無いようなので、書いておこうと思います。
rancher-nfsとは?
dockerでコンテナを作るときに、任意のディレクトリをコンテナにマウントすることができますが、「ボリュームプラグイン」を使うことでローカルディレクトリ以外のものもマウントできるようになります。
rancher-nfsはNFSをマウント可能にするボリュームプラグインですが、RancherのUIから設定できて、クラスタ全体で同じ設定を共有できるので、HighAvailabilityなコンテナを作成するときに向いていたりします。
インストール
せっかくなので、インストールから設定まで、すべてRancherのUIでやってしまいましょう。
まず、カタログからrancher-nfsをインストールします。
- NFS Server
- デフォルトのNFSサーバーを指定します。
ボリュームを自動作成するときに使われます。
この記事の運用パターンではボリュームごとに接続先を指定しますので、ここでは適当に入れてかまいません。 - Export Base Directory
- ボリュームを自動作成するときの、ベースディレクトリです。
NFS Serverで指定したサーバで、このディレクトリをExportして、書き込み可能にしておくと、この下に自動的にディレクトリが作られたりします。 - Mount Options
- mountコマンドで指定するオプションです。省略可
- NFS Version
- 環境に合わせて3か4を選んでください。だいたいは4で大丈夫だと思います。
- On Remove
-
これがわかりません!
retainは残すという意味で、purgeは捨てるという意味なので、怖いからretainを選んでいます。
これでインストールすると、Rancherのクラスタの全hostにnfs-driverがdeployされます。
このnfs-driverはprivilegedで、/var/lib/rancher/volumes
をマウントしています。
/var/lib/rancher/volumes
の下に指定されたNFSサーバのディレクトリをマウントし、そのマウント先をまた別のコンテナがマウントして使う仕組みになっています。
なので、コンテナはNFSクライアントをインストールする必要も、privilegedな権限も必要ありません。
ボリュームを定義する
コンテナでマウントするためには、rancher-nfsにボリュームを作ってもらわなければなりません。
それを自動化してくれるのが、RancherのStorage Driverです。
実際に作ってみましょう。
Storage画面へ行ってください。
すると、rancher-nfsの表記があると思います。
Add Volumeをクリックすると、新規にボリュームを定義することができます。
NameとDescriptionは読んで字のごとくですが、この記事のキモはDriver Optionsです。
Driver Optionsにhost
とexport
を定義することで、ボリュームごとに、任意のNFSサーバ、任意のディレクトリを指定することができます。
コンテナにマウントする
マウントするほうは、通常通りローカルディレクトリをマウントするのと同じ画面で、さきほど作ったボリュームの名前を指定します。
ここで、ボリュームに定義されていない、/
から始まるフルパスを指定すると、rancher-nfsを経由せずにhostのローカルディレクトリもマウントできます。
rancher-nfsとlocalは併用可能です。
これで、コンテナがどこのhostに移動しても大丈夫な、HighAvailabilityなコンテナに一歩近づきました。