Storage Class
아래에서는 Google Cloud의 Persistent Disk를 볼륨으로 사용하는 경우를 예시로 든다. Storage Class를 사용하면 PV가 생성되는 것은 변함없지만, 이를 직접 생성하지 않아도 되게 된다.
Cf. Common Storage Class provisioner
- GCE
- AWS EBS
- Azure File
- Azure Disk
- CephFS
- Portworx
- ScaleIO
Cf. 프로비저너를 이용하면 프로비전할 디스크 유형, 복제 유형 등과 같은 추가 매개변수를 전달할 수도 있다. (파라미터 종류는 프로비저너에 따라 매우 상이하다.)
Static Provisioning
필요로할 때 직접 스토리지를 생성하는 방식이다. 이보다는 애플리케이션이 필요로 할 때 자동으로 볼륨이 프로비저닝된다면 더 좋을 것이다.
gcloud beta compute disks create \\
-- size 1GB
-- region us-east1
pd-disk # name
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-vol1
spec:
accessModes:
- ReadWriteOnce
capacity:
storage: 500Mi
gcePersistentDisk:
pdName: pd-disk
fsType: ext4
Dynamic Provisioning
Storage Class를 이용하면, 애플리케이션이 필요로 할 때 자동으로 볼륨을 프로비저닝하고 이를 파드에 붙일 수 있는 프로비저너를 정의할 수 있다. (GCP에서는 Google Storage)
Cf. 만약 Dynamic volume provisioning을 지원하지 않는 Storage Class를 찾아야 한다면, 프로비저너가 없는 Storage Class를 찾으면 된다.
Storage Class object
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: google-storage
provisioner: kubernetes.io/gce-pd # google computer engine - persistent disk
Storage Class가 생성되면 더이상 PV manifest 파일은 필요하지 않게 된다. (Storage Class가 생성될 때 자동으로 PV가 생성되기 때문에) 이 때부터는 PVC manifest 파일에 `storageClassName` 필드에 Storage Class 명을 작성해줌으로써 PVC와 SC를 연결할 수 있다.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: myclaim
spec:
accessModes:
- ReadWriteOnce
storageClassName: google-storage
resources:
requests:
storage: 500Mi
다음에 PVC가 생성되면 이와 연결된 Storage Class는 명시된 프로비저너(`provisioner` 필드의 값, 여기서는 GCE)을 이용해 GCP에 요청에 맞는 새로운 disk를 생성한 후 (쿠버네티스 상의) PV를 생성하고 여기에 PVC를 바인딩한다.
cf. Parameters
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: google-storage
provisioner: kubernetes.io/gce-pd
parameters:
type: pd-standard # [pd-standard|pd-ssd]
replication-type: none # [none|regional-pd]
Cf. Storage Class의 VolumeBindingMode 값이WaitForFirstConsumer 인 경우 해당 PV를 사용하는 파드가 새로 생성될 때까지 기다리므로 바인딩이 지연될 수 있다. (기존에 이미 있는 것에는 바인딩 되지 않음)
'Kubernetes' 카테고리의 다른 글
k8s) Storage - 1. Volume : PV(Persistent Volume), PVC(Persistent Volume Claim) (0) | 2024.03.11 |
---|---|
k8s) Security - 5. Network Policy(Ingress & Egress) (0) | 2024.03.10 |
k8s) Security - 4. Image Security, Security Contexts, (0) | 2024.03.10 |
k8s) Security - 3. Authorization(RBAC, Cluster Role, Service Account) (0) | 2024.03.10 |
k8s) Security - 2. KubeConfig, API Groups (0) | 2024.03.10 |