Kubernetesにおけるストレージ
こんにちわ
がじぇったー (@hackmylife7) | Twitter
です。ガジェット情報をいち早くツイートすることを生きがいにしているのでよかったらフォローください。
今日はk8sのストレージについてです。
TL;DR(要約)
- 基本的にPersistentVolumeを使うことが多いと思うので、Dynamic volume provisioningでのPersistent Volumeの自動作成手法を抑える
Volumeの種類
以下3つの観点で抑える
- エフェメラル(一時ストレージ): データの永続性は保証されない。コンテナが作成されると同時に作成され、コンテナが終了する時に削除される。コンテナが消失した場合、エフェメラルに保存されているデータは削除される
- ボリューム: Pod単位で使用されるボリューム。コンテナがクラッシュしてもデータは残るが、Podが削除されるとそのボリュームに保存していたデータも失われる。
- 永続ボリューム(PersistentVolume):Podやコンテナのライフスタイルと紐づかない形でデータを保存するために使われる。実態としてはネットワークストレージ。クラスタ外に存在する。Podのライフサイクルには紐づかないので、Podを削除しても永続ボリュームは削除されない。
PersitantVolumeのマニフェストファイル
apiVersion: v1 kind: PersistentVolume ※ kindで指定 metadata: name: pv0003 spec: capacity: storage: 5Gi volumeMode: Filesystem accessModes: - ReadWriteOnce persistentVolumeReclaimPolicy: Recycle storageClassName: slow mountOptions: - hard - nfsvers=4.1 nfs: ※NWストレージの場所とマウントパスを指定 path: /tmp server: 172.17.0.2
Persistent Volume Claim
Persistent Volume Claimは永続化ストレージの要求を行うリソース。
PodとPersistent VolumeをBindするための設定がPersistent Volume Claim
(ストレージをどれくらいの容量、アクセスモードで使うか、マニフェストファイル内で記載し、要求する)
KubernetesのスケジューラははPersistant Volume Claimの定義をみてPodに対応するPersistent Volumeを探し、紐づける
マニフェストファイル
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: myclaim ※Podではこのmetadataを指定して紐づける spec: accessModes: - ReadWriteOnce volumeMode: Filesystem resources: requests: storage: 8Gi ※ストレージを8gくれ! storageClassName: slow selector: matchLabels: release: "stable" matchExpressions: - {key: environment, operator: In, values: [dev]}
Dynamic Volume Provisioning
Persistent Volume Claimの内容に基づいて、動的にPersistent Volumeを作成してくれるのがDynamic Volume Provisioningである
事前に別でPersistent Volumeを作成する必要がない
また、Storageのtype(ssdか標準HDか等)を指定することができる
使い方
Dynamic Volume Provisioningを使用するには事前にStorage Class Objectの定義が必要。これらがPersistent Volume Claimに渡すパラメータとなる
また、Storage Classはssd(高速永続ディスク)かpd-standard(標準永続ディスク)等、パラメータを指定することにより、どんなStorageが欲しいのか選ぶことができる
どの程度IOPSが必要かによる
これは標準永続ディスクの例
Storage Class :slow
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: slow provisioner: kubernetes.io/gce-pd parameters: type: pd-standard
これはSSDライクな永続ディスクである高速永続ディスクの例。
Storage Class :fast
apiVersion: storage.k8s.io/v1 kind: StorageClass metadata: name: fast provisioner: kubernetes.io/gce-pd parameters: type: pd-ssd
そしてPersistentVolumeClaimで、作成したストレージクラスを指定するとPersistentVolumeがプロビジョニング時に自動で作られる
apiVersion: v1 kind: PersistentVolumeClaim metadata: name: claim1 spec: accessModes: - ReadWriteOnce storageClassName: fast ←これ resources: requests: storage: 30Gi
参考(Kubernetesの最強参考書)
Kubernetes完全ガイド (impress top gear)
- 作者: 青山真也
- 出版社/メーカー: インプレス
- 発売日: 2018/09/21
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
Kubernetesの他の記事へは下記の一覧から飛べるようにしているので参照ください。