LoginSignup
8
3

More than 5 years have passed since last update.

【IBM Cloud k8s検証メモ】二つ以上の永続ストレージを識別してマウント

Last updated at Posted at 2017-09-27

Bluemix-k8s のドキュメントでは、PersistentVolume と PersistentVolumeClaim の対応づけは、Capacityを同じとしか記述されておらず(2017/9/25現在)、それでは、20Giのパフォーマンス・ストレージが2つ存在すると、対応づけは運任せになってしまう。 例えば、こんな感じです。 mysql-claim1 と mysql-pv1 を対応付けたいのですが、mysql-claim1 と mysql-pv2 がボンドされてしまいました。

$ kubectl get pvc
NAME           STATUS    VOLUME      CAPACITY   ACCESSMODES   AGE
mysql-claim1   Bound     mysql-pv2   20Gi       RWX           16s
mysql-claim2   Bound     mysql-pv1   20Gi       RWX           5s

これでは使えないので、確実に目的のPersistentVolume と Claimを意図した様に確実に結びつける方法についてのメモです。

対策 selector 利用

次の例の様に、永続ボリュームの設定で、 metadata の下に、labels: を追加して、name: pv1 を設定します。

s01_PersistentVol.yml
apiVersion: v1
kind: PersistentVolume
metadata:
 name: mysql-pv1
 labels:
  name: pv1
spec:
 capacity:
   storage: "20Gi"
 accessModes:
   - ReadWriteMany
 nfs:
   server: "fsf-dal1001c-fz.adn.networklayer.com"
   path: "/IBM02SV289550_2/data01"

そして、spec: 下に selector: を追加して、matchLabels: に name: pv1 を設定します。 これで、labelが一致したものが対応する様になります。

s03_PersistentVolClaim.yml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
 name: mysql-claim1
 annotations:
   volume.beta.kubernetes.io/storage-class: ""
spec:
 accessModes:
   - ReadWriteMany
 resources:
   requests:
     storage: "20Gi"
 selector:
    matchLabels:
      name: pv1

これで、以下の例の様に、思い通りに、結びつけられる様になります。

$ kubectl apply -f s01_PersistentVol.yml
persistentvolume "mysql-pv1" created
$ kubectl apply -f s02_PersistentVol.yml
persistentvolume "mysql-pv2" created
$ kubectl apply -f s03_PersistentVolClaim.yml
persistentvolumeclaim "mysql-claim1" created
$ kubectl get pv
NAME        CAPACITY   ACCESSMODES   RECLAIMPOLICY   STATUS      CLAIM                  REASON    AGE
mysql-pv1   20Gi       RWX           Retain          Bound       default/mysql-claim1             20s
mysql-pv2   20Gi       RWX           Retain          Available                                    13s
$ kubectl get pvc
NAME           STATUS    VOLUME      CAPACITY   ACCESSMODES   AGE
mysql-claim1   Bound     mysql-pv1   20Gi       RWX           10s

意図した対応づけになりました。

$ kubectl get pvc
NAME           STATUS    VOLUME      CAPACITY   ACCESSMODES   AGE
mysql-claim1   Bound     mysql-pv1   20Gi       RWX           1m
mysql-claim2   Bound     mysql-pv2   20Gi       RWX           16s

簡単ですが、以上です。

参考資料

(1) https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistent-volumes
(2) https://kubernetes.io/docs/concepts/storage/persistent-volumes/#persistentvolumeclaims

8
3
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
3