NFS ボリュームを使ってみる

Kf は、kf marketplace を使用した NFS ボリュームのマウントをサポートしています。

前提条件

  1. NFS プラットフォームの設定を完了している

NFS サービス インスタンスを作成する

kf marketplace を実行して、使用可能なサービスを確認します。プラットフォームで NFS が有効になっている場合は、組み込みの NFS サービスがリストに表示されます。

Broker           Name  Namespace  Description
nfsvolumebroker  nfs              mount nfs shares

外部ファイル システムをマウントする

サービス インスタンスを作成する

既存の NFS サービスにマウントするには:

kf create-service nfs existing SERVICE-INSTANCE-NAME -c '{"share":"SERVER/SHARE", "capacity":"CAPACITY"}'

変数を実際の値に置き換えます。

  • SERVICE-INSTANCE-NAME は、この NFS ボリューム サービス インスタンスの名前です。
  • SERVER/SHARE は、サーバーと共有の NFS アドレスです。
  • CAPACITYKubernetes の数量形式を使用します。

サービスのリストに NFS ボリューム サービスが表示されていることを確認します。出力は次の例のようになります。

$ kf services
...
Listing services in Space: demo-space
Name                Type      ClassName         PlanName  Age    Ready  Reason
filestore-nfs       volume    nfs               existing  6s     True   <nil>
...

サービス インスタンスをアプリにバインドする

NFS サービス インスタンスをアプリにバインドするには、次のコマンドを実行します。

kf bind-service YOUR-APP-NAME SERVICE-NAME -c '{"uid":"2000","gid":"2000","mount":"MOUNT-PATH","readonly":true}'

変数を実際の値に置き換えます。

  • YOUR-APP-NAME は、ボリューム サービスを使用するアプリの名前です。

  • SERVICE-NAME は、前のステップで作成したボリューム サービス インスタンスの名前です。

  • uid:UIDgid:GID には、マウント共有のディレクトリ権限を指定します。

  • MOUNT-PATH は、アプリ内にマウントする必要があるボリュームのパスです。

  • (省略可)"readonly":true は、読み取り専用マウントを作成するオプションの JSON 文字列です。デフォルトでは、ボリューム サービスは読み取り / 書き込みファイル システムをマウントします。

kf bindings コマンドを使用すると、Space 内のすべてのバインディングを一覧表示できます。出力は次の例のようになります。

$ kf bindings
...
Listing bindings in Space: demo-space
Name                                     App           Service             Age  Ready
binding-spring-music-filestore-nfs       spring-music  filestore-nfs       71s  True
...

アプリからボリューム サービスにアクセスする

アプリからボリューム サービスにアクセスするには、コードで使用するファイルパスを確認する必要があります。ファイルパスは、アプリの環境変数に表示されるサービス バインディングの詳細で確認できます。

アプリの環境変数を表示します。

kf vcap-services YOUR-APP-NAME

YOUR-APP-NAME は、アプリの名前に置き換えます。

kf vcap-services コマンドの出力例は次のとおりです。

kf vcap-services *YOUR-APP-NAME*
{
  "nfs": [
    {
      "instance_name": "nfs-instance",
      "name": "nfs-instance",
      "label": "nfs",
      "tags": [],
      "plan": "existing",
      "credentials": {
        "capacity": "1Gi",
        "gid": 2000,
        "mount": "/test/mount",
        "share": "10.91.208.210/test",
        "uid": 2000
      },
      "volume_mounts": [
        {
          "container_dir": "/test/mount",
          "device_type": "shared",
          "mode": "rw"
        }
      ]
    }
  ]
}

アプリで必要な情報には、volume_mounts にあるプロパティを使用します。

プロパティ 説明
container_dir アプリにバインドしたマウント ボリュームのパスを含む文字列。
device_type NFS ボリュームのリリース。現在のところ、共有デバイスのみに対応しています。共有デバイスは、すべてのアプリ インスタンスを同時にマウントできる分散ファイル システムを表します。
mode アプリが NFS に対してどのようなタイプのアクセスを行っているかを示す文字列。ro(読み取り専用)または rw(読み取りと書き込み)のいずれかになります。