Pod ์ปจํ…Œ์ด๋„ˆ์˜ ๋ณผ๋ฅจ์„ ์ง์ ‘ ์ •์˜ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ๊ด€๋ฆฌ๋˜๋Š” K8s์—์„  ์ด ๋ฐฉ์‹์„ ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋Œ€์‹ , ์ปจํ…Œ์ด๋„ˆ ๋ณผ๋ฅจ ๊ฐœ๋…์„ ์ถ”์ƒํ™”ํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ ๋ฆฌ์†Œ์Šค์ธ Persistent Volume์„ ํ†ตํ•ด Pod ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์“ธ ์ˆ˜ ์žˆ๋Š” ๋ณผ๋ฅจ์„ ๊ด€๋ฆฌํ•œ๋‹ค.

7 minute read

Pod ์ปจํ…Œ์ด๋„ˆ์˜ ๋ณผ๋ฅจ์„ ์ง์ ‘ ์ •์˜ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ๊ด€๋ฆฌ๋˜๋Š” K8s์—์„  ์ด ๋ฐฉ์‹์„ ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋Œ€์‹ , ์ปจํ…Œ์ด๋„ˆ ๋ณผ๋ฅจ ๊ฐœ๋…์„ ์ถ”์ƒํ™”ํ•˜์—ฌ ํด๋Ÿฌ์Šคํ„ฐ ๋ฆฌ์†Œ์Šค์ธ Persistent Volume์„ ํ†ตํ•ด Pod ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์“ธ ์ˆ˜ ์žˆ๋Š” ๋ณผ๋ฅจ์„ ๊ด€๋ฆฌํ•œ๋‹ค.

์ปจํ…Œ์ด๋„ˆ ๋ณผ๋ฅจ์€ ๋…ธ๋“œ ๋””์Šคํฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค

์ปจํ…Œ์ด๋„ˆ ๋ณผ๋ฅจ ์ค‘ emptyDir ์œ ํ˜•๊ณผ hostPath ์œ ํ˜•์€ Pod์ด ์‹คํ–‰๋˜๋Š” ๋…ธ๋“œ์˜ ๋””์Šคํฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ K8s๋Š” ์—ฌ๋Ÿฌ ๋…ธ๋“œ๊ฐ€ ๋ชจ์ธ ํด๋Ÿฌ์Šคํ„ฐ๋กœ ๊ด€๋ฆฌ๋˜๊ธฐ ๋•Œ๋ฌธ์— Pod ์—ญ์‹œ ํ•˜๋‚˜์˜ ๋…ธ๋“œ์— ๋ฌถ์ธ ์กด์žฌ๊ฐ€ ์•„๋‹ˆ๋ผ ์œ ๋™์ ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋…ธ๋“œ์˜ ๋””์Šคํฌ์— ์กด์žฌํ•œ๋‹ค๋ฉด, ๋…ธ๋“œ ์žฅ์•  ๋“ฑ์˜ ์ƒํ™ฉ์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์‹ค ๋  ์ˆ˜ ์žˆ๋‹ค.

Persistent Volume์ด๋ž€

์ปจํ…Œ์ด๋„ˆ ๋ณผ๋ฅจ์€ Pod๊ณผ ๋™์ผํ•œ ์ƒ๋ช… ์ฃผ๊ธฐ๋ฅผ ๊ฐ–๋Š”๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ Persistent PV, ์ดํ•˜ PV๋Š” Pod๊ณผ ๋ณ„๊ฐœ์˜ ์ƒ๋ช… ์ฃผ๊ธฐ๋ฅผ ๊ฐ–๋Š”๋‹ค. ๋”ฐ๋ผ์„œ, Pod์ด ์ข…๋ฃŒ๋˜์–ด๋„ PV ๋ฆฌ์†Œ์Šค๋Š” ๋‚จ์•„์žˆ๋‹ค.

apiVersion: v1
kind: PersistentVolume
metadata:
  name: my-pv
spec:
  capacity:
    storage: 5Gi
  volumeMode: FileSystem
  accessMode:
    - ReadWriteOnce
  persistentVolumeReclaimPolicy: Recycle
  storageClassName: manual
  ...

PV ์„ธ๋ถ€ ์˜ต์…˜

volumeMode

FileSystem ๊ฐ’์€ ๋ณผ๋ฅจ์„ ํŒŒ์ผ ์‹œ์Šคํ…œ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค. ๋‹ค๋ฅธ ์˜ต์…˜์œผ๋กœ Block์ด ์žˆ๋Š”๋ฐ, ์ง€๊ธˆ์€ ์•Œ ํ•„์š”๊ฐ€ ์—†๋Š” ๋“ฏ ํ•˜๋‹ค. volumeMode ์˜ต์…˜์ด ์ง€์ •๋˜์ง€ ์•Š์œผ๋ฉด FileSystem์ด ๊ธฐ๋ณธ๊ฐ’์ด๋‹ค.

accessMode

์Šคํ† ๋ฆฌ์ง€ ๋ณผ๋ฅจ์— ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

  • ReadWriteOnce
    • ํ•˜๋‚˜์˜ ๋…ธ๋“œ์—์„œ๋งŒ ํ•ด๋‹น ๋ณผ๋ฅจ์ด RW๋กœ ๋งˆ์šดํŠธ ๋จ.
    • ๋‹จ, ๋™์ผ ๋…ธ๋“œ์—์„œ ์—ฌ๋Ÿฌ pod์ด ๊ตฌ๋™๋˜๋Š” ๊ฒฝ์šฐ๋Š” ๋ณต์ˆ˜์˜ Pod์ด ํ•ด๋‹น ๋…ธ๋“œ์˜ ๋ณผ๋ฅจ์— ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • ReadOnlyMany
    • ๋ณผ๋ฅจ์ด ๋‹ค์ˆ˜์˜ ๋…ธ๋“œ์—์„œ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ๋งˆ์šดํŠธ.
  • ReadWriteMany
    • ๋ณผ๋ฅจ์ด ๋‹ค์ˆ˜์˜ ๋…ธ๋“œ์—์„œ RW๋กœ ๋งˆ์šดํŠธ.
  • ReadWriteOncePod
    • ReadWriteOnce์—์„œ ์ข€๋” ๊ฐ•ํ™”๋œ ์˜ต์…˜. ์ „์ฒด ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ์˜ค์ง ๋‹จ ํ•˜๋‚˜์˜ Pod๋งŒ ํ•ด๋‹น ๋ณผ๋ฅจ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

์Šคํ† ๋ฆฌ์ง€ ๋ฆฌ์†Œ์Šค Provider์— ๋”ฐ๋ผ ๊ฐ€๋Šฅํ•œ ์˜ต์…˜์ด ๋‹ค๋ฅด๋‹ˆ ์ฃผ์˜ํ•  ๊ฒƒ. ์˜ˆ๋ฅผ ๋“ค์–ด AWS EBS ๋ณผ๋ฅจ์€ ReadWriteOnce๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.

persistentVolumeReclaimPolicy

๋ณผ๋ฅจ ์‚ฌ์šฉ ์ดํ›„์— ํ•ด๋‹น ์Šคํ† ๋ฆฌ์ง€์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ ์ •์ฑ…์ด๋‹ค.

  • Retain
    • ๋ณผ๋ฅจ ์‚ฌ์šฉ์ด ๋๋‚˜๋„ ๋ฐ์ดํ„ฐ๊ฐ€ ์œ ์ง€๋˜๋ฏ€๋กœ ์ˆ˜๋™ ๋ฐ˜ํ™˜ ํ•ด์•ผ ํ•œ๋‹ค.
  • Recycle
    • ๋ณผ๋ฅจ ์‚ฌ์šฉ์ด ๋๋‚˜๋ฉด, ๋ฐ์ดํ„ฐ๊ฐ€ ์‚ญ์ œ๋œ๋‹ค.
    • ๋”์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค!!!
  • Delete
    • ๋ณผ๋ฅจ ์‚ฌ์šฉ์ด ๋๋‚˜๋ฉด, ๊ด€๋ จ ์Šคํ† ๋ฆฌ์ง€ ์ž์‚ฐ์ด ์‚ญ์ œ๋œ๋‹ค. (AWS EBS ๋ณผ๋ฅจ์ด ์‚ญ์ œ๋จ)

storageClassName

K8s์˜ Storage Class ๋ฆฌ์†Œ์Šค ์ด๋ฆ„์„ ์ ๋Š” ๊ณณ์ด๋‹ค. Storage Class ๋ฆฌ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋ผ๋ฉด, ํ•ด๋‹น SC์˜ ์ด๋ฆ„์„ ์ ์œผ๋ฉด ๋˜๊ณ , ๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด manual ๊ฐ’์œผ๋กœ ์„ค์ •ํ•œ๋‹ค. ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด K8s ํด๋Ÿฌ์Šคํ„ฐ์˜ Default ์„ค์ •์œผ๋กœ ๋˜์–ด ์žˆ๋Š” SC๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์ดํ›„์— Storage Class ๋ฆฌ์†Œ์Šค๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ๋‹ค์‹œ ๋Œ์•„์˜ค์ž.


Persistent Volume Claim

PV๋กœ ์ •์˜๋œ ์Šคํ† ๋ฆฌ์ง€ ๋ฆฌ์†Œ์Šค๋ฅผ Pod์ด ์‚ฌ์šฉํ•˜๋„๋ก ์š”์ฒญํ•˜๋Š” ๋ฆฌ์†Œ์Šค์ด๋‹ค. PVC์— Pod์ด ์‚ฌ์šฉํ•  ์Šคํ† ๋ฆฌ์ง€์˜ ์กฐ๊ฑด์„ ์ž‘์„ฑํ•˜๊ณ , PVC์˜ ์ด๋ฆ„์„ Pod์˜ yaml ํŒŒ์ผ์— ์ ์Œ์œผ๋กœ์„œ ์Šคํ† ๋ฆฌ์ง€๋ฅผ ํ• ๋‹นํ•œ๋‹ค.

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: my-pvc
spec:
  resources:
    requests:
      storage: 8Gi

PVC๋Š” ์Šคํ† ๋ฆฌ์ง€ ์š”๊ตฌ์‚ฌํ•ญ์ผ ๋ฟ์ด๋‹ค. Pod ์ž…์žฅ์—์„œ ํ•„์š”๋กœ ํ•˜๋Š” ์ŠคํŽ™์„ ์ ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

K8s ์ปจํŠธ๋กคํ”Œ๋ ˆ์ธ์€ PVC์— ์ ํžŒ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋งŒ์กฑํ•˜๋Š” PV๋ฅผ ์ฐพ์•„์„œ ๋ฐ”์ธ๋”ฉ ํ•ด์ค€๋‹ค. ๋งŒ์กฑํ•˜๋Š” PV๊ฐ€ ์—†๋‹ค๋ฉด PVC๋Š” ์›ํ•˜๋Š” PV๊ฐ€ ์ƒ๊ธธ ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐํ•˜๊ฒŒ ๋œ๋‹ค.

์œ ์˜ํ•  ์ ์€ PV์™€ PVC๊ฐ€ 1:1 ๊ด€๊ณ„๋ผ๋Š” ๊ฒƒ์ด๋‹ค. ํ•˜๋‚˜์˜ PVC๋Š” ํ•˜๋‚˜์˜ PV์—๋งŒ ๋ฐ”์ธ๋”ฉ ๋˜๋ฉฐ, ๋ฐ˜๋Œ€๋กœ ํ•˜๋‚˜์˜ PV๋Š” ํ•˜๋‚˜์˜ PVC์—๋งŒ ๋ฐ”์ธ๋”ฉ ๋œ๋‹ค.


PVC์— ์ ํžŒ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ข€๋” ์ž์„ธํžˆ ์ ์„ ์ˆ˜๋„ ์žˆ๋‹ค. PV๋ฅผ ์ •์˜ํ•  ๋•Œ ์ผ๋˜ ์˜ต์…˜๋“ค์ด ๋งŽ์ด ๋“ฑ์žฅํ•œ ๊ฒƒ์ด ๋ณด์ธ๋‹ค.

...
spec:
  resources:
    requests:
      storage: 8Gi
  accessMode:
    - ReadWriteOnce
  storageClassName: manual

Pod์— PVC ์—ฐ๊ฒฐ

...
spec:
  volumes:
    - name: pv-storage
      persistentVolumeClaim:
        claimName: my-pvc
  containers:
    ...

Pod๋Š” PVC๋ฅผ ๋ณผ๋ฅจ์œผ๋กœ ์ธ์‹ํ•˜๊ณ  ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋•Œ, Pod์— ํ• ๋‹น๋œ PVC๋Š” Pod๊ณผ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ๋™์•ˆ ์‹œ์Šคํ…œ์—์„œ ์ž„์˜๋กœ ์‚ญ์ œํ•  ์ˆ˜ ์—†๋‹ค. ์ด๊ฒƒ์„ โ€œStorage Object in Use Protetionโ€๋ผ๊ณ  ํ•œ๋‹ค. ์‚ฌ์šฉ ์ค‘์ธ ๋ฐ์ดํ„ฐ ์Šคํ† ๋ฆฌ์ง€๋ฅผ ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์€ ์น˜๋ช…์ ์ธ ๊ฒฐ๊ณผ๋ฅผ ์ดˆ๋ž˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ด๋•Œ, Pod๊ณผ PVC๋Š” Many-to-Many ๊ด€๊ณ„๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•˜๋‚˜์˜ Pod์ด ์—ฌ๋Ÿฌ PVC๋ฅผ ์“ธ ์ˆ˜๋„ ์žˆ๊ณ , ํ•˜๋‚˜์˜ PVC๊ฐ€ ์—ฌ๋Ÿฌ Pod์— ์—ฐ๊ฒฐ๋  ์ˆ˜๋„ ์žˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ PVC๋ฅผ ์—ฌ๋Ÿฌ Pod์— ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒฝ์šฐ๋Š” PVC ์˜ต์…˜์„ ์กฐ์‹ฌํ•ด์•ผ ํ•œ๋‹ค. [stackoverflow]

  • accessMode: ReadWriteOnce
    • ๊ฐ™์€ ๋…ธ๋“œ์— ์žˆ๋Š” Pod๋“ค๋งŒ ํ•ด๋‹น PVC๋ฅผ ์“ธ ์ˆ˜ ์žˆ๋‹ค.
  • accessMode: ReadWriteMany/ReadOnlyMany
    • ์—ฌ๋Ÿฌ ๋…ธ๋“œ์— ์žˆ๋Š” Pod๋“ค๋„ ํ•ด๋‹น PVC๋ฅผ ์“ธ ์ˆ˜ ์žˆ๋‹ค.

Persistent Volume Life Cycle

PV์™€ PVC๋Š” 4๋‹จ๊ณ„์˜ ์ƒ๋ช… ์ฃผ๊ธฐ๋ฅผ ๊ฐ–๋Š”๋‹ค.

  1. Provisioning
  2. Binding
  3. Using
  4. Reclaiming

Provisioning

PV ์Šคํ† ๋ฆฌ์ง€ ๋ฆฌ์†Œ์Šค๋ฅผ ํ™•๋ณดํ•˜๋Š” ๋‹จ๊ณ„์ด๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ํ•˜๋Š๋ƒ, PV ํ”„๋กœ๋น„์ €๋„ˆ๊ฐ€ ํ•˜๋Š๋ƒ์— ๋”ฐ๋ผ โ€œ์ •์  ํ”„๋กœ๋น„์ €๋‹โ€๊ณผ โ€œ๋™์  ํ”„๋กœ๋น„์ €๋‹โ€์œผ๋กœ ๋‚˜๋‰œ๋‹ค.

  • ์ •์  ํ”„๋กœ๋น„์ €๋‹
    • ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ์ž๊ฐ€ ๋ฏธ๋ฆฌ PV ์Šคํ† ๋ฆฌ์ง€ ๋ฆฌ์†Œ์Šค๋ฅผ ์ •์˜ํ•˜๊ณ  ํ™•๋ณดํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
  • ๋™์  ํ”„๋กœ๋น„์ €๋‹
    • PV ํ”„๋กœ๋น„์ €๋„ˆ๊ฐ€ ๋Œ€์‹  PV๋ฅผ ํ”„๋กœ๋น„์ €๋‹ ํ•œ๋‹ค.
    • ํด๋Ÿฌ์Šคํ„ฐ ๊ด€๋ฆฌ์ž๋Š” PV ํ”„๋กœ๋น„์ €๋„ˆ๋งŒ ๋ฐฐํฌํ•˜๋ฉด ๋œ๋‹ค!
    • PVC์˜ spec.storageClassName์— Storage Class ๋ฆฌ์†Œ์Šค์˜ ์ด๋ฆ„์„ ์ ์–ด์ฃผ๋ฉด ๋œ๋‹ค.

Binding

PVC์— PV๊ฐ€ ํ• ๋‹น ๋˜๋Š” ๊ฒƒ์„ ๋งํ•จ.

์ •์  ํ”„๋กœ๋น„์ €๋‹์€ K8s๊ฐ€ ๊ฐ€๋Šฅํ•œ PV ๋ฆฌ์†Œ์Šค ์ค‘์—์„œ PVC๋ฅผ ๋ฐ”์ธ๋”ฉ ํ•ด์ฃผ๊ณ , ๋™์  ํ”„๋กœ๋น„์ €๋‹์€ Storage Class ๋ฆฌ์†Œ์Šค์˜ ํ”„๋กœ๋น„์ €๋„ˆ๊ฐ€ PV๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๊ณ  PVC์™€ ๋ฐ”์ธ๋”ฉ ํ•ด์ค€๋‹ค.

Using

Pod์— PVC๋กœ ๋ณผ๋ฅจ์„ ํ• ๋‹นํ•ด, PV๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ์‹œ์ ์„ ๋งํ•œ๋‹ค. Pod์ด PV๋ฅผ ์“ฐ๊ณ  ์žˆ๋‹ค๋ฉด, PV์™€ PV์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•  ์ˆ˜ ์—†๋‹ค.

Reclaiming

PV ๋ณผ๋ฅจ ์‚ฌ์šฉ์ด ์ข…๋ฃŒ๋œ ํ›„์˜ ์‹œ์ ์ด๋‹ค.

PV ๋ฆฌ์†Œ์Šค๋ฅผ ์ •์˜ํ•  ๋•Œ, ๋ถ€์—ฌํ•œ spec.persistentVolumeReclaimPolicy ์†์„ฑ์— ๋”ฐ๋ผ ๋™์ž‘ํ•œ๋‹ค. Retain๊ณผ Delete ๋‘ ์˜ต์…˜๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.


Persistent Volume ์›Œํฌ ํ”Œ๋กœ์šฐ

  1. PV๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ƒํƒœ ์ฒดํฌ.
  2. PVC๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ƒํƒœ ์ฒดํฌ.
  3. Pod์˜ ๋ณผ๋ฅจ์œผ๋กœ PVC๋ฅผ ์—ฐ๊ฒฐํ•œ๋‹ค.
  4. ๋ณผ๋ฅจ ์‚ฌ์šฉ์ด ๋๋‚˜๋ฉด, PV์˜ ์ •์ฑ…์— ๋”ฐ๋ผ ๋ณผ๋ฅจ์„ ๋ณด์กดํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œ.

Storage Class๋ฅผ ์‚ฌ์šฉํ•œ ๋™์  ํ”„๋กœ๋น„์ €๋‹์ด๋ผ๋ฉด,

  1. Storage Class๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  2. PVC๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
    1. Storage Class๊ฐ€ PV๋ฅผ ํ”„๋กœ๋น„์ €๋‹ ํ•ด์ค€๋‹ค.
  3. Pod์˜ ๋ณผ๋ฅจ์œผ๋กœ PVC๋ฅผ ์—ฐ๊ฒฐํ•œ๋‹ค.
  4. ๋ณผ๋ฅจ ์‚ฌ์šฉ์ด ๋๋‚˜๋ฉด, PV์˜ ์ •์ฑ…์— ๋”ฐ๋ผ ๋ณผ๋ฅจ์„ ๋ณด์กดํ•˜๊ฑฐ๋‚˜ ์‚ญ์ œ.

References