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を利用するgcePersistentDisk
、AWSのEBSを利用するawsElasticBlockStore
、gitのrepositoryを利用するgitRepo
などがある。
例えば、volume typeでGCPのgcePersistentDisk
を利用したければ、先に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
です。これは最近できた?やつっぽくて、StorageClass
でGCPとかAWSとか指定しておけば、あとは、設定値とかで必要になったタイミングで作成してくるというもの。
Deisの場合、install時にあるcomponentをcluster外に自分で作るか、cluster内に作ってもらうか選べる。そんなときに、PersistentVolumeClaims
で指定しておけば、ユーザーがcluster内にあるcomponetをたてたい、しかも、diskをpersistentしたいってときに、動的にサイズを指定しつつそのproviderにあったディスクをたて、mountまでしてくれるというもの。
なので、多分、podのmountのとこに、volumeType: PersistentVolumeClaims
みたいに書いてあるはず。
claimは苦情をつける、注文をつけるみたいな意味なので、Persistent Volumeを注文するみたいな風にとらえればよい。
まとめ
何か分からない用語が出てくると、deisの概念なのか、kubernetesの概念なのか、GCPの概念なのかで小一時間理解に時間がかかる:joy: