0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Kubernetes でのストレージ管理

Posted at

ストレージ管理

PersistentVolume サブシステムは、ストレージが何から提供されているか、どのように消費されているかをユーザ・管理者から抽象化する API を提供しています。
本記事では、次の 3 点について述べています。

  • PersistentVolume (PV)
  • PersistentVolumeClaim (PVC)
  • StorageClass

参考: ボリューム

Pod を起動するときに、使用する Volume を以下のようにして設定することができます。

apiVersion: v1
kind: Pod
metadata:
  name: test-pod
spec:
  containers:
  - image: registry.k8s.io/test-webapp
    name: test-container
    volumeMounts:
    - mountPath: /test-pd # コンテナ内でのマウントするパス
      name: test-volume # マウントする先となる volume の名前
  volumes:
  - name: test-volume # volume の名前
    .... # volume の設定

ボリュームの設定や詳細については、次のドキュメントを参照ください。

永続ボリューム

永続ボリュームは、ストレージクラスを使って、動的にプロビジョニングされるクラスタのストレージの一部です。
永続ボリュームは次のような YAML ファイルで定義することができます。

apiVersion: v1
kind: PersistentVolume
metadata:
  name: local-pv
  labels:
    type: local
spec:
  storageClassName: "" # 指定しない場合は、空の文字列を明示的に指定してください
  capacity:
    storage: 50Mi
  accessModes:
    - ReadWriteOnce

上記のような YAML ファイルを作成し、次のコマンドで適用してください。

$ kubectl apply -f local-pv.yaml
$ kubectl get pv
NAME      CAPACITY   ACCESS MODES   RECLAIM POLICY   STATUS      CLAIM     STORAGECLASS   REASON    AGE
local-pv  50Mi       RWO            Retain           Available             manual                   14s

永続ボリュームクレーム

永続ボリュームクレームは、ユーザによって要求されるストレージであり、PV リソースを消費します。永続ボリュームクレームをクラスタ内の一致する永続ボリュームにバインドすることができます。ただし、永続ボリュームクレーンを、特定の永続ボリュームにバインドする場合、それらを事前にバインドする必要があります。
永続ボリュームクレームは、次のような YAML ファイルで定義することができます。

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: local-pvc
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 8Gi
  storageClassName: "" # 指定しない場合は、空の文字列を明示的に指定してください

上記のように作成した YAML ファイルを、次のコマンドで適用してください。

$ kubectl apply -f local-pvc.yaml
$ kubectl get pv
NAME        STATUS    VOLUME        CAPACITY   ACCESS MODES   STORAGECLASS   AGE
local-pvc   Bound     ....          50Mi       RWO                           1m

注意

次のような場合、STATUS が Bound とならない (Pending のままになる) ため、ご注意ください。

  • ACCESS Mode が PV と一致しない
  • STORAGE Class が PV と一致しない
  • この PVC を使用する Pod が存在しない

PVC を Pod で利用する場合、次のように YAML ファイル内で設定してください。

apiVersion: v1
kind: Pod
metadata:
  name: mypod
spec:
  containers:
    - name: myfrontend
      image: nginx
      volumeMounts:
      - mountPath: "/var/www/html" # コンテナ内のマウントするパス
        name: mypd # volume の名前
  volumes:
    - name: mypd
      persistentVolumeClaim:
        claimName: local-pvc

ストレージクラス

ストレージクラスに属している永続ボリュームを動的にプロビジョニングする場合に使用される provisi oner, parameters, reclaimpolicy が含まれています。
ストレージクラスは次のような YAML ファイルで定義できます。

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: storage-class-test
  annotations:
    storageclass.kubernetes.io/is-default-class: "false"
provisioner: csi-driver.example-vendor.example
volumeBindingMode: WaitForFirstConsumer

上記のような YAML ファイルを、次のコマンドで設定してください。

$ kubectl apply -f storage-class-test.yaml

このように、定義したストレージクラスは、PV, PVC などで指定することができます。
動的なプロビジョニングがサポートされていない環境では、provisioner には、kubernetes.io/no-provisioner を指定してください。

参考

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?