Namespace 間でファイルストレージを共有する
PFCP で提供されている 2 種類の永続ストレージのうち、 ファイルストレージについては組織内に作成された複数のネームスペースにまたがる複数の Pod から同時に読み書き可能です。
ファイルストレージの共有
Kubernetes における従来通りのファイルストレージは PersistentVolumeClaim リソース(以下 PVC)が作成されたネームスペースからのみ読み書きできるように アクセス範囲が制限されています。 PFCP では、同じ組織内のネームスペースであれば PVC が作成されたのとは異なるネームスペースからでも読み書きできるように ファイルストレージを共有する機能1が提供されています。
以下では、同じ組織内のネームスペースをまたいでファイルストレージを共有する方法を説明します。
ステップ 1. 共有元のネームスペースで PVC を作成する
説明のために例として作成する PVC の名前を pvc1
、
ファイルストレージを提供する側のネームスペースを org-example--namespace1
、
pvc1
の提供を受けて利用する側のネームスペースを 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
- 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
ステップ 4. 通常の PVC と同じように利用する
通常の PVC と同様にして Pod にマウントしてファイルストレージとして利用します。
共有ファイルストレージの削除
複数のネームスペースで共有されているファイルストレージであっても削除の順番に特別な注意を払う必要はありません。 必要のなくなったネームスペースから PVC を通常の方法で削除してください。 どのネームスペースからも共有ファイルストレージが参照されていないことを検知するとシステムによってボリュームが削除されます。