๐ ๊ฐ์ - PV - K8s
๐ณ๏ธโ๐ [๊ถ๊ธํ์ ]
๐[๋ชฉ์ฐจ]
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) ๋์์ ๋ ์ฒ๋ฆฌ ๋ฐฉ์
| ์ ์ฑ
| ์ค๋ช
|
|---|
Retain | PV๋ฅผ ์ญ์ ํ์ง ์๊ณ ์๋์ผ๋ก ์ ๋ฆฌํ ์ ์๋๋ก ์ ์งํจ |
Delete | PVC ์ญ์ ์ 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 ๋น๊ต
| ํญ๋ชฉ | hostPath | CSI ๊ธฐ๋ฐ |
|---|
| ๋ชฉ์ | ์ค์ต, ํ
์คํธ, ๋จ์ผ ๋
ธ๋ | ์ด์ ํ๊ฒฝ, HA, ์ ์ฐํ ํ์ฅ |
| ์๋ํ | ์์ | ์์ |
| ๋ค์ค ๋
ธ๋ | ์ด๋ ค์ | ๊ฐ๋ฅ |
| ๋ณด์ | ๋ฎ์ | ์๋์ ์ผ๋ก ๋์ |
| ๋์ PV | ์๋ | ์๋ |
hostPath ์ฌ์ฉ ์ ์ ์์ฌํญ
| ์ ํ์ฌํญ | ์ค๋ช
|
|---|
| ๋
ธ๋ ์ข
์์ฑ ์์ | Pod๊ฐ ๋ค๋ฅธ ๋
ธ๋๋ก ์ด๋ํ๋ฉด ๋ฐ์ดํฐ ์ ๊ทผ ๋ถ๊ฐ |
| HA ๋ถ๊ฐ | MinIO distributed์ฒ๋ผ ๊ฐ ๋
ธ๋ ๊ฐ ๋ณผ๋ฅจ ๊ณต์ ๊ฐ ํ์ํ ๊ฒฝ์ฐ ์ ํ์ |
| ๋ณด์ ๋ฌธ์ | hostPath๋ ๋
ธ๋ ํ์ผ ์์คํ
์ ์ง์ ์ ๊ทผ โ ๋ณด์ ์ทจ์ฝ |
| ๋์ ํ๋ก๋น์ ๋ ๋ถ๊ฐ | ๋ฏธ๋ฆฌ PV๋ฅผ ๋ง๋ค์ด์ผ ํจ โ ์๋ํ ์ด๋ ค์ |
| ๋ณต์กํ ์ด์ ์ด๋ ค์ | ๋ฐฑ์
, ์ค๋
์ท, ํ์ฅ ๋ฑ ๊ธฐ๋ฅ ๋ฏธ์ง์ |
์ฐธ๊ณ ๋ฌธ์
[^1]: StorageClass๋ Kubernetes์์ ๋์ ํ๋ก๋น์ ๋์ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ๋ฆฌ์์ค์ด๋ค.์ฌ์ฉ์๊ฐ PVC(PersistentVolumeClaim)๋ฅผ ๋ง๋ค๋ฉด, PVC๊ฐ ์ฐธ์กฐํ๋ StorageClass์ ๋ฐ๋ผ ์๋ง์ PV๊ฐ ์๋์ผ๋ก ์์ฑ๋๋ค. ์์ธ์ ๋ณด => ์คํ ๋ฆฌ์ง ํด๋์ค ๊ฐ์