Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Namespace 間でファイルストレージを共有する

PFCP で提供されている 2 種類の永続ストレージのうち、 ファイルストレージについては組織内に作成された複数のネームスペースにまたがる複数の Pod から同時に読み書き可能です。

ファイルストレージの共有

Kubernetes における従来通りのファイルストレージは PersistentVolumeClaim リソース(以下 PVC)が作成されたネームスペースからのみ読み書きできるように アクセス範囲が制限されています。 PFCP では、同じ組織内のネームスペースであれば PVC が作成されたのとは異なるネームスペースからでも読み書きできるように ファイルストレージを共有する機能1が提供されています。

以下では、同じ組織内のネームスペースをまたいでファイルストレージを共有する方法を説明します。

ステップ 1. 共有元のネームスペースで PVC を作成する

説明のために例として作成する PVC の名前を pvc1 、 ファイルストレージを提供する側のネームスペースを org-example--namespace1pvc1 の提供を受けて利用する側のネームスペースを org-example--namespace2 とします。 まず始めにファイルストレージを提供する側のネームスペースで共有したい PVC に trident.netapp.io/shareToNamespace アノテーションを付与します。 このアノテーションに設定されたネームスペースからの共有アクセスが認められるようになります。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: pvc1
  namespace: org-example--namespace1
  annotations:
    trident.netapp.io/shareToNamespace: org-example--namespace2
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: standard-rwx-example
  resources:
    requests:
      storage: 100Gi

Info

  • PVCの共有先はカンマで区切ることで複数指定することができます。例:trident.netapp.io/shareToNamespace: org-example--namespace2,org-example--namespace3,org-example--namespace4
  • アスタリスク * を指定するとどのネームスペースからでもアクセスを許可することができます。例:trident.netapp.io/shareToNamespace: *
  • PVC の trident.netapp.io/shareToNamespace アノテーションはいつでも追加、変更できます2

ステップ 2. 共有先のネームスペースで TridentVolumeReference を作成する

ファイルストレージが共有される先のネームスペースにおいてカスタムリソース TridentVolumeReference を作成します。 ここに記述する内容でどのネームスペースのどの PVC を参照しようとしているのかをシステムに通知します。

TridentVolumeReference を作成するためには org-trident-edit という ClusterRole で定義されている権限を持つことが必要です。 PFCP の初期状態では組織管理者 org-admin の ClusterRole に対して RoleBinding により紐付けられています。 つまり、初期状態では TridentVolumeReference を作成できるのは組織管理者のみです。

この説明の例ではネームスペース org-example--namespace2 からネームスペース org-example--namespace1 で共有設定がされている PVC pvc1 を参照したいので以下のような記述になります。

apiVersion: trident.netapp.io/v1
kind: TridentVolumeReference
metadata:
  name: my-first-tvr
  namespace: org-example--namespace2
spec:
  pvcName: pvc1
  pvcNamespace: org-exapmle--namespace1

ステップ 3. 共有先のネームスペースで PVC を作成する

ファイルストレージが共有される先のネームスペースにおいて PVC を作成します。 このとき trident.netapp.io/shareFromPVC アノテーションを付与することでどのネームスペースのどの PVC を利用するのかを指定します。

この説明の例ではネームスペース org-example--namespace1 にある PVC pvc1 を共有したいので以下のような記述になります。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  annotations:
    trident.netapp.io/shareFromPVC: org-example--namespace1/pvc1
  name: pvc2
  namespace: org-example--namespace2
spec:
  accessModes:
    - ReadWriteMany
  storageClassName: standard-rwx-example
  resources:
    requests:
      storage: 100Gi

Info

共有先の PVC で指定するストレージのサイズに共有元の PVC のサイズを超える値を指定することはできません。

ステップ 4. 通常の PVC と同じように利用する

通常の PVC と同様にして Pod にマウントしてファイルストレージとして利用します。

共有ファイルストレージの削除

複数のネームスペースで共有されているファイルストレージであっても削除の順番に特別な注意を払う必要はありません。 必要のなくなったネームスペースから PVC を通常の方法で削除してください。 どのネームスペースからも共有ファイルストレージが参照されていないことを検知するとシステムによってボリュームが削除されます。

参考リンク


  1. Astra Trident の TridentVolumeReference を採用しています。

  2. 実際に共有アクセスが可能かどうかを評価するのは後述する共有する側の PVC を作成するタイミングになります。