Kubernetes, StorageClass

Jeonghak Choยท2025๋…„ 6์›” 8์ผ

Kubernetes

๋ชฉ๋ก ๋ณด๊ธฐ
12/20

๐Ÿ“— ๊ฐœ์š” - StorageClass - K8S

๐Ÿณ๏ธโ€๐ŸŒˆ [๊ถ๊ธˆํ•œ์ ]

  • StorageClass ์šฉ๋„

๐Ÿ”—[๋ชฉ์ฐจ]

1๏ธโƒฃ ๊ฐœ์š” / ๊ธฐ๋Šฅ

StorageClass ๊ธฐ๋Šฅ

StorageClass๋Š” Kubernetes์—์„œ ๋™์  ํ”„๋กœ๋น„์ €๋‹์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋Š” ๋ฆฌ์†Œ์Šค์ด๋‹ค.์‚ฌ์šฉ์ž๊ฐ€ PVC(PersistentVolumeClaim)๋ฅผ ๋งŒ๋“ค๋ฉด, PVC๊ฐ€ ์ฐธ์กฐํ•˜๋Š” StorageClass์— ๋”ฐ๋ผ ์•Œ๋งž์€ PV๊ฐ€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋œ๋‹ค.

์ž๋™์œผ๋กœ ์Šคํ† ๋ฆฌ์ง€ ์ƒ์„ฑ

์‚ฌ์šฉ์ž๊ฐ€ PVC๋งŒ ๋งŒ๋“ค๋ฉด Kubernetes๊ฐ€ ์•Œ์•„์„œ ์ ์ ˆํ•œ ์Šคํ† ๋ฆฌ์ง€๋ฅผ ์ƒ์„ฑํ•จ.

์˜ˆ: AWS์—์„œ๋Š” EBS, GCP์—์„œ๋Š” Persistent Disk, Ceph, NFS ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฐฑ์—”๋“œ ์ง€์›.

์Šคํ† ๋ฆฌ์ง€ ์ข…๋ฅ˜ ๋ฐ ์„ค์ • ์ง€์ •

๋‹ค๋ฅธ ์„ฑ๋Šฅ/์†๋„/๊ฐ€๊ฒฉ์„ ๊ฐ€์ง„ ์—ฌ๋Ÿฌ ์Šคํ† ๋ฆฌ์ง€ ์œ ํ˜• ์ •์˜ ๊ฐ€๋Šฅ.

์˜ˆ: fast, standard, slow ๊ฐ™์€ StorageClass๋ฅผ ์ •์˜ํ•˜๊ณ , ํ•„์š”์— ๋”ฐ๋ผ ์„ ํƒ ๊ฐ€๋Šฅ.

์ ‘๊ทผ ๋ชจ๋“œ ๋ฐ ๋ณผ๋ฅจ ์†์„ฑ ์„ค์ •

๋ณผ๋ฅจ์˜ reclaimPolicy, volumeBindingMode, parameters ๋“ฑ์„ ์„ธ๋ถ€ ์„ค์ • ๊ฐ€๋Šฅ.

์˜ˆ: ReadWriteOnce, ReadOnlyMany, Retain, Delete ์ •์ฑ… ๋“ฑ.

์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•จ

ํ•œ๋ฒˆ ์ •์˜ํ•˜๋ฉด ์—ฌ๋Ÿฌ PVC์—์„œ ํ•ด๋‹น StorageClass๋ฅผ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ์ผ๊ด€๋œ ์Šคํ† ๋ฆฌ์ง€ ์ „๋žต ๊ตฌํ˜„ ๊ฐ€๋Šฅ.

2๏ธโƒฃ ์ •์˜

StorageClass ์ •์˜

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: local-storage
provisioner: kubernetes.io/no-provisioner
reclaimPolicy: Retain                    
volumeBindingMode: WaitForFirstConsumer  
allowVolumeExpansion: true               

Provisioner

์Šคํ† ๋ฆฌ์ง€ ์ข…๋ฅ˜Provisioner ์ด๋ฆ„๋น„๊ณ 
AWS EBSebs.csi.aws.comEBS CSI Driver ํ•„์š”
GCP PDpd.csi.storage.gke.ioGKE์— ๋‚ด์žฅ
NFSnfs.csi.k8s.io or nfs-client์™ธ๋ถ€ NFS ์„œ๋ฒ„ ํ•„์š”
Ceph RBDrbd.csi.ceph.comCephCluster ์—ฐ๋™
Longhorndriver.longhorn.ioLonghorn ์„ค์น˜ ํ•„์š”
Local Pathk8s.io/minikube-hostpath or rancher.io/local-path๋กœ์ปฌ ๋””์Šคํฌ ํ…Œ์ŠคํŠธ์šฉ

volumeBindingMode

๋ชจ๋“œ์„ค๋ช…
ImmediatePVC๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ์ฆ‰์‹œ PV ๋ฐ”์ธ๋”ฉ ์‹œ๋„
WaitForFirstConsumerPVC๊ฐ€ ์—ฐ๊ฒฐ๋œ Pod์ด ์Šค์ผ€์ค„๋ง๋  ๋•Œ PV ์ƒ์„ฑ ๋ฐ ๋ฐ”์ธ๋”ฉ ์ˆ˜ํ–‰ โ†’ ๋…ธ๋“œ ์ง€์—ญ ๊ณ ๋ ค ๊ฐ€๋Šฅ

reclaimPolicy ์˜ต์…˜

๋ชจ๋“œ์„ค๋ช…
DeletePVC ์‚ญ์ œ ์‹œ PV๋„ ์‚ญ์ œ
RetainPVC ์‚ญ์ œ ํ›„ PV๋Š” ๋‚จ๊ฒจ๋‘  (๋ฐ์ดํ„ฐ ๋ณด์กด)
Recycledeprecated (๊ฐ„๋‹จํ•œ ์ดˆ๊ธฐํ™” ํ›„ ์žฌ์‚ฌ์šฉ)

3๏ธโƒฃ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

PVC ๊ฐ€ StorageClass ์‚ฌ์šฉ ์˜ˆ์‹œ

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-data
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 5Gi
  storageClassName: local-storage

4๏ธโƒฃ ํ™œ์šฉ

StorageClass ํ™œ์šฉ๋ฒ•

  • ๊ด€๋ฆฌ์ž: StorageClass ์ •์˜ (์Šคํ† ๋ฆฌ์ง€ ์ข…๋ฅ˜/์ •์ฑ… ํฌํ•จ)
  • ๊ฐœ๋ฐœ์ž: PVC์—์„œ storageClassName ์ง€์ • โ†’ ํ•„์š” ์‹œ Pod์— ๋งˆ์šดํŠธ
  • Kubernetes: CSI ๋“œ๋ผ์ด๋ฒ„๋ฅผ ํ†ตํ•ด ์ž๋™์œผ๋กœ ์Šคํ† ๋ฆฌ์ง€ ํ”„๋กœ๋น„์ €๋‹
  • ์‚ฌ์šฉ์ž: Pod์—์„œ ์Šคํ† ๋ฆฌ์ง€ ์‚ฌ์šฉ, ์‚ญ์ œ ์ •์ฑ… ๋“ฑ์— ๋”ฐ๋ผ ์ž๋™ ์ •๋ฆฌ

0๊ฐœ์˜ ๋Œ“๊ธ€