0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

K8sのStorageClass, PersistentVolume, PersistentVolumeClaim

Last updated at Posted at 2021-03-23

はじめに

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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?