Persistent Volume & Persistent Volume Claim
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๋จ๊ณ์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ฐ๋๋ค.
- Provisioning
- Binding
- Using
- 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 ์ํฌ ํ๋ก์ฐ
- PV๋ฅผ ์์ฑํ๊ณ , ์ํ ์ฒดํฌ.
- PVC๋ฅผ ์์ฑํ๊ณ , ์ํ ์ฒดํฌ.
- Pod์ ๋ณผ๋ฅจ์ผ๋ก PVC๋ฅผ ์ฐ๊ฒฐํ๋ค.
- ๋ณผ๋ฅจ ์ฌ์ฉ์ด ๋๋๋ฉด, PV์ ์ ์ฑ ์ ๋ฐ๋ผ ๋ณผ๋ฅจ์ ๋ณด์กดํ๊ฑฐ๋ ์ญ์ .
Storage Class๋ฅผ ์ฌ์ฉํ ๋์ ํ๋ก๋น์ ๋์ด๋ผ๋ฉด,
- Storage Class๋ฅผ ์์ฑํ๋ค.
- PVC๋ฅผ ์์ฑํ๋ค.
- Storage Class๊ฐ PV๋ฅผ ํ๋ก๋น์ ๋ ํด์ค๋ค.
- Pod์ ๋ณผ๋ฅจ์ผ๋ก PVC๋ฅผ ์ฐ๊ฒฐํ๋ค.
- ๋ณผ๋ฅจ ์ฌ์ฉ์ด ๋๋๋ฉด, PV์ ์ ์ฑ ์ ๋ฐ๋ผ ๋ณผ๋ฅจ์ ๋ณด์กดํ๊ฑฐ๋ ์ญ์ .