LoginSignup
8
6

More than 5 years have passed since last update.

[Kubernetes] 特定のPVCに紐づけて後付けでPVを作成する方法

Last updated at Posted at 2018-09-03

シナリオ(実際に手元で必要になった状況)

オープンソースのツールを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してくれる。

shell
kubectl create -f pv-a.yaml
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に追加することで同じことができる。

pv-a.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

8
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
6