目的
KubernetesはPersistentVolumeClaimでStorageClassを指定することでPersistentVolumeの動的プロビジョニングを行うことができますが、そのためにはストレージ側の対応が必要になるといった環境面での制約があります。IBM Cloud Kubernetes Servicesはさすがにパブリッククラウドだけあって、クラウドのストレージサービスとの連携にももちろん対応しています。
というわけで、StorageClassを使った動的プロビジョニングを試してみます。
https://console.bluemix.net/docs/containers/cs_storage_file.html#file_storage
手順
組み込みStorageClassの確認
まずは確認。
$ kubectl get storageclasses
NAME PROVISIONER AGE
default ibm.io/ibmc-file 1h
ibmc-file-bronze (default) ibm.io/ibmc-file 1h
ibmc-file-custom ibm.io/ibmc-file 1h
ibmc-file-gold ibm.io/ibmc-file 1h
ibmc-file-retain-bronze ibm.io/ibmc-file 1h
ibmc-file-retain-custom ibm.io/ibmc-file 1h
ibmc-file-retain-gold ibm.io/ibmc-file 1h
ibmc-file-retain-silver ibm.io/ibmc-file 1h
ibmc-file-silver ibm.io/ibmc-file 1h
プラン別にStorageClassが用意されています。retainが付くものはReclaimPolicyがRetain、付かないものはDeleteになっています。
詳細を見てみます。
$ kubectl describe sc ibmc-file-bronze
Name: ibmc-file-bronze
IsDefaultClass: Yes
Annotations: kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"storage.k8s.io/v1","kind":"StorageClass
","metadata":{"annotations":{},"labels":{"kubernetes.io/cluster-service":"true"},"name":"ibmc-file-bronze","namespace":"
"},"parameters":{"billingType":"hourly","classVersion":"2","iopsPerGB":"2","sizeRange":"[20-12000]Gi","type":"Endurance"
},"provisioner":"ibm.io/ibmc-file","reclaimPolicy":"Delete"}
,storageclass.kubernetes.io/is-default-class=true
Provisioner: ibm.io/ibmc-file
Parameters: billingType=hourly,classVersion=2,iopsPerGB=2,sizeRange=[20-12000]Gi,type=Endurance
AllowVolumeExpansion: <unset>
MountOptions: <none>
ReclaimPolicy: Delete
VolumeBindingMode: Immediate
Events: <none>
PVCの作成
PersistentVolumeClaimを作成します。オーダーは最低20GBからです。
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: teruq-pvc
annotations:
volume.beta.kubernetes.io/storage-class: "ibmc-file-bronze"
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 20Gi
しばらく(数分?)待つとBoundになります。
$ kubectl apply -f pvc.yaml
persistentvolumeclaim/teruq-pvc created
$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
teruq-pvc Pending ibmc-file-bronze 9s
$ kubectl get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
teruq-pvc Bound pvc-707efff2-d77c-11e8-8ced-763e5a181f99 20Gi RWX ibmc-file-bronze 2m
ポータルからIBM Cloud File Storageを確認します。対応するストレージが作られていることがわかります。
PVCの削除
PVCを消します。
$ kubectl delete -f pvc.yaml
しばらく待つと、ポータルでストレージに削除マークがつきます。
クラウドとしては当たり前なんですが、当たり前のことが出来てうれしいです。
参考)PVCの削除とFile Storageの関係
- ReclaimPolicyがDeleteの場合、PVCを削除するとFile Storageの許可ホストからIKSのアドレスが削除される(誰もアクセスできない状態になる)、そしてしばらく待つと削除される
- ReclaimPolicyがRetainの場合、PVCを削除してもFile Storageは残る、許可ホストもIKSのアドレスが設定されたままになる(つまり、手動での削除をしないと残り続けて課金される)