読者です 読者をやめる 読者になる 読者になる

Kubernetsに出てくる用語:PVCとは?

PVCとは?

KubernetesのPersistentVolumeClaimsの略である。 https://kubernetes.io/docs/user-guide/persistent-volumes/#persistentvolumeclaims

A persistentVolumeClaim volume is used to mount a PersistentVolume into a pod. PersistentVolumes are a way for users to “claim” durable storage (such as a GCE PersistentDisk or an iSCSI volume) without knowing the details of the particular cloud environment.

KubernetesのVolume

まず、PVCを理解するには、そもそもkubernetesにはVolumeという概念があることを知らないといけない。 https://kubernetes.io/docs/concepts/storage/volumes/ Volumeはdockerの-vでvolumeをマウントするような感じで、色々なVolume typeをサポートしていて、例として、nodeのDiskを利用してpodが削除されたら一緒に消えるemptyDir、GCEのpersistent diskを利用するgcePersistentDiskAWSのEBSを利用するawsElasticBlockStore、gitのrepositoryを利用するgitRepoなどがある。

例えば、volume typeでGCPgcePersistentDiskを利用したければ、先にgcloudコマンドなどでGoogle persistent diskを作成しておいて、このvolume typeでgcePersistentDiskを指定してあげるという流れになるが、それをkubernetesがdiskも作成してくれるという方法がある。

PersistentVolume

それがPersistentVolumeという仕組み。podと同じような感じでyamlで記述できて、容量(10GB)とか、読み書き権限とか、どこのプロバイダーで作るかみたいなものを記述する。こんな感じ。kindがPersistentVolume

  apiVersion: v1
  kind: PersistentVolume
  metadata:
    name: pv0003
  spec:
    capacity:
      storage: 5Gi
    accessModes:
      - ReadWriteOnce
    persistentVolumeReclaimPolicy: Recycle
    storageClassName: slow
    nfs:
      path: /tmp
      server: 172.17.0.2

やっとPersistentVolumeClaimsにたどり着いた

でも、PersistentVolumeだと容量を動的に変えたいとか、GCPじゃなくてAWSにやっぱり作りたいとかそもそもいらない、みたいな感じで動的に作成することはできない。 そのためにあるのが、PersistentVolumeClaimsです。これは最近できた?やつっぽくて、StorageClassGCPとかAWSとか指定しておけば、あとは、設定値とかで必要になったタイミングで作成してくるというもの。

Deisの場合、install時にあるcomponentをcluster外に自分で作るか、cluster内に作ってもらうか選べる。そんなときに、PersistentVolumeClaimsで指定しておけば、ユーザーがcluster内にあるcomponetをたてたい、しかも、diskをpersistentしたいってときに、動的にサイズを指定しつつそのproviderにあったディスクをたて、mountまでしてくれるというもの。

なので、多分、podのmountのとこに、volumeType: PersistentVolumeClaimsみたいに書いてあるはず。

claimは苦情をつける、注文をつけるみたいな意味なので、Persistent Volumeを注文するみたいな風にとらえればよい。

まとめ

何か分からない用語が出てくると、deisの概念なのか、kubernetesの概念なのか、GCPの概念なのかで小一時間理解に時間がかかる:joy: