シナリオ(実際に手元で必要になった状況)
オープンソースのツールをhelmチャートを使用して導入しようとしている。helmを使用して導入したところいくつかの Persistent Volume Claim(PVC)が同じような条件(サイズ、ポリシー)で作られた。ただ対応するPVが存在していないので、バインド待ちの状況となっている。
- namespace
- pvc-namespace
- persistent volume claim
- pvc-a : 10 GiB, RWO
- pvc-b : 10 GiB, RWO
Persistent Volume(PV)を作成したいが普通に作ってしまうとどのPVCにバインドされるかわからない。あらかじめバインド対象のPVCを明示する形でPVを作成したい。
方法
Persistent Volumeを作成するときの定義ファイルにclaimRef属性を追加して、対象の PVC の namespace および name を記載してしまう。そうするとPVの作成時に該当するnamespaceおよびnameのPVCを探してすぐにBindしてくれる。
kubectl create -f pv-a.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-a
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
claimRef:
namespace: pvc-namespace
name: pvc-a
nfs:
path: /nfspath/pv-a
server: nfshost.domain
IBM Cloud Private のUIから作成する場合
Persistent Volume 作成のダイアログで主要なパラメータを指定した後で「JSONモード」をOnにしてclaimRef属性を手でjsonに追加することで同じことができる。
{
"apiVersion": "v1",
"kind": "PersistentVolume",
"metadata": {
"name": "pv-a"
},
"spec": {
"capacity": {
"storage": "10Gi"
},
"nfs": {
"path": "/nfspath/pv-a",
"server": "nfshost.domain"
},
"accessModes": [
"ReadWriteOnce"
],
"claimRef": {
"kind": "PersistentVolumeClaim",
"namespace": "pvc-namespace",
"name": "pvc-a"
},
"persistentVolumeReclaimPolicy": "Retain"
}
}
環境
kubernetes 1.4 以降
参考リンク
Stackoverflow QA
Can a PVC be bound to a specific PV?
Kubernetes issue
[pv/pvc pre-binding fixes #24682]
(https://github.com/kubernetes/kubernetes/pull/24682)