はじめに
StorageClass, PersistentVolume, PersistentVolumeClaimはたまに必要になるが、たまにしか触らないので忘れるのでここにメモを残しておく。
確認1. デフォルトのStorageClassを使う
EKSではgp2, GKEではstandard
pvc-gp2.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-gp2
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
#storageClassName: gp2 # storageClassNameを指定しなければデフォルトのStorageClassが使用される
EKSやGKEではpvcをapplyすれば動的にPersistentVolumeが作成される
% kubectl apply -f pvc-gp2.yaml
% kubectl get pv,pvc
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/pvc-6824a616-1063-4a7c-857e-b74ecee3798c 1Gi RWO Delete Bound default/pvc-gp2 gp2 9s
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/pvc-gp2 Bound pvc-6824a616-1063-4a7c-857e-b74ecee3798c 1Gi RWO gp2 16s
Podには以下のようにpvcを指定する
pod.yaml
apiVersion: v1
kind: Pod
metadata:
labels:
run: mysql
name: mysql
spec:
containers:
- image: mysql:8.0.22
name: mysql
resources: {}
env:
- name: MYSQL_ALLOW_EMPTY_PASSWORD
value: "1"
volumeMounts:
- name: data
mountPath: /var/lib/mysql
volumes:
- name: data
persistentVolumeClaim:
claimName: pvc-gp2
確認2. StorageClassを作成する
EKSのStorageClassにst1(スループット最適化HDD)を追加する
sc-st1.yaml
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: st1
provisioner: kubernetes.io/aws-ebs
parameters:
fsType: ext4
type: st1
% kubectl apply -f sc-st1.yaml
% kubectl get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
gp2 (default) kubernetes.io/aws-ebs Delete Immediate false 620d
st1 kubernetes.io/aws-ebs Delete Immediate false 5s
pvc-st1.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-st1
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 125Gi
storageClassName: st1 # storageClassNameを指定
% kubectl apply -f pvc-st1.yaml
% kubectl get pv,pvc
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
persistentvolume/pvc-6824a616-1063-4a7c-857e-b74ecee3798c 1Gi RWO Delete Bound default/pvc-gp2 gp2 14m
persistentvolume/pvc-bf330216-dc6a-47dc-bd31-ca52729d9e6a 125Gi RWO Delete Bound default/pvc-st1 st1 4s
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
persistentvolumeclaim/pvc-gp2 Bound pvc-6824a616-1063-4a7c-857e-b74ecee3798c 1Gi RWO gp2 14m
persistentvolumeclaim/pvc-st1 Bound pvc-bf330216-dc6a-47dc-bd31-ca52729d9e6a 125Gi RWO st1 9s
確認3. 既存のボリュームを使用する
AWSコンソールなどより予めボリュームを用意しておくこと。
次いで、PersistentVolumeを作成する。
pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
name: static-pv
spec:
capacity:
storage: 500Gi # 既存ボリュームの容量
accessModes:
- ReadWriteOnce
awsElasticBlockStore:
fsType: ext4
volumeID: <volumeID>
storageClassName: st1
PVCでは条件に合致するPVがあればそれを選択する。なければ動的プロビジョニングする(らしい)
pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: static-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: st1
resources:
requests:
storage: 500Gi