概要
PV(PersistentVolume)とPVC(PersistentVolumeClaim)を利用したストレージの使用方法を紹介します。
PV、PVCの紹介
PersistentVolume(PV)は、管理者がプロビジョニングしたか、StorageClassを使用して動的にプロビジョニングされたクラスターのストレージです。
PersistentVolumeClaim(PVC)は、ユーザーがストレージを要求するもので、PVをリソースとして使用します。
ストレージの種類
ブロックストレージ
Access Modesで「ReadWriteOne」が可能
ストレージの共有不可
ファイルストレージ
Access Modesで「ReadWriteMany」が可能
複数のPodが起動する場合にストレージの共有が可能
persistentVolume Reclaim Policy
delete:PVCを削除すると、PVに定義された実ストレージも削除される
retain:PVCを削除しても、PVに定義された実ストレージは削除されない
PVC 作成例
Storage Classが「ebs-gp3-retain」の場合
Storage Classが「efs-zcp-retain」の場合
作成されたPVCをDeploymentにマウント
作成されたPVCをStatefulSetにマウント
AWSのStorage紹介
AWS CloudのStorage Classの種類
Storage Class Name | Description |
---|---|
gp2 (default) | General Purpose SSDで構成されており、99.8%~99.9%の耐久性(年間障害率0.1%~0.2%)があります。 ボリュームごとの最大スループットは250MiB/s * です。 PersistentVolumeClaimを使用するPodが作成されるまでPersistentVolumeのbindingおよびprovisioningを遅延させるモードが定義されています。 リクレイムポリシー(Reclaim Policy)はdeleteで、使用されたPVが削除されるとEBS(Elastic Block Store)も削除されます。 |
ebs-gp3 | gp2と同じspecですが、違いはボリュームごとの最大スループットが1,000MiB/sである点です。 |
ebs-gp3-retain | ebs-gp3で、リクレイムポリシー(Reclaim Policy)がdeleteではなくretainであるため、PVが削除されてもEBSは削除されません。 |
efs-{PROJECT_NAME} | AWSリージョンで1つ以上のアベイラビリティゾーン(Availability Zone)が使用できない場合でも、データに継続的な可用性を提供するように設計されたregional storage classで、頻繁にアクセスされるファイルに使用されます。 リクレイムポリシー(Reclaim Policy)はdeleteで、使用されたPVが削除されるとEFS(Elastic File System)も削除されます。 |
efs-{PROJECT_NAME}-retain | efs-[project name]で、リクレイムポリシー(Reclaim Policy)がdeleteではなくretainであるため、PVが削除されてもEFSは削除されません。 |
gp2の * スループット制限はボリュームサイズにより128MiB/s ~ 250MiB/sです。170GiB以下のボリュームは最大128MiB/sを提供し、170GiB超~334GiB未満のボリュームはバーストクレジットが利用可能な場合、最大250MiB/sのスループットを提供します。334GiB以上のボリュームはバーストクレジットに関係なく250MiB/sを提供します。gp2
は2018年12月3日以前に作成され、以後修正されていないボリュームは修正しない限り最大パフォーマンスに達しない可能性があります。
projectで使用するEFSの作成方法
1. EFS provisionerのインストール
EFS ProvisionerをHelmでインストールします。
FILE_SYSTEM_ID
: Create EFSで作成されたFileSystem IDREGION
: リージョン 例)ap-northeast-2PROJECT_NAME
: プロジェクト名 例)zcp
helm install stable/efs-provisioner \ --name zcp-efs-provisioner \ --namespace kube-system \ --set efsProvisioner.efsFileSystemId={FILE_SYSTEM_ID} \ --set efsProvisioner.awsRegion={REGION} \ --set efsProvisioner.path=/zcp \ --set efsProvisioner.provisionerName=cloudzcp.io/aws-efs \ --set efsProvisioner.storageClass.name=efs-{PROJECT_NAME} |
2. retainストレージクラスの作成
kubectl patch sc efs-zcp -p'{"metadata":{"name":"efs-{PROJECT_NAME}-retain"},"reclaimPolicy": "Retain"}' --dry-run -o yaml | kubectl create -f - |
3. 作成されたStorageClassの確認
kubectl get sc NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE ebs-gp3 ebs.csi.aws.com Delete WaitForFirstConsumer true 162m ebs-gp3-retain ebs.csi.aws.com Retain WaitForFirstConsumer true 162m efs-zcp cloudzcp.io/aws-efs Delete Immediate false 3h10m efs-zcp-retain cloudzcp.io/aws-efs Retain Immediate false 3h7m gp2 (default) kubernetes.io/aws-ebs Delete WaitForFirstConsumer false 6h28m |
参考ページ
https://docs.aws.amazon.com/eks/latest/userguide/storage-classes.html
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volume-types.html?icmpid=docs_ec2_console
https://docs.aws.amazon.com/efs/latest/ug/storage-classes.html
https://aws.amazon.com/efs/when-to-choose-efs/?nc1=h_ls
https://aws.amazon.com/ko/premiumsupport/knowledge-center/eks-persistent-storage/
Azureのストレージ紹介
AzureのStorageClassの種類
Storage Class Name | 説明 |
---|---|
default | Azure StandardSSDストレージを使用してManaged Diskを作成します。 リクレームポリシー(Reclaim Policy)はdeleteで、使用されたPVが削除されるとAzureディスクも削除されます。 |
managed-premium | Azure Premiumストレージを使用してManaged Diskを作成します。 リクレームポリシー(Reclaim Policy)はdeleteで、使用されたPVが削除されるとAzureディスクも削除されます。 |
managed-premium-retain | managed-premiumで、リクレームポリシー(Reclaim Policy)をdeleteではなくretainに設定すると、PVが削除されてもAzureディスクは削除されません。 |
azurefile | Azure標準ストレージを使用してAzureファイル共有を作成します。 リクレームポリシー(Reclaim Policy)はdeleteで、使用されたPVが削除されるとAzureファイル共有も削除されます。 |
azurefile-premium | Azure Premiumストレージを使用してAzureファイル共有を作成します。 リクレームポリシー(Reclaim Policy)はdeleteで、使用されたPVが削除されるとAzureファイル共有も削除されます。 |
azurefile-premium-retain | azurefile-premiumで、リクレームポリシー(Reclaim Policy)をdeleteではなくretainに設定すると、PVが削除されてもAzureファイル共有は削除されません。 |
参考ページ
https://docs.microsoft.com/en-us/azure/aks/concepts-storage#storage-classes
IBMのストレージ紹介
IBMのStorageClassの種類
bronze ~ gold:固定IOPSでストレージサイズを選択
custom:ストレージサイズとそれに応じたIOPSを選択
bronze | silver | gold | custom | |
---|---|---|---|---|
iopsPerGB | 2 | 4 | 10 | |
sizeRange | [20-12000]Gi | [20-12000]Gi | [20-4000]Gi | |
sizeIOPSRange | [20-39]Gi: [100-1000] |
ストレージ課金の種類(Billing type)
monthly:ストレージ使用料が月単位で課金される方式
月単位で課金されるため、途中で削除しても残り日数に関係なく1ヶ月分の料金が発生
長期間使用する場合に有利
hourly:ストレージ使用料が時間単位で課金される方式
時間単位で課金されるため、途中で削除しても残り分数に関係なく1時間分の料金が発生
料金はmonthlyより高いが、短期テストなど一時的な使用に適している