Kubernetes, PV

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

Kubernetes

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

๐Ÿ“— ๊ฐœ์š” - PV - K8s

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

  • PV ์šฉ๋„

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

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

Kubernetes์—์„œ PersistentVolume (PV) ๋Š” ํด๋Ÿฌ์Šคํ„ฐ ๋‚ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์˜๊ตฌ์ ์œผ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋Š” ์ž์›์ด๋‹ค. ์ผ๋ฐ˜์ ์ธ Kubernetes Pod๋Š” ์ƒ์„ฑ๊ณผ ์‚ญ์ œ๊ฐ€ ๋ฐ˜๋ณต๋˜๋ฏ€๋กœ, Pod์™€๋Š” ์ˆ˜๋ช…์ด ๋‹ค๋ฅด๊ณ  ๋…๋ฆฝ์ ์ธ ์ €์žฅ์†Œ๊ฐ€ ํ•„์š”ํ•  ๋•Œ PV๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

๊ฐœ๋…์„ค๋ช…
PersistentVolume (PV)ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ์ž๊ฐ€ ์ƒ์„ฑํ•˜๋Š” ์‹ค์ œ ์Šคํ† ๋ฆฌ์ง€ ๋ฆฌ์†Œ์Šค (์˜ˆ: NFS, iSCSI, Ceph, AWS EBS, MinIO ๋“ฑ). Pod์™€๋Š” ๋ณ„๋„๋กœ ์กด์žฌํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž ์š”์ฒญ์— ์˜ํ•ด ๋ฐ”์ธ๋”ฉ๋จ.
PersistentVolumeClaim (PVC)์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•˜๋Š” ์Šคํ† ๋ฆฌ์ง€ ๋ฆฌ์†Œ์Šค. ์šฉ๋Ÿ‰, ์ ‘๊ทผ ๋ชจ๋“œ ๋“ฑ์„ ์ •์˜ํ•จ.
StorageClass[^1]PV๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•  ๋•Œ ์‚ฌ์šฉํ•  ์Šคํ† ๋ฆฌ์ง€ ์ข…๋ฅ˜ ๋ฐ ์ •์ฑ…์„ ์ •์˜ํ•จ. ๋™์  ํ”„๋กœ๋น„์ €๋‹ ์‹œ ์‚ฌ์šฉ.

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

PV ์ •์˜

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: /mnt/data

accessModes

์ ‘๊ทผ ๋ชจ๋“œ์„ค๋ช…
ReadWriteOnce (RWO)ํ•˜๋‚˜์˜ ๋…ธ๋“œ์—์„œ ์ฝ๊ธฐ/์“ฐ๊ธฐ๋ฅผ ํ—ˆ์šฉ
ReadOnlyMany (ROX)์—ฌ๋Ÿฌ ๋…ธ๋“œ์—์„œ ์ฝ๊ธฐ ์ „์šฉ ํ—ˆ์šฉ
ReadWriteMany (RWX)์—ฌ๋Ÿฌ ๋…ธ๋“œ์—์„œ ์ฝ๊ธฐ/์“ฐ๊ธฐ ํ—ˆ์šฉ

PV๊ฐ€ PVC์—์„œ ์–ธ๋ฐ”์šด๋“œ(Unbound) ๋˜์—ˆ์„ ๋•Œ ์ฒ˜๋ฆฌ ๋ฐฉ์‹

์ •์ฑ…์„ค๋ช…
RetainPV๋ฅผ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ  ์ˆ˜๋™์œผ๋กœ ์ •๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์œ ์ง€ํ•จ
DeletePVC ์‚ญ์ œ ์‹œ PV๋„ ์ž๋™ ์‚ญ์ œ๋จ (์Šคํ† ๋ฆฌ์ง€ ๋ฐฑ์—”๋“œ์— ๋”ฐ๋ผ ๋‹ค๋ฆ„)
Recycle๊ธฐ๋ณธ์ ์ธ ์‚ญ์ œ/ํฌ๋งท ์ˆ˜ํ–‰ ํ›„ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅ (๋” ์ด์ƒ ์ž˜ ์•ˆ ์”€)

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

POD์—์„œ PV ์‚ฌ์šฉ ์˜ˆ์‹œ

apiVersion: v1
kind: Pod
metadata:
  name: my-pod
spec:
  containers:
    - name: app
      image: nginx
      volumeMounts:
        - mountPath: "/usr/share/nginx/html"
          name: html-volume
  volumes:
    - name: html-volume
      persistentVolumeClaim:
        claimName: my-pvc

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

PV ํ™œ์šฉ๋ฒ•

  • ๊ด€๋ฆฌ์ž๊ฐ€ PV๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ StorageClass๋ฅผ ํ†ตํ•ด ์ž๋™์œผ๋กœ ํ”„๋กœ๋น„์ €๋‹ํ•  ์ˆ˜ ์žˆ์Œ.
  • ์‚ฌ์šฉ์ž๋Š” PVC๋ฅผ ํ†ตํ•ด ์›ํ•˜๋Š” ์šฉ๋Ÿ‰๊ณผ ์ ‘๊ทผ ๋ฐฉ์‹์œผ๋กœ ์Šคํ† ๋ฆฌ์ง€๋ฅผ ์š”์ฒญํ•จ.
  • PVC๋Š” ์ ์ ˆํ•œ PV์— ๋ฐ”์ธ๋”ฉ๋˜๊ฑฐ๋‚˜ StorageClass๋ฅผ ์‚ฌ์šฉํ•ด ์ƒˆ๋กœ์šด PV๋ฅผ ์ƒ์„ฑํ•จ.
  • Pod๋Š” PVC๋ฅผ ์ฐธ์กฐํ•ด์„œ ๋ณผ๋ฅจ์„ ๋งˆ์šดํŠธํ•จ.
  • Pod๊ฐ€ ์‚ญ์ œ๋˜์–ด๋„ PVC์™€ PV๋Š” ์œ ์ง€๋˜์–ด ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚จ์Œ.

์ฐธ๊ณ 

hostPath ์‚ฌ์šฉ ์œ ์˜์ 

๋‹จ์ผ ๋…ธ๋“œ์—์„œ ๊ฐ„๋‹จํ•œ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด hostPath๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์šด์˜ํ™˜๊ฒฝ์—์„œ๋Š” CSI๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

hostPath , CSI ๋น„๊ต

ํ•ญ๋ชฉhostPathCSI ๊ธฐ๋ฐ˜
๋ชฉ์ ์‹ค์Šต, ํ…Œ์ŠคํŠธ, ๋‹จ์ผ ๋…ธ๋“œ์šด์˜ ํ™˜๊ฒฝ, HA, ์œ ์—ฐํ•œ ํ™•์žฅ
์ž๋™ํ™”์—†์Œ์žˆ์Œ
๋‹ค์ค‘ ๋…ธ๋“œ์–ด๋ ค์›€๊ฐ€๋Šฅ
๋ณด์•ˆ๋‚ฎ์Œ์ƒ๋Œ€์ ์œผ๋กœ ๋†’์Œ
๋™์  PV์ˆ˜๋™์ž๋™

hostPath ์‚ฌ์šฉ ์‹œ ์œ ์˜์‚ฌํ•ญ

์ œํ•œ์‚ฌํ•ญ์„ค๋ช…
๋…ธ๋“œ ์ข…์†์„ฑ ์žˆ์ŒPod๊ฐ€ ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ์ด๋™ํ•˜๋ฉด ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๋ถˆ๊ฐ€
HA ๋ถˆ๊ฐ€MinIO distributed์ฒ˜๋Ÿผ ๊ฐ ๋…ธ๋“œ ๊ฐ„ ๋ณผ๋ฅจ ๊ณต์œ ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ œํ•œ์ 
๋ณด์•ˆ ๋ฌธ์ œhostPath๋Š” ๋…ธ๋“œ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ง์ ‘ ์ ‘๊ทผ โ†’ ๋ณด์•ˆ ์ทจ์•ฝ
๋™์  ํ”„๋กœ๋น„์ €๋‹ ๋ถˆ๊ฐ€๋ฏธ๋ฆฌ PV๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•จ โ†’ ์ž๋™ํ™” ์–ด๋ ค์›€
๋ณต์žกํ•œ ์šด์˜ ์–ด๋ ค์›€๋ฐฑ์—…, ์Šค๋ƒ…์ƒท, ํ™•์žฅ ๋“ฑ ๊ธฐ๋Šฅ ๋ฏธ์ง€์›

์ฐธ๊ณ  ๋ฌธ์„œ

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

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