(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【OpenShift】oc set volumesでPVCをDeploymentに付与する動き

スポンサーリンク

はじめに

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コマンドを実機で確認した結果でした。