はじめに
KubernetesでもPVCはありますが、以下のようにPod側のYAMLにて宣言型で利用するのが一般的です。
一方でOpenshiftでは手続き型のように$ oc set volume object_selection operation mandatory_parameters optional_parameters
という構文でボリュームをPodに付与できます。
本記事ではそのコマンドが具体的にどのようなYAMLを生成しているのか実際に確認しました。
環境情報
- OpenShift Container Platform 4
事前準備
デプロイメントは既に準備済なものとします。
例えば以下のようにPostgreSQLのデプロイメントがあったとして、同Podが再起動した場合もデータを永続的に利用できるようにします。
$ oc get all NAME READY STATUS RESTARTS AGE pod/postgres-855df64784-55x4v 1/1 Running 0 xs NAME READY UP-TO-DATE AVAILABLE AGE deployment.apps/postgres 1/1 1 1 xs NAME DESIRED CURRENT READY AGE replicaset.apps/postgres-6489d595b7 0 0 0 19s replicaset.apps/postgres-855df64784 1 1 1 18s NAME IMAGE REPOSITORY TAGS UPDATED imagestream.image.openshift.io/postgresql xx
それを実現するコマンドは以下ですがその動きを補足します。
$ oc set volumes deployment/postgres --add --name postgres-storage --type pvc --claim-class xx --claim-mode rwo --claim-size 1Gi --mount-path /var/lib/pgsql --claim-name postgres-storage
oc set volumesコマンド
deployment/postgres部分でボリュームをつけるリソースを指定してオペレーションの--add
を記載(削除はremove
します。また、--class
ではPVを作成する際のストレージクラスを指定しています。--name
はPV、--claim-name
はPVC名です。
上記コマンドをYAMLに吐き出すと、以下のように既に作成されているDeploymentにVolumesを付与したものと
apiVersion: apps/v1 kind: Deployment metadata: annotations: .... volumes: - name: postgres-storage persistentVolumeClaim: claimName: postgres-storage ...
PVCに相当する部分が記載されています。
apiVersion: v1 kind: PersistentVolumeClaim metadata: annotations: volume.beta.kubernetes.io/storage-class: xx creationTimestamp: null name: postgres-storage spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi status: {}
コマンドを実行するか同YAMLを適用するとPVCの要求に沿って以下のPVがリソースとして新規作成されます。
$ oc get pv NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE pvc-71b62147-a2b8-436b-b2b5-f058020d3e45 1Gi RWO Delete Bound xx/postgres-storage xx xxs
ちなみにPVC情報も表示すると以下のようにBoundされていることが確認できます。
$ oc get pvc NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE postgres-storage Bound pvc-71b62147-a2b8-436b-b2b5-f058020d3e45 1Gi RWO xx xs
終わりに
今回はPVCを利用しましたがボリュームソースを指定しなければemptyDirとなるのでご注意ください。
以上、Openshiftにおけるset volumeコマンドを実機で確認した結果でした。