Ver3.0 ๐๏ธ Persistent Volume๊ณผ PVC ์๋ฒฝ ๊ฐ์ด๋

๐๏ธ Persistent Volume๊ณผ PVC ์๋ฒฝ ๊ฐ์ด๋
์ฟ ๋ฒ๋คํฐ์ค ์คํ ๋ฆฌ์ง์ ๋ชจ๋ ๊ฒ, ์น๊ตฌ์ฒ๋ผ ์ฝ๊ฒ ์๋ ค๋๋ฆด๊ฒ์!
๐ฏ ์ PV์ PVC๋ฅผ ์์์ผ ํ ๊น?
์๋
ํ์ธ์! ์ค๋์ ์ฟ ๋ฒ๋คํฐ์ค(Kubernetes)๋ฅผ ๋ค๋ฃจ๋ค ๋ณด๋ฉด ๋ฐ๋์ ๋ง์ฃผ์น๊ฒ ๋๋ Persistent Volume(PV)๊ณผ Persistent Volume Claim(PVC)์ ๋ํด ์ด์ผ๊ธฐํด๋ณผ๊ฒ์. ๐
์ฌ๋ฌ๋ถ์ด ๋ง์ฝ ์ปจํ
์ด๋ ํ๊ฒฝ์์ ์ ํ๋ฆฌ์ผ์ด์
์ ์ด์ํ๊ณ ์๋ค๋ฉด, ์๋ง ์ด๋ฐ ๊ณ ๋ฏผ์ ํด๋ณด์
จ์ ๊ฑฐ์์. "์ปจํ
์ด๋๊ฐ ์ฌ์์๋๋ฉด ๋ฐ์ดํฐ๊ฐ ๋ค ๋ ์๊ฐ๋๋ฐ, ์ด๋ป๊ฒ ๋ฐ์ดํฐ๋ฅผ ์๊ตฌ์ ์ผ๋ก ๋ณด๊ดํ์ง?" ๋ฐ๋ก ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ PV์ PVC๋๋๋ค! ๐
ํด๋ผ์ฐ๋ ํ๊ฒฝ์ด๋ DevOps ๋ถ์ผ์์ ์ผํ์๋ ๋ถ๋ค์ด๋ผ๋ฉด, ์ด ๊ฐ๋
์ ์ ๋ง ํ์์ ์ด์์. ์ฌ๋ฅ๋ท์์๋ ํด๋ผ์ฐ๋ ๊ด๋ จ ์ฌ๋ฅ์ ๊ณต์ ํ์๋ ๋ถ๋ค์ด ๋ง์๋ฐ, PV์ PVC๋ ๊ทธ์ค์์๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ ๊ฐ๋
์ด๊ฑฐ๋ ์.
๐ฆ ์ปจํ ์ด๋ ์คํ ๋ฆฌ์ง์ ๊ธฐ๋ณธ ์ดํด
๐ ์ปจํ ์ด๋์ ์์ ์ ์ฅ์ ๋ฌธ์
๋จผ์ ์ปจํ
์ด๋์ ๊ธฐ๋ณธ ํน์ฑ๋ถํฐ ์ดํดํด๋ณผ๊น์? ์ปจํ
์ด๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์์(ephemeral) ํน์ฑ์ ๊ฐ์ง๊ณ ์์ด์. ๋ฌด์จ ๋ง์ด๋๋ฉด, ์ปจํ
์ด๋๊ฐ ์คํ๋๋ ๋์์๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์์ง๋ง, ์ปจํ
์ด๋๊ฐ ์ญ์ ๋๊ฑฐ๋ ์ฌ์์๋๋ฉด ๊ทธ ์์ ์๋ ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง๋ค๋ ๊ฑฐ์ฃ . ๐ฑ
์๋ฅผ ๋ค์ด๋ณผ๊ฒ์. ์ฌ๋ฌ๋ถ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ปจํ
์ด๋๋ก ์คํํ๊ณ ์๋ค๊ณ ๊ฐ์ ํด๋ด
์๋ค. ์ฌ์ฉ์๋ค์ด ์ด์ฌํ ๋ฐ์ดํฐ๋ฅผ ์
๋ ฅํ๊ณ ์๋๋ฐ, ๊ฐ์๊ธฐ ์ปจํ
์ด๋์ ๋ฌธ์ ๊ฐ ์๊ฒจ์ ์ฌ์์ํด์ผ ํ๋ค๋ฉด? ๋ชจ๋ ๋ฐ์ดํฐ๊ฐ ๋ ์๊ฐ๋ฒ๋ฆฌ๋ ๋์ฐํ ์ํฉ์ด ๋ฐ์ํ๋ ๊ฑฐ์์! ๐ฅ
์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ฟ ๋ฒ๋คํฐ์ค๋ ์ฌ๋ฌ ๊ฐ์ง ์คํ ๋ฆฌ์ง ์๋ฃจ์
์ ์ ๊ณตํ๋๋ฐ, ๊ทธ์ค์์๋ ๊ฐ์ฅ ๊ฐ๋ ฅํ๊ณ ์ ์ฐํ ๊ฒ์ด ๋ฐ๋ก Persistent Volume์ด์์.
์ปจํ ์ด๋์ ๊ธฐ๋ณธ ํ์ผ์์คํ ์ ์ปจํ ์ด๋ ์๋ช ์ฃผ๊ธฐ์ ํจ๊ป ์ฌ๋ผ์ง๋๋ค. ์๊ตฌ์ ์ธ ๋ฐ์ดํฐ ์ ์ฅ์ ์ํด์๋ ๋ณ๋์ ์คํ ๋ฆฌ์ง ๋ฉ์ปค๋์ฆ์ด ํ์ํด์!
๐จ ์ฟ ๋ฒ๋คํฐ์ค ์คํ ๋ฆฌ์ง์ ์งํ
์ฟ ๋ฒ๋คํฐ์ค ์ด๊ธฐ์๋ ์คํ ๋ฆฌ์ง๋ฅผ ๊ด๋ฆฌํ๋ ๊ฒ ์ ๋ง ๋ณต์กํ์ด์. ๊ฐ๋ฐ์๊ฐ ์ง์ ์คํ ๋ฆฌ์ง ์ธ๋ถ์ฌํญ์ ๋ชจ๋ ์๊ณ ์์ด์ผ ํ๊ณ , ์ธํ๋ผ ๊ด๋ฆฌ์์ ๊ธด๋ฐํ๊ฒ ํ์
ํด์ผ ํ์ฃ . ํ์ง๋ง PV์ PVC๊ฐ ๋ฑ์ฅํ๋ฉด์ ์ด ๋ชจ๋ ๊ฒ ํจ์ฌ ๊ฐ๋จํด์ก๋ต๋๋ค! ๐
PV์ PVC๋ ์ถ์ํ(abstraction)๋ผ๋ ๊ฐ๋
์ ๋์
ํ์ด์. ๊ฐ๋ฐ์๋ "๋๋ 100GB ์คํ ๋ฆฌ์ง๊ฐ ํ์ํด"๋ผ๊ณ ๋ง ์์ฒญํ๋ฉด, ์ค์ ๋ก ๊ทธ ์คํ ๋ฆฌ์ง๊ฐ AWS EBS์ธ์ง, Google Persistent Disk์ธ์ง, NFS์ธ์ง ์ ํ์๊ฐ ์๊ฒ ๋ ๊ฑฐ์ฃ . ์ด๊ฒ ๋ฐ๋ก ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ํ๊ฒฝ์ ์๋ฆ๋ค์์ด์์! โจ
๐๏ธ Persistent Volume(PV) ๊น์ด ํํค์น๊ธฐ
๐ PV์ ์ ์์ ์ญํ
Persistent Volume(PV)์ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ์์ ๊ด๋ฆฌํ๋ ์คํ ๋ฆฌ์ง ๋ฆฌ์์ค์์. ์ฝ๊ฒ ๋งํด์, ์ค์ ๋ฌผ๋ฆฌ์ ๋๋ ํด๋ผ์ฐ๋ ์คํ ๋ฆฌ์ง๋ฅผ ์ฟ ๋ฒ๋คํฐ์ค๊ฐ ์ดํดํ ์ ์๋ ํํ๋ก ํํํ ๊ฐ์ฒด๋ผ๊ณ ์๊ฐํ๋ฉด ๋ผ์. ๐ฏ
PV๋ ํด๋ฌ์คํฐ ๋ ๋ฒจ์ ๋ฆฌ์์ค์์. ์ด๊ฒ ๋ฌด์จ ๋ป์ด๋๋ฉด, ํน์ ๋ค์์คํ์ด์ค์ ์ํ์ง ์๊ณ ํด๋ฌ์คํฐ ์ ์ฒด์์ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฑฐ์ฃ . ๋ง์น ๊ณต์ฉ ์ฐฝ๊ณ ๊ฐ์ ๊ฐ๋
์ด๋ผ๊ณ ํ ์ ์์ด์. ๐ฆ
PV์ ์๋ช
์ฃผ๊ธฐ๋ Pod์ ๋
๋ฆฝ์ ์ด์์. Pod๊ฐ ์ญ์ ๋๋๋ผ๋ PV๋ ๊ทธ๋๋ก ๋จ์์๊ณ , ๋ฐ์ดํฐ๋ ๋ณด์กด๋ฉ๋๋ค. ์ด๊ฒ ๋ฐ๋ก "Persistent(์๊ตฌ์ )"๋ผ๋ ์ด๋ฆ์ด ๋ถ์ ์ด์ ๋๋๋ค!
โข ํด๋ฌ์คํฐ ๋ ๋ฒจ ๋ฆฌ์์ค (๋ค์์คํ์ด์ค ๋ ๋ฆฝ์ )
โข Pod ์๋ช ์ฃผ๊ธฐ์ ๋ ๋ฆฝ์
โข ๊ด๋ฆฌ์๊ฐ ํ๋ก๋น์ ๋ํ๊ฑฐ๋ ๋์ ์ผ๋ก ์์ฑ
โข ๋ค์ํ ์คํ ๋ฆฌ์ง ๋ฐฑ์๋ ์ง์
๐ ๏ธ PV์ ๊ตฌ์ฑ ์์
PV๋ฅผ ์ ์ํ ๋๋ ์ฌ๋ฌ ๊ฐ์ง ์์ฑ์ ์ง์ ํด์ผ ํด์. ํ๋์ฉ ์ดํด๋ณผ๊น์? ๐
1. Capacity (์ฉ๋)
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์์ฑ์ด์์. ์คํ ๋ฆฌ์ง์ ํฌ๊ธฐ๋ฅผ ์ง์ ํ๋ ๊ฑฐ์ฃ . ์๋ฅผ ๋ค์ด 10Gi, 100Gi ์ด๋ฐ ์์ผ๋ก ํํํด์. ํ์ฌ๋ ์ฉ๋๋ง ์ง์ ํ ์ ์์ง๋ง, ๋ฏธ๋์๋ IOPS(์ด๋น ์
์ถ๋ ฅ ์์
์)๋ ์ฒ๋ฆฌ๋ ๊ฐ์ ๊ฒ๋ ์ง์ ํ ์ ์์ ๊ฑฐ์์! ๐
2. Access Modes (์ ๊ทผ ๋ชจ๋)
์คํ ๋ฆฌ์ง์ ์ด๋ป๊ฒ ์ ๊ทผํ ์ ์๋์ง๋ฅผ ์ ์ํด์. ์ธ ๊ฐ์ง ๋ชจ๋๊ฐ ์๋ต๋๋ค:
โข ReadWriteOnce (RWO): ํ๋์ ๋
ธ๋์์๋ง ์ฝ๊ธฐ/์ฐ๊ธฐ ๊ฐ๋ฅ. ๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๋ชจ๋์์. ๐พ
โข ReadOnlyMany (ROX): ์ฌ๋ฌ ๋
ธ๋์์ ์ฝ๊ธฐ๋ง ๊ฐ๋ฅ. ๊ณต์ ์ค์ ํ์ผ ๊ฐ์ ๊ฑฐ์ ์ ํฉํด์. ๐
โข ReadWriteMany (RWX): ์ฌ๋ฌ ๋
ธ๋์์ ์ฝ๊ธฐ/์ฐ๊ธฐ ๋ชจ๋ ๊ฐ๋ฅ. NFS ๊ฐ์ ๊ณต์ ์คํ ๋ฆฌ์ง์์ ์ง์ํด์. ๐
3. Storage Class (์คํ ๋ฆฌ์ง ํด๋์ค)
PV์ "๋ฑ๊ธ"์ด๋ "ํ์
"์ ๋ํ๋ด์. ์๋ฅผ ๋ค์ด "๋น ๋ฅธ SSD", "์ ๋ ดํ HDD", "๊ณ ๊ฐ์ฉ์ฑ ์คํ ๋ฆฌ์ง" ์ด๋ฐ ์์ผ๋ก ๊ตฌ๋ถํ ์ ์์ฃ . ์ด๊ฑด ๋์ค์ PVC๊ฐ ์ํ๋ ์คํ ๋ฆฌ์ง๋ฅผ ์ฐพ์ ๋ ์ฌ์ฉ๋ผ์. ๐ท๏ธ
4. Reclaim Policy (ํ์ ์ ์ฑ
)
PVC๊ฐ ์ญ์ ๋์์ ๋ PV๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ง ๊ฒฐ์ ํด์. ์ธ ๊ฐ์ง ์ต์
์ด ์์ด์:
โข Retain: PV๋ฅผ ๊ทธ๋๋ก ์ ์ง. ๋ฐ์ดํฐ๋ ๋ณด์กด๋๊ณ , ์๋์ผ๋ก ์ ๋ฆฌํด์ผ ํด์. ๐
โข Delete: PV์ ์ฐ๊ฒฐ๋ ์ค์ ์คํ ๋ฆฌ์ง๊น์ง ์ญ์ . ํด๋ผ์ฐ๋ ํ๊ฒฝ์์ ๋น์ฉ ์ ๊ฐ์ ์ข์์. ๐๏ธ
โข Recycle: ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๊ณ PV๋ฅผ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์ด์. (deprecated ๋์์ด์) โป๏ธ
๐ป PV ์์ฑ ์์
์ค์ ๋ก PV๋ฅผ ์ด๋ป๊ฒ ๋ง๋๋์ง ๋ณผ๊น์? YAML ํ์ผ๋ก ์ ์ํ๋ฉด ๋ผ์:
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv
labels:
type: local
spec:
capacity:
storage: 10Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Retain
storageClassName: standard
hostPath:
path: "/mnt/data"
์ด ์์ ๋ ๋ก์ปฌ ํธ์คํธ ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ๋ ๊ฐ๋จํ PV์์. ์ค์ ํ๋ก๋์ ํ๊ฒฝ์์๋ AWS EBS, GCE Persistent Disk, Azure Disk, NFS ๋ฑ ๋ค์ํ ์คํ ๋ฆฌ์ง ๋ฐฑ์๋๋ฅผ ์ฌ์ฉํ ์ ์์ด์! ๐
๊ฐ๋ฐ ํ๊ฒฝ์์๋ hostPath๋ฅผ ์ฌ์ฉํด๋ ๊ด์ฐฎ์ง๋ง, ํ๋ก๋์ ์์๋ ์ ๋ ์ฌ์ฉํ์ง ๋ง์ธ์! ๋ ธ๋๊ฐ ๋ณ๊ฒฝ๋๋ฉด ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์๊ฒ ๋๊ฑฐ๋ ์. ํญ์ ๋คํธ์ํฌ ์คํ ๋ฆฌ์ง๋ ํด๋ผ์ฐ๋ ์คํ ๋ฆฌ์ง๋ฅผ ์ฌ์ฉํ์ธ์.
๐ ๋ค์ํ PV ํ์
์ฟ ๋ฒ๋คํฐ์ค๋ ์ ๋ง ๋ง์ ์คํ ๋ฆฌ์ง ๋ฐฑ์๋๋ฅผ ์ง์ํด์. ์ฃผ์ํ ๊ฒ๋ค์ ์ดํด๋ณผ๊น์? ๐ช
| ์คํ ๋ฆฌ์ง ํ์ | ์ค๋ช | ์ฃผ์ ์ฌ์ฉ์ฒ |
|---|---|---|
| AWS EBS | Amazon Elastic Block Store | AWS ํด๋ผ์ฐ๋ ํ๊ฒฝ |
| GCE PD | Google Compute Engine Persistent Disk | GCP ํด๋ผ์ฐ๋ ํ๊ฒฝ |
| Azure Disk | Microsoft Azure Disk Storage | Azure ํด๋ผ์ฐ๋ ํ๊ฒฝ |
| NFS | Network File System | ์จํ๋ ๋ฏธ์ค, ๊ณต์ ์คํ ๋ฆฌ์ง |
| Ceph RBD | Ceph Block Device | ๋ถ์ฐ ์คํ ๋ฆฌ์ง ์์คํ |
| iSCSI | Internet Small Computer Systems Interface | SAN ์คํ ๋ฆฌ์ง |
๊ฐ ์คํ ๋ฆฌ์ง ํ์ ๋ง๋ค ์ง์ํ๋ ๊ธฐ๋ฅ์ด ์กฐ๊ธ์ฉ ๋ฌ๋ผ์. ์๋ฅผ ๋ค์ด NFS๋ ReadWriteMany๋ฅผ ์ง์ํ์ง๋ง, AWS EBS๋ ReadWriteOnce๋ง ์ง์ํ์ฃ . ํ๋ก์ ํธ ์๊ตฌ์ฌํญ์ ๋ง๋ ์คํ ๋ฆฌ์ง๋ฅผ ์ ํํ๋ ๊ฒ ์ค์ํด์! ๐ฏ
๐ซ Persistent Volume Claim(PVC) ์์ ์ ๋ณต
๐ญ PVC๋ ๋ฌด์์ธ๊ฐ?
Persistent Volume Claim(PVC)์ ์ฌ์ฉ์๊ฐ ์คํ ๋ฆฌ์ง๋ฅผ ์์ฒญํ๋ ๋ฐฉ๋ฒ์ด์์. PV๊ฐ ์ค์ ์คํ ๋ฆฌ์ง๋ผ๋ฉด, PVC๋ ๊ทธ ์คํ ๋ฆฌ์ง๋ฅผ ์ฌ์ฉํ๊ฒ ๋ค๋ "์ ์ฒญ์" ๊ฐ์ ๊ฑฐ์ฃ ! ๐
๋น์ ๋ฅผ ๋ค์ด๋ณผ๊ฒ์. PV๋ ์ํํธ ๋จ์ง์ ์๋ ์ค์ ์ฃผ์ฐจ ๊ณต๊ฐ์ด๊ณ , PVC๋ ์
์ฃผ๋ฏผ์ด ์ ์ถํ๋ ์ฃผ์ฐจ ๊ณต๊ฐ ์ ์ฒญ์์์. ์ ์ฒญ์์ "์งํ 1์ธต์ ์๋ ๋์ ๊ณต๊ฐ์ด ํ์ํด์"๋ผ๊ณ ์ฐ๋ฉด, ๊ด๋ฆฌ์ฌ๋ฌด์(์ฟ ๋ฒ๋คํฐ์ค)๊ฐ ์กฐ๊ฑด์ ๋ง๋ ์ฃผ์ฐจ ๊ณต๊ฐ์ ๋ฐฐ์ ํด์ฃผ๋ ๊ฑฐ์ฃ ! ๐
PVC๋ ๋ค์์คํ์ด์ค ๋ ๋ฒจ์ ๋ฆฌ์์ค์์. ์ฆ, ํน์ ๋ค์์คํ์ด์ค์ ์ํ๊ณ , ๊ทธ ๋ค์์คํ์ด์ค ์์ Pod๋ค๋ง ์ฌ์ฉํ ์ ์์ด์. ์ด๋ ๊ฒ ํ๋ฉด ํ๋ณ๋ก ์คํ ๋ฆฌ์ง๋ฅผ ๊ฒฉ๋ฆฌํ ์ ์์ด์ ๋ณด์๊ณผ ๊ด๋ฆฌ๊ฐ ํธํด์ ธ์! ๐
โข ์ฌ์ฉ์(๊ฐ๋ฐ์)๊ฐ ์คํ ๋ฆฌ์ง๋ฅผ ์์ฒญํ๋ ๋ฐฉ๋ฒ
โข ๋ค์์คํ์ด์ค ๋ ๋ฒจ ๋ฆฌ์์ค
โข PV์ ๋ฐ์ธ๋ฉ๋์ด ์ค์ ์คํ ๋ฆฌ์ง ์ฌ์ฉ
โข Pod์์ ๋ณผ๋ฅจ์ผ๋ก ๋ง์ดํธํ์ฌ ์ฌ์ฉ
๐ PVC์ PV์ ๋ฐ์ธ๋ฉ ํ๋ก์ธ์ค
PVC๊ฐ ์์ฑ๋๋ฉด ์ฟ ๋ฒ๋คํฐ์ค๋ ์๋์ผ๋ก ์ ํฉํ PV๋ฅผ ์ฐพ์์ ์ฐ๊ฒฐ(๋ฐ์ธ๋ฉ)ํด์ค์. ์ด ๊ณผ์ ์ด ์ ๋ง ํฅ๋ฏธ๋ก์ด๋ฐ, ํ๋์ฉ ์ดํด๋ณผ๊น์? ๐
1๋จ๊ณ: PVC ์์ฑ
์ฌ์ฉ์๊ฐ ํ์ํ ์คํ ๋ฆฌ์ง ์๊ตฌ์ฌํญ์ ๋ด์ PVC๋ฅผ ์์ฑํด์. "๋๋ 10GB ์ฉ๋์ ReadWriteOnce ๋ชจ๋๊ฐ ํ์ํด"๋ผ๊ณ ๋ช
์ํ๋ ๊ฑฐ์ฃ .
2๋จ๊ณ: PV ๊ฒ์
์ฟ ๋ฒ๋คํฐ์ค ์ปจํธ๋กค๋ฌ๊ฐ ํด๋ฌ์คํฐ์ ์๋ ๋ชจ๋ PV๋ฅผ ๊ฒ์ํด์. PVC์ ์๊ตฌ์ฌํญ์ ๋ง์กฑํ๋ PV๋ฅผ ์ฐพ๋ ๊ฑฐ์ฃ . ์ด๋ ๋ค์ ์กฐ๊ฑด๋ค์ ํ์ธํด์:
โข ์ฉ๋์ด ์ถฉ๋ถํ๊ฐ?
โข ์ ๊ทผ ๋ชจ๋๊ฐ ์ผ์นํ๋๊ฐ?
โข ์คํ ๋ฆฌ์ง ํด๋์ค๊ฐ ๋ง๋๊ฐ?
โข ๋ผ๋ฒจ ์
๋ ํฐ๊ฐ ์ผ์นํ๋๊ฐ?
3๋จ๊ณ: ๋ฐ์ธ๋ฉ
์ ํฉํ PV๋ฅผ ์ฐพ์ผ๋ฉด PVC์ PV๋ฅผ 1:1๋ก ๋ฐ์ธ๋ฉํด์. ์ด ๊ด๊ณ๋ ๋
์ ์ ์ด์์. ํ ๋ฒ ๋ฐ์ธ๋ฉ๋ PV๋ ๋ค๋ฅธ PVC๊ฐ ์ฌ์ฉํ ์ ์์ด์! ๐
4๋จ๊ณ: ์ฌ์ฉ
๋ฐ์ธ๋ฉ์ด ์๋ฃ๋๋ฉด Pod์์ PVC๋ฅผ ๋ณผ๋ฅจ์ผ๋ก ๋ง์ดํธํด์ ์ฌ์ฉํ ์ ์์ด์. ์ด์ ์ ํ๋ฆฌ์ผ์ด์
์ ์๊ตฌ ์คํ ๋ฆฌ์ง๋ฅผ ์์ ๋กญ๊ฒ ์ฌ์ฉํ ์ ์๊ฒ ๋๋ ๊ฑฐ์ฃ ! ๐
๐ PVC ์์ฑ ์์
์ค์ PVC๋ฅผ ์ด๋ป๊ฒ ๋ง๋๋์ง ๋ณผ๊น์?
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc
namespace: default
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 8Gi
storageClassName: standard
selector:
matchLabels:
type: local
์ด PVC๋ 8GB ์ฉ๋์ ReadWriteOnce ์คํ ๋ฆฌ์ง๋ฅผ ์์ฒญํ๊ณ ์์ด์. storageClassName์ด "standard"๋ก ์ง์ ๋์ด ์์ผ๋, ๊ฐ์ ์คํ ๋ฆฌ์ง ํด๋์ค๋ฅผ ๊ฐ์ง PV์ ๋ฐ์ธ๋ฉ๋ ๊ฑฐ์์. ๐
selector ๋ถ๋ถ์ ์ ํ์ฌํญ์ด์์. ํน์ ๋ผ๋ฒจ์ ๊ฐ์ง PV๋ง ์ฌ์ฉํ๊ณ ์ถ์ ๋ ์ง์ ํ๋ฉด ๋ผ์. ์ด ์์ ์์๋ type: local ๋ผ๋ฒจ์ ๊ฐ์ง PV๋ง ์ฐพ๊ฒ ๋์ฃ .
๐ Pod์์ PVC ์ฌ์ฉํ๊ธฐ
PVC๋ฅผ ๋ง๋ค์์ผ๋ฉด ์ด์ Pod์์ ์ฌ์ฉํด์ผ๊ฒ ์ฃ ? ์ด๋ ๊ฒ ํ๋ฉด ๋ผ์:
apiVersion: v1
kind: Pod
metadata:
name: my-app
spec:
containers:
- name: app-container
image: nginx
volumeMounts:
- name: my-storage
mountPath: /usr/share/nginx/html
volumes:
- name: my-storage
persistentVolumeClaim:
claimName: my-pvc
์ด Pod๋ my-pvc๋ผ๋ PVC๋ฅผ /usr/share/nginx/html ๊ฒฝ๋ก์ ๋ง์ดํธํ๊ณ ์์ด์. ์ด์ nginx๊ฐ ์ด ๊ฒฝ๋ก์ ์ฐ๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ ์๊ตฌ ์คํ ๋ฆฌ์ง์ ์ ์ฅ๋๋ ๊ฑฐ์ฃ ! ๐
Pod๊ฐ ์ฌ์์๋๊ฑฐ๋ ๋ค๋ฅธ ๋
ธ๋๋ก ์ด๋ํด๋, ๊ฐ์ PVC๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฐ์ดํฐ์ ๊ณ์ ์ ๊ทผํ ์ ์์ด์. ์ด๊ฒ ๋ฐ๋ก Persistent Volume์ ํ์ด๋๋๋ค! ๐ช
ReadWriteOnce ๋ชจ๋์ PV๋ ํ ๋ฒ์ ํ๋์ ๋ ธ๋์์๋ง ๋ง์ดํธํ ์ ์์ด์. ์ฌ๋ฌ Pod๊ฐ ๊ฐ์ PVC๋ฅผ ์ฌ์ฉํ๋๋ผ๋, ๋ชจ๋ ๊ฐ์ ๋ ธ๋์ ์ค์ผ์ค๋ง๋์ด์ผ ํด์. ๋ค์ค ๋ ธ๋ ์ ๊ทผ์ด ํ์ํ๋ฉด ReadWriteMany๋ฅผ ์ง์ํ๋ ์คํ ๋ฆฌ์ง๋ฅผ ์ฌ์ฉํ์ธ์!
โก Dynamic Provisioning: ์๋ํ์ ๋ง๋ฒ
๐ช ๋์ ํ๋ก๋น์ ๋์ด๋?
์ง๊ธ๊น์ง ์ค๋ช
ํ ๋ฐฉ์์ ์ ์ ํ๋ก๋น์ ๋(Static Provisioning)์ด์์. ๊ด๋ฆฌ์๊ฐ ๋ฏธ๋ฆฌ PV๋ฅผ ๋ง๋ค์ด๋๊ณ , ์ฌ์ฉ์๊ฐ PVC๋ก ์์ฒญํ๋ฉด ๋งค์นญ๋๋ ๋ฐฉ์์ด์ฃ . ํ์ง๋ง ์ด ๋ฐฉ์์ ์ข ๋ถํธํด์. ๊ด๋ฆฌ์๊ฐ ํญ์ PV๋ฅผ ๋ฏธ๋ฆฌ ์ค๋นํด์ผ ํ๊ฑฐ๋ ์. ๐
๋์ ํ๋ก๋น์ ๋(Dynamic Provisioning)์ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ค์! PVC๊ฐ ์์ฑ๋๋ฉด ์๋์ผ๋ก PV๋ฅผ ๋ง๋ค์ด์ฃผ๋ ๊ฑฐ์ฃ . ๋ง์น ์ํ๊ธฐ์ฒ๋ผ์! ๐ฐ
๋์ ํ๋ก๋น์ ๋์ ์ฌ์ฉํ๋ฉด:
โข ๊ด๋ฆฌ์๊ฐ PV๋ฅผ ๋ฏธ๋ฆฌ ๋ง๋ค ํ์๊ฐ ์์ด์
โข ํ์ํ ๋งํผ๋ง ์คํ ๋ฆฌ์ง๊ฐ ์์ฑ๋ผ์
โข ํด๋ผ์ฐ๋ ํ๊ฒฝ์์ ํนํ ํจ์จ์ ์ด์์
โข ์คํ ๋ฆฌ์ง ๊ด๋ฆฌ๊ฐ ํจ์ฌ ๊ฐ๋จํด์ ธ์
๐๏ธ Storage Class: ๋์ ํ๋ก๋น์ ๋์ ํต์ฌ
๋์ ํ๋ก๋น์ ๋์ ํต์ฌ์ Storage Class์์. Storage Class๋ ์คํ ๋ฆฌ์ง๋ฅผ ์ด๋ป๊ฒ ์์ฑํ ์ง ์ ์ํ๋ ํ
ํ๋ฆฟ ๊ฐ์ ๊ฑฐ์ฃ . ๐จ
Storage Class์๋ ๋ค์ ์ ๋ณด๋ค์ด ๋ค์ด๊ฐ์:
โข Provisioner: ์ด๋ค ์คํ ๋ฆฌ์ง ์์คํ
์ ์ฌ์ฉํ ์ง (์: AWS EBS, GCE PD)
โข Parameters: ์คํ ๋ฆฌ์ง ์์ฑ ์ ํ์ํ ์ธ๋ถ ์ค์
โข Reclaim Policy: PVC ์ญ์ ์ PV ์ฒ๋ฆฌ ๋ฐฉ๋ฒ
โข Volume Binding Mode: ๋ฐ์ธ๋ฉ ์์ ์ ์ด
๐ Storage Class ์์
AWS EBS๋ฅผ ์ฌ์ฉํ๋ Storage Class๋ฅผ ๋ง๋ค์ด๋ณผ๊น์?
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: fast-ssd
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp3
iops: "3000"
throughput: "125"
encrypted: "true"
reclaimPolicy: Delete
allowVolumeExpansion: true
volumeBindingMode: WaitForFirstConsumer
์ด Storage Class๋ AWS EBS gp3 ํ์
์ SSD๋ฅผ ์์ฑํด์. IOPS์ ์ฒ๋ฆฌ๋๋ ์ง์ ๋์ด ์๊ณ , ์ํธํ๋ ํ์ฑํ๋์ด ์์ฃ . allowVolumeExpansion: true๋ก ์ค์ ๋์ด ์์ด์ ๋์ค์ ๋ณผ๋ฅจ ํฌ๊ธฐ๋ฅผ ๋๋ฆด ์๋ ์์ด์! ๐
volumeBindingMode: WaitForFirstConsumer๋ ํนํ ์ค์ํด์. ์ด ์ค์ ์ PVC๊ฐ ์์ฑ๋์ด๋ ๋ฐ๋ก PV๋ฅผ ๋ง๋ค์ง ์๊ณ , ์ค์ ๋ก Pod๊ฐ ์ค์ผ์ค๋ง๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์. ์ด๋ ๊ฒ ํ๋ฉด Pod์ ๊ฐ์ ๊ฐ์ฉ ์์ญ(Availability Zone)์ ๋ณผ๋ฅจ์ ์์ฑํ ์ ์์ด์ ์ฑ๋ฅ์ด ์ข์์ ธ์! ๐ฏ
๐ ๋์ ํ๋ก๋น์ ๋ ์ฌ์ฉํ๊ธฐ
๋์ ํ๋ก๋น์ ๋์ ์ฌ์ฉํ๋ PVC๋ ์ด๋ ๊ฒ ๋ง๋ค์ด์:
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: dynamic-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: fast-ssd
resources:
requests:
storage: 50Gi
์ด PVC๊ฐ ์์ฑ๋๋ฉด ์ฟ ๋ฒ๋คํฐ์ค๊ฐ ์๋์ผ๋ก:
1. fast-ssd Storage Class๋ฅผ ์ฐพ์์
2. AWS EBS provisioner๋ฅผ ํธ์ถํด์
3. 50GB gp3 ๋ณผ๋ฅจ์ ์์ฑํด์
4. ๊ทธ ๋ณผ๋ฅจ์ ๋ํ๋ด๋ PV๋ฅผ ์๋์ผ๋ก ๋ง๋ค์ด์
5. PVC์ PV๋ฅผ ๋ฐ์ธ๋ฉํด์
๋ชจ๋ ๊ฒ ์๋์ผ๋ก ์ด๋ฃจ์ด์ ธ์! ๋ง๋ฒ ๊ฐ์ฃ ? โจ
๋๋ถ๋ถ์ ์ฟ ๋ฒ๋คํฐ์ค ํด๋ฌ์คํฐ๋ ๊ธฐ๋ณธ Storage Class๋ฅผ ๊ฐ์ง๊ณ ์์ด์. PVC์์ storageClassName์ ์ง์ ํ์ง ์์ผ๋ฉด ๊ธฐ๋ณธ Storage Class๊ฐ ์ฌ์ฉ๋ผ์. kubectl get storageclass ๋ช ๋ น์ผ๋ก ํ์ธํ ์ ์์ด์!
๐ ํด๋ผ์ฐ๋๋ณ Storage Class
๊ฐ ํด๋ผ์ฐ๋ ์ ๊ณต์๋ง๋ค ๋ค์ํ Storage Class ์ต์ ์ด ์์ด์. ๊ฐ๋จํ ์ดํด๋ณผ๊น์? โ๏ธ
AWS (Amazon Web Services)
โข gp2/gp3: ๋ฒ์ฉ SSD, ๊ฐ์ฅ ์ผ๋ฐ์
โข io1/io2: ํ๋ก๋น์ ๋๋ IOPS SSD, ๊ณ ์ฑ๋ฅ
โข st1: ์ฒ๋ฆฌ๋ ์ต์ ํ HDD, ๋น
๋ฐ์ดํฐ
โข sc1: ์ฝ๋ HDD, ์์นด์ด๋ธ
GCP (Google Cloud Platform)
โข pd-standard: ํ์ค ์๊ตฌ ๋์คํฌ
โข pd-ssd: SSD ์๊ตฌ ๋์คํฌ
โข pd-balanced: ๊ท ํ์กํ ์๊ตฌ ๋์คํฌ
โข pd-extreme: ์ต๊ณ ์ฑ๋ฅ ๋์คํฌ
Azure
โข Standard_LRS: ํ์ค ๋ก์ปฌ ์ค๋ณต ์คํ ๋ฆฌ์ง
โข Premium_LRS: ํ๋ฆฌ๋ฏธ์ SSD
โข StandardSSD_LRS: ํ์ค SSD
โข UltraSSD_LRS: ์ธํธ๋ผ ๋์คํฌ
๐ PV์ PVC์ ์๋ช ์ฃผ๊ธฐ
๐ ์๋ช ์ฃผ๊ธฐ ๋จ๊ณ๋ณ ์ดํด
PV์ PVC๋ ์ฌ๋ฌ ๋จ๊ณ์ ์๋ช ์ฃผ๊ธฐ๋ฅผ ๊ฑฐ์ณ์. ๊ฐ ๋จ๊ณ๋ฅผ ์ดํดํ๋ฉด ์คํ ๋ฆฌ์ง ๊ด๋ฆฌ๊ฐ ํจ์ฌ ์ฌ์์ ธ์! ๐
1. Provisioning (ํ๋ก๋น์ ๋)
PV๊ฐ ์์ฑ๋๋ ๋จ๊ณ์์. ์ ์ ํ๋ก๋น์ ๋์ด๋ฉด ๊ด๋ฆฌ์๊ฐ ์ง์ ๋ง๋ค๊ณ , ๋์ ํ๋ก๋น์ ๋์ด๋ฉด ์๋์ผ๋ก ์์ฑ๋์ฃ .
2. Binding (๋ฐ์ธ๋ฉ)
PVC์ PV๊ฐ ์ฐ๊ฒฐ๋๋ ๋จ๊ณ์์. ์ฟ ๋ฒ๋คํฐ์ค๊ฐ PVC์ ์๊ตฌ์ฌํญ์ ๋ง๋ PV๋ฅผ ์ฐพ์์ 1:1๋ก ๋งค์นญํด์ค์. ๋ฐ์ธ๋ฉ๋๋ฉด PV์ ์ํ๊ฐ Bound๋ก ๋ณ๊ฒฝ๋ผ์. ๐
3. Using (์ฌ์ฉ)
Pod๊ฐ PVC๋ฅผ ๋ณผ๋ฅจ์ผ๋ก ๋ง์ดํธํด์ ์ค์ ๋ก ์ฌ์ฉํ๋ ๋จ๊ณ์์. ์ด ๋จ๊ณ์์ ์ ํ๋ฆฌ์ผ์ด์
์ด ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ธ ์ ์์ด์. ๐
4. Reclaiming (ํ์)
PVC๊ฐ ์ญ์ ๋๋ฉด PV๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ง ๊ฒฐ์ ํ๋ ๋จ๊ณ์์. Reclaim Policy์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ๋์ํด์:
โข Retain: PV๋ฅผ ์ ์งํ๊ณ ์๋ ์ ๋ฆฌ ํ์
โข Delete: PV์ ์ค์ ์คํ ๋ฆฌ์ง ๋ชจ๋ ์ญ์
โข Recycle: ๋ฐ์ดํฐ ์ญ์ ํ ์ฌ์ฌ์ฉ (deprecated)
๐ PV ์ํ ์ดํดํ๊ธฐ
PV๋ ์ฌ๋ฌ ์ํ๋ฅผ ๊ฐ์ง ์ ์์ด์. kubectl get pv ๋ช ๋ น์ผ๋ก ํ์ธํ ์ ์์ฃ :
| ์ํ | ์๋ฏธ | ์ค๋ช |
|---|---|---|
| Available | ์ฌ์ฉ ๊ฐ๋ฅ | PVC์ ๋ฐ์ธ๋ฉ๋์ง ์์ ์ํ |
| Bound | ๋ฐ์ธ๋ฉ๋จ | PVC์ ์ฐ๊ฒฐ๋์ด ์ฌ์ฉ ์ค |
| Released | ํด์ ๋จ | PVC๊ฐ ์ญ์ ๋์์ง๋ง ์์ง ํ์๋์ง ์์ |
| Failed | ์คํจ | ์๋ ํ์๊ฐ ์คํจํ ์ํ |
๐ PVC ์ํ ๋ชจ๋ํฐ๋ง
PVC๋ ์ํ๋ฅผ ๊ฐ์ง๊ณ ์์ด์. ์ฃผ์ ์ํ๋ค์ ์์๋ณผ๊น์?
Pending
PVC๊ฐ ์์ฑ๋์์ง๋ง ์์ง ์ ํฉํ PV๋ฅผ ์ฐพ์ง ๋ชปํ ์ํ์์. ์ด ์ํ๊ฐ ๊ณ์๋๋ฉด ๋ค์์ ํ์ธํด๋ด์ผ ํด์:
โข ์ถฉ๋ถํ ์ฉ๋์ PV๊ฐ ์๋๊ฐ?
โข ์ ๊ทผ ๋ชจ๋๊ฐ ์ผ์นํ๋๊ฐ?
โข Storage Class๊ฐ ์ฌ๋ฐ๋ฅธ๊ฐ?
โข ๋์ ํ๋ก๋น์ ๋์ด ์ ๋๋ก ์๋ํ๋๊ฐ?
Bound
PV์ ์ฑ๊ณต์ ์ผ๋ก ๋ฐ์ธ๋ฉ๋ ์ํ์์. ์ด์ Pod์์ ์ฌ์ฉํ ์ ์์ด์! ๐
Lost
๋ฐ์ธ๋ฉ๋ PV๊ฐ ์ฌ๋ผ์ง ์ํ์์. ์ด๊ฑด ์ฌ๊ฐํ ๋ฌธ์ ์ด๋ ์ฆ์ ์กฐ์ฌํด์ผ ํด์! ๐จ
PVC๊ฐ Pending ์ํ์ ๋จธ๋ฌผ๋ฌ ์๋ค๋ฉด:
โข kubectl describe pvc [pvc-name]์ผ๋ก ์ด๋ฒคํธ ํ์ธ
โข kubectl get pv๋ก ์ฌ์ฉ ๊ฐ๋ฅํ PV ํ์ธ
โข Storage Class provisioner ๋ก๊ทธ ํ์ธ
โข ํด๋ผ์ฐ๋ ์ ๊ณต์์ ํ ๋น๋(quota) ํ์ธ
๐ก๏ธ ๊ณ ๊ธ ๊ธฐ๋ฅ๊ณผ ๋ฒ ์คํธ ํ๋ํฐ์ค
๐ ๋ณผ๋ฅจ ํ์ฅ (Volume Expansion)
์ ํ๋ฆฌ์ผ์ด์
์ด ์ฑ์ฅํ๋ฉด์ ์คํ ๋ฆฌ์ง๊ฐ ๋ถ์กฑํด์ง ์ ์์ด์. ๋คํํ ์ฟ ๋ฒ๋คํฐ์ค๋ ๋ณผ๋ฅจ ํ์ฅ์ ์ง์ํด์! ๐
๋ณผ๋ฅจ ํ์ฅ์ ์ฌ์ฉํ๋ ค๋ฉด:
1. Storage Class์์ allowVolumeExpansion: true ์ค์
2. PVC์ spec.resources.requests.storage ๊ฐ์ ์ฆ๊ฐ
3. ์ฟ ๋ฒ๋คํฐ์ค๊ฐ ์๋์ผ๋ก ๋ณผ๋ฅจ ํฌ๊ธฐ ์กฐ์
์๋ฅผ ๋ค์ด๋ณผ๊ฒ์:
# ๊ธฐ์กด PVC ์์
kubectl edit pvc my-pvc
# storage ๊ฐ์ 10Gi์์ 20Gi๋ก ๋ณ๊ฒฝ
spec:
resources:
requests:
storage: 20Gi # 10Gi์์ ์ฆ๊ฐ
์ฃผ์ํ ์ ์ ๋ณผ๋ฅจ์ ์ถ์ํ ์๋ ์๋ค๋ ๊ฑฐ์์. ์ค์ง ํ์ฅ๋ง ๊ฐ๋ฅํด์! ๊ทธ๋ฆฌ๊ณ ์ผ๋ถ ์คํ ๋ฆฌ์ง ํ์ ์ Pod๋ฅผ ์ฌ์์ํด์ผ ํ์ฅ์ด ์๋ฃ๋ผ์. ๐
๐ธ ๋ณผ๋ฅจ ์ค๋ ์ท (Volume Snapshot)
๋ณผ๋ฅจ ์ค๋
์ท์ ํน์ ์์ ์ ๋ณผ๋ฅจ ์ํ๋ฅผ ์ ์ฅํ๋ ๊ธฐ๋ฅ์ด์์. ๋ฐฑ์
์ด๋ ๋ณต์ ์ ์ ๋ง ์ ์ฉํ์ฃ ! ๐ท
์ค๋
์ท์ ์ฌ์ฉํ๋ ค๋ฉด ์ธ ๊ฐ์ง ๋ฆฌ์์ค๊ฐ ํ์ํด์:
โข VolumeSnapshotClass: ์ค๋
์ท ์์ฑ ๋ฐฉ๋ฒ ์ ์
โข VolumeSnapshot: ์ค์ ์ค๋
์ท ์์ฒญ
โข VolumeSnapshotContent: ์ค์ ์ค๋
์ท ๋ฐ์ดํฐ
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
name: my-snapshot
spec:
volumeSnapshotClassName: csi-snapclass
source:
persistentVolumeClaimName: my-pvc
์ค๋ ์ท์ ๋ง๋ค๋ฉด ๋์ค์ ์๋ก์ด PVC๋ฅผ ์์ฑํ ๋ ๋ฐ์ดํฐ ์์ค๋ก ์ฌ์ฉํ ์ ์์ด์. ํ ์คํธ ํ๊ฒฝ ๊ตฌ์ถ์ด๋ ์ฌํด ๋ณต๊ตฌ์ ์ ๋ง ์ข์์! ๐พ
๐ ๋ณด์ ๊ณ ๋ ค์ฌํญ
์คํ ๋ฆฌ์ง ๋ณด์์ ์ ๋ง ์ค์ํด์! ๋ช ๊ฐ์ง ๋ฒ ์คํธ ํ๋ํฐ์ค๋ฅผ ์๋ ค๋๋ฆด๊ฒ์: ๐ก๏ธ
1. ์ํธํ
๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ค๋ฉด ๋ฐ๋์ ์ํธํ๋ฅผ ์ฌ์ฉํ์ธ์. ๋๋ถ๋ถ์ ํด๋ผ์ฐ๋ ์ ๊ณต์๋ ์ ์ฅ ๋ฐ์ดํฐ ์ํธํ(encryption at rest)๋ฅผ ์ง์ํด์.
AWS EBS ์์ :
parameters:
type: gp3
encrypted: "true"
kmsKeyId: "arn:aws:kms:region:account:key/key-id"
2. RBAC (Role-Based Access Control)
PV์ PVC์ ๋ํ ์ ๊ทผ์ ์ ํํ์ธ์. ๋ชจ๋ ์ฌ์ฉ์๊ฐ ๋ชจ๋ ์คํ ๋ฆฌ์ง์ ์ ๊ทผํ ํ์๋ ์์ด์.
3. ๋ค์์คํ์ด์ค ๊ฒฉ๋ฆฌ
PVC๋ ๋ค์์คํ์ด์ค ๋ ๋ฒจ ๋ฆฌ์์ค์์. ํ์ด๋ ํ๋ก์ ํธ๋ณ๋ก ๋ค์์คํ์ด์ค๋ฅผ ๋ถ๋ฆฌํ๋ฉด ์คํ ๋ฆฌ์ง๋ ์์ฐ์ค๋ฝ๊ฒ ๊ฒฉ๋ฆฌ๋ผ์.
4. ์ ๊ธฐ์ ์ธ ๋ฐฑ์
๋ณผ๋ฅจ ์ค๋
์ท์ด๋ ์ธ๋ถ ๋ฐฑ์
์๋ฃจ์
์ ์ฌ์ฉํด์ ์ ๊ธฐ์ ์ผ๋ก ๋ฐฑ์
ํ์ธ์. ์ฌํด๋ ์๊ณ ์์ด ์ฐพ์์์! ๐จ
๐ฐ ๋น์ฉ ์ต์ ํ
ํด๋ผ์ฐ๋ ํ๊ฒฝ์์ ์คํ ๋ฆฌ์ง๋ ํฐ ๋น์ฉ ์์์์. ๋น์ฉ์ ์ ๊ฐํ๋ ํ์ ์๋ ค๋๋ฆด๊ฒ์: ๐ต
1. ์ ์ ํ ์คํ ๋ฆฌ์ง ํ์
์ ํ
๋ชจ๋ ์ํฌ๋ก๋๊ฐ ๊ณ ์ฑ๋ฅ SSD๊ฐ ํ์ํ ๊ฑด ์๋์์. ๋ก๊ทธ๋ ๋ฐฑ์
๊ฐ์ ๊ฑด ์ ๋ ดํ HDD๋ก๋ ์ถฉ๋ถํด์.
2. Reclaim Policy ์ค์
์ฌ์ฉํ์ง ์๋ PV๋ ์๋์ผ๋ก ์ญ์ ๋๋๋ก reclaimPolicy: Delete๋ฅผ ์ค์ ํ์ธ์. ๊ทธ๋ ์ง ์์ผ๋ฉด ๊ณ์ ๋น์ฉ์ด ๋ฐ์ํด์!
3. ๋ณผ๋ฅจ ํฌ๊ธฐ ์ต์ ํ
ํ์ ์ด์์ผ๋ก ํฐ ๋ณผ๋ฅจ์ ์์ฒญํ์ง ๋ง์ธ์. ๋์ค์ ํ์ฅํ ์ ์์ผ๋ ์ ์ ํ ํฌ๊ธฐ๋ก ์์ํ์ธ์.
4. ๋ฏธ์ฌ์ฉ ๋ณผ๋ฅจ ๋ชจ๋ํฐ๋ง
์ ๊ธฐ์ ์ผ๋ก ์ฌ์ฉํ์ง ์๋ PV๋ฅผ ์ฐพ์์ ์ ๋ฆฌํ์ธ์. ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋ค์ด์ ์๋ํํ๋ฉด ์ข์์!
# ๋ฐ์ธ๋ฉ๋์ง ์์ PV ์ฐพ๊ธฐ
kubectl get pv | grep Available
# Released ์ํ์ PV ์ฐพ๊ธฐ
kubectl get pv | grep Released
โก ์ฑ๋ฅ ์ต์ ํ
์คํ ๋ฆฌ์ง ์ฑ๋ฅ๋ ์ค์ํ์ฃ ! ์ฑ๋ฅ์ ๋์ด๋ ๋ฐฉ๋ฒ๋ค์ ์์๋ณผ๊น์? ๐
1. ๋ก์ปฌ๋ฆฌํฐ (Locality)
Pod์ ๋ณผ๋ฅจ์ ๊ฐ์ ๊ฐ์ฉ ์์ญ์ ๋ฐฐ์นํ์ธ์. volumeBindingMode: WaitForFirstConsumer๋ฅผ ์ฌ์ฉํ๋ฉด ์๋์ผ๋ก ์ฒ๋ฆฌ๋ผ์.
2. IOPS์ ์ฒ๋ฆฌ๋ ์กฐ์
๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์ I/O ์ง์ฝ์ ์ํฌ๋ก๋๋ ๋์ IOPS๋ฅผ ์ค์ ํ์ธ์.
3. ์ ์ ํ ํ์ผ์์คํ
์ ํ
ext4, xfs ๋ฑ ์ํฌ๋ก๋์ ๋ง๋ ํ์ผ์์คํ
์ ์ ํํ์ธ์. ๋์ฉ๋ ํ์ผ์ xfs๊ฐ ์ข๊ณ , ์์ ํ์ผ์ด ๋ง์ผ๋ฉด ext4๊ฐ ์ข์์.
4. ์บ์ฑ ํ์ฉ
์ ํ๋ฆฌ์ผ์ด์
๋ ๋ฒจ์์ ์บ์ฑ์ ๊ตฌํํ๋ฉด ๋์คํฌ I/O๋ฅผ ์ค์ผ ์ ์์ด์. Redis๋ Memcached๋ฅผ ๊ณ ๋ คํด๋ณด์ธ์!
์ฟ ๋ฒ๋คํฐ์ค๋ ํด๋ผ์ฐ๋ ์คํ ๋ฆฌ์ง ์ต์ ํ๊ฐ ์ด๋ ต๋ค๋ฉด, ์ฌ๋ฅ๋ท์์ ์ ๋ฌธ๊ฐ์ ๋์์ ๋ฐ์๋ณด์ธ์! DevOps ์์ง๋์ด๋ค์ด ์ฌ๋ฌ๋ถ์ ํ๊ฒฝ์ ๋ง๋ ์ต์ ์ ์คํ ๋ฆฌ์ง ์ ๋ต์ ์ ์ํด์ค ์ ์์ด์. ๐ฏ
๐ฏ ์ค์ ์๋๋ฆฌ์ค์ ์์
๐พ ์๋๋ฆฌ์ค 1: MySQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐฐํฌ
๊ฐ์ฅ ํํ ์ฌ์ฉ ์ฌ๋ก์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐฐํฌ๋ฅผ ํด๋ณผ๊น์? MySQL์ ์๊ตฌ ์คํ ๋ฆฌ์ง์ ํจ๊ป ๋ฐฐํฌํ๋ ์์ ํ ์์ ์์! ๐๏ธ
# Storage Class ์ ์
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: mysql-storage
provisioner: kubernetes.io/aws-ebs
parameters:
type: gp3
iops: "3000"
encrypted: "true"
reclaimPolicy: Retain
allowVolumeExpansion: true
---
# PVC ์์ฑ
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc
spec:
accessModes:
- ReadWriteOnce
storageClassName: mysql-storage
resources:
requests:
storage: 20Gi
---
# MySQL Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: mysql
spec:
selector:
matchLabels:
app: mysql
strategy:
type: Recreate
template:
metadata:
labels:
app: mysql
spec:
containers:
- name: mysql
image: mysql:8.0
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: mysql-secret
key: password
ports:
- containerPort: 3306
name: mysql
volumeMounts:
- name: mysql-storage
mountPath: /var/lib/mysql
volumes:
- name: mysql-storage
persistentVolumeClaim:
claimName: mysql-pvc
์ด ์์ ์ ํฌ์ธํธ:
โข reclaimPolicy: Retain์ผ๋ก ๋ฐ์ดํฐ ๋ณดํธ
โข allowVolumeExpansion: true๋ก ๋์ค์ ํ์ฅ ๊ฐ๋ฅ
โข strategy: Recreate๋ก ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ณด์ฅ
โข ์ํธํ ํ์ฑํ๋ก ๋ณด์ ๊ฐํ
๐ ์๋๋ฆฌ์ค 2: ๊ณต์ ํ์ผ ์คํ ๋ฆฌ์ง (NFS)
์ฌ๋ฌ Pod๊ฐ ๋์์ ์ ๊ทผํด์ผ ํ๋ ๊ณต์ ์คํ ๋ฆฌ์ง๊ฐ ํ์ํ ๋๊ฐ ์์ด์. NFS๋ฅผ ์ฌ์ฉํ ์์ ๋ฅผ ๋ณผ๊น์? ๐
# NFS PV ์์ฑ
apiVersion: v1
kind: PersistentVolume
metadata:
name: nfs-pv
spec:
capacity:
storage: 100Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
nfs:
server: nfs-server.example.com
path: "/shared/data"
---
# PVC ์์ฑ
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: nfs-pvc
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 100Gi
---
# ์ฌ๋ฌ Pod์์ ์ฌ์ฉ
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-app
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: nginx
image: nginx
volumeMounts:
- name: shared-data
mountPath: /usr/share/nginx/html
volumes:
- name: shared-data
persistentVolumeClaim:
claimName: nfs-pvc
์ด ์์ ์์๋ 3๊ฐ์ nginx Pod๊ฐ ๋ชจ๋ ๊ฐ์ NFS ๋ณผ๋ฅจ์ ๊ณต์ ํด์. ReadWriteMany ๋ชจ๋ ๋๋ถ์ ๊ฐ๋ฅํ ๊ฑฐ์ฃ ! ๐
๐ ์๋๋ฆฌ์ค 3: StatefulSet๊ณผ PVC
StatefulSet์ ๊ฐ Pod๋ง๋ค ๋ ๋ฆฝ์ ์ธ ์คํ ๋ฆฌ์ง๊ฐ ํ์ํ ๊ฒฝ์ฐ์ ์ฌ์ฉํด์. ์๋ฅผ ๋ค์ด Kafka๋ Elasticsearch ๊ฐ์ ๋ถ์ฐ ์์คํ ์ด์ฃ . ๐ช
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: elasticsearch
spec:
serviceName: elasticsearch
replicas: 3
selector:
matchLabels:
app: elasticsearch
template:
metadata:
labels:
app: elasticsearch
spec:
containers:
- name: elasticsearch
image: elasticsearch:7.17.0
ports:
- containerPort: 9200
name: http
- containerPort: 9300
name: transport
volumeMounts:
- name: data
mountPath: /usr/share/elasticsearch/data
volumeClaimTemplates:
- metadata:
name: data
spec:
accessModes:
- ReadWriteOnce
storageClassName: fast-ssd
resources:
requests:
storage: 50Gi
volumeClaimTemplates๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ Pod๋ง๋ค ์๋์ผ๋ก PVC๊ฐ ์์ฑ๋ผ์. elasticsearch-0, elasticsearch-1, elasticsearch-2 ๊ฐ๊ฐ์ด ๋
๋ฆฝ์ ์ธ 50GB ๋ณผ๋ฅจ์ ๊ฐ์ง๊ฒ ๋๋ ๊ฑฐ์ฃ ! ๐ฏ
StatefulSet์ ์ฅ์ :
โข ๊ฐ Pod๊ฐ ์์ ์ ์ธ ๋คํธ์ํฌ ID์ ์คํ ๋ฆฌ์ง๋ฅผ ๊ฐ์ ธ์
โข Pod๊ฐ ์ฌ์์๋์ด๋ ๊ฐ์ PVC์ ๋ค์ ์ฐ๊ฒฐ๋ผ์
โข ์์ฐจ์ ์ผ๋ก ์์ฑ/์ญ์ ๋์ด ์์ ํด์
โข ์ค์ผ์ผ๋งํ ๋ ์๋์ผ๋ก PVC๊ฐ ์์ฑ/์ญ์ ๋ผ์
๐ ์๋๋ฆฌ์ค 4: ๋ณผ๋ฅจ ์ค๋ ์ท์ ์ด์ฉํ ๋ฐฑ์
ํ๋ก๋์ ํ๊ฒฝ์์๋ ์ ๊ธฐ์ ์ธ ๋ฐฑ์ ์ด ํ์์์. ๋ณผ๋ฅจ ์ค๋ ์ท์ ํ์ฉํ ๋ฐฑ์ ์ ๋ต์ ์์๋ณผ๊น์? ๐พ
# VolumeSnapshotClass ์ ์
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshotClass
metadata:
name: csi-snapclass
driver: ebs.csi.aws.com
deletionPolicy: Retain
---
# ์ค๋
์ท ์์ฑ
apiVersion: snapshot.storage.k8s.io/v1
kind: VolumeSnapshot
metadata:
name: mysql-snapshot-20240101
spec:
volumeSnapshotClassName: csi-snapclass
source:
persistentVolumeClaimName: mysql-pvc
---
# ์ค๋
์ท์์ ๋ณต์
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mysql-pvc-restored
spec:
accessModes:
- ReadWriteOnce
storageClassName: mysql-storage
dataSource:
name: mysql-snapshot-20240101
kind: VolumeSnapshot
apiGroup: snapshot.storage.k8s.io
resources:
requests:
storage: 20Gi
์ด๋ ๊ฒ ํ๋ฉด:
โข ์ด์ ์ค์ธ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ค๋จ ์์ด ๋ฐฑ์
ํ ์ ์์ด์
โข ์ค๋
์ท์์ ์๋ก์ด PVC๋ฅผ ๋ง๋ค์ด ํ
์คํธ ํ๊ฒฝ ๊ตฌ์ถ ๊ฐ๋ฅ
โข ์ฌํด ๋ฐ์ ์ ๋น ๋ฅด๊ฒ ๋ณต๊ตฌ ๊ฐ๋ฅ
โข ์์ ๋ณต๊ตฌ(Point-in-Time Recovery) ๊ฐ๋ฅ
CronJob์ ์ฌ์ฉํด์ ๋งค์ผ ์๋์ผ๋ก ์ค๋ ์ท์ ์์ฑํ๋ ๊ฒ์ ์ถ์ฒํด์! ๊ทธ๋ฆฌ๊ณ ์ค๋๋ ์ค๋ ์ท์ ์๋์ผ๋ก ์ญ์ ํ๋ ์ ์ฑ ๋ ํจ๊ป ๊ตฌํํ์ธ์. ์คํ ๋ฆฌ์ง ๋น์ฉ์ ์ ๊ฐํ ์ ์์ด์.
๐ง ํธ๋ฌ๋ธ์ํ ๊ฐ์ด๋
โ ์์ฃผ ๋ฐ์ํ๋ ๋ฌธ์ ๋ค
๋ฌธ์ 1: PVC๊ฐ ๊ณ์ Pending ์ํ
์ฆ์: PVC๋ฅผ ์์ฑํ๋๋ฐ ๊ณ์ Pending ์ํ์ ๋จธ๋ฌผ๋ฌ ์์ด์.
์์ธ๊ณผ ํด๊ฒฐ:
โข ์ ํฉํ PV๊ฐ ์์: kubectl get pv๋ก Available ์ํ์ PV ํ์ธ
โข ์ฉ๋ ๋ถ์ผ์น: PVC๊ฐ ์์ฒญํ ์ฉ๋๋ณด๋ค ํฐ PV๊ฐ ํ์ํด์
โข ์ ๊ทผ ๋ชจ๋ ๋ถ์ผ์น: PV์ PVC์ accessModes๊ฐ ์ผ์นํด์ผ ํด์
โข Storage Class ๋ฌธ์ : ๋์ ํ๋ก๋น์ ๋์ด ์คํจํ์ ์ ์์ด์
โข ํ ๋น๋ ์ด๊ณผ: ํด๋ผ์ฐ๋ ์ ๊ณต์์ ๋ฆฌ์์ค ํ ๋น๋์ ํ์ธํ์ธ์
๋๋ฒ๊น
๋ช
๋ น:
# PVC ์์ธ ์ ๋ณด ํ์ธ
kubectl describe pvc [pvc-name]
# ์ด๋ฒคํธ ํ์ธ
kubectl get events --sort-by='.lastTimestamp'
# Storage Class ํ์ธ
kubectl get storageclass
# Provisioner ๋ก๊ทธ ํ์ธ (์: AWS EBS CSI)
kubectl logs -n kube-system -l app=ebs-csi-controller
๋ฌธ์ 2: Pod๊ฐ PVC๋ฅผ ๋ง์ดํธํ์ง ๋ชปํจ
์ฆ์: Pod๊ฐ ContainerCreating ์ํ์์ ๋ฉ์ถฐ์์ด์.
์์ธ๊ณผ ํด๊ฒฐ:
โข PVC๊ฐ Bound ์ํ๊ฐ ์๋: PVC๊ฐ ๋จผ์ ๋ฐ์ธ๋ฉ๋์ด์ผ ํด์
โข ๋
ธ๋ ๊ถํ ๋ฌธ์ : ๋
ธ๋๊ฐ ์คํ ๋ฆฌ์ง์ ์ ๊ทผํ ๊ถํ์ด ์์ ์ ์์ด์
โข CSI ๋๋ผ์ด๋ฒ ๋ฌธ์ : CSI ๋๋ผ์ด๋ฒ๊ฐ ์ ๋๋ก ์ค์น๋์ง ์์์ ์ ์์ด์
โข ๋ค์ค ๋
ธ๋ ๋ง์ดํธ: ReadWriteOnce ๋ณผ๋ฅจ์ ์ฌ๋ฌ ๋
ธ๋์์ ๋ง์ดํธํ๋ ค๊ณ ์๋
๋๋ฒ๊น
:
# Pod ์ด๋ฒคํธ ํ์ธ
kubectl describe pod [pod-name]
# PVC ์ํ ํ์ธ
kubectl get pvc
# ๋
ธ๋์ ๋ณผ๋ฅจ ๋ง์ดํธ ์ํ ํ์ธ
kubectl get volumeattachment
๋ฌธ์ 3: ๋ณผ๋ฅจ ํ์ฅ์ด ์ ๋จ
์ฆ์: PVC์ storage ๊ฐ์ ์ฆ๊ฐ์์ผฐ๋๋ฐ ์ค์ ๋ณผ๋ฅจ ํฌ๊ธฐ๊ฐ ๋์ด๋์ง ์์์.
์์ธ๊ณผ ํด๊ฒฐ:
โข allowVolumeExpansion์ด false: Storage Class์์ ํ์ฑํํด์ผ ํด์
โข ํ์ผ์์คํ
ํ์ฅ ํ์: ์ผ๋ถ ์คํ ๋ฆฌ์ง๋ Pod ์ฌ์์์ด ํ์ํด์
โข ์จ๋ผ์ธ ํ์ฅ ๋ฏธ์ง์: ์คํ ๋ฆฌ์ง ํ์
์ด ์จ๋ผ์ธ ํ์ฅ์ ์ง์ํ์ง ์์ ์ ์์ด์
ํด๊ฒฐ ๋ฐฉ๋ฒ:
# Storage Class ํ์ธ
kubectl get storageclass [class-name] -o yaml
# PVC ์ํ ํ์ธ
kubectl describe pvc [pvc-name]
# ํ์์ Pod ์ฌ์์
kubectl rollout restart deployment [deployment-name]
๋ฌธ์ 4: ์ฑ๋ฅ์ด ๋๋ฆผ
์ฆ์: ์ ํ๋ฆฌ์ผ์ด์
์ ๋์คํฌ I/O๊ฐ ์์๋ณด๋ค ๋๋ ค์.
์์ธ๊ณผ ํด๊ฒฐ:
โข IOPS ์ ํ: ์คํ ๋ฆฌ์ง ํ์
์ IOPS๊ฐ ๋ถ์กฑํ ์ ์์ด์
โข ๋คํธ์ํฌ ์ง์ฐ: Pod์ ๋ณผ๋ฅจ์ด ๋ค๋ฅธ ๊ฐ์ฉ ์์ญ์ ์์ ์ ์์ด์
โข ๋ฒ์คํธ ํฌ๋ ๋ง ์์ง: gp2 ๊ฐ์ ๋ฒ์คํธ ๊ฐ๋ฅ ๋ณผ๋ฅจ์ ํฌ๋ ๋ง์ด ์์ง๋์์ ์ ์์ด์
โข ๋์ ์ ๊ทผ: ๋๋ฌด ๋ง์ Pod๊ฐ ๊ฐ์ ๋ณผ๋ฅจ์ ์ ๊ทผํ๊ณ ์์ ์ ์์ด์
ํด๊ฒฐ ๋ฐฉ๋ฒ:
โข ๋ ๋์ IOPS์ ์คํ ๋ฆฌ์ง ํ์
์ผ๋ก ๋ณ๊ฒฝ (์: gp2 โ gp3 ๋๋ io1)
โข volumeBindingMode๋ฅผ WaitForFirstConsumer๋ก ์ค์
โข ๋ณผ๋ฅจ ํฌ๊ธฐ๋ฅผ ๋๋ ค์ ๊ธฐ๋ณธ IOPS ์ฆ๊ฐ
โข ์ ํ๋ฆฌ์ผ์ด์
๋ ๋ฒจ ์บ์ฑ ๊ตฌํ
๐ ๋ชจ๋ํฐ๋ง๊ณผ ๊ด์ฐฐ
๋ฌธ์ ๋ฅผ ์๋ฐฉํ๋ ค๋ฉด ์ง์์ ์ธ ๋ชจ๋ํฐ๋ง์ด ์ค์ํด์! ๋ค์ ๋ฉํธ๋ฆญ๋ค์ ์ถ์ ํ์ธ์: ๐
์คํ ๋ฆฌ์ง ์ฉ๋
โข ์ฌ์ฉ ์ค์ธ ์ฉ๋ vs ์ ์ฒด ์ฉ๋
โข ์ฉ๋ ์ฆ๊ฐ ์ถ์ธ
โข ์๊ณ๊ฐ ์๋ฆผ ์ค์ (์: 80% ์ฌ์ฉ ์)
์ฑ๋ฅ ๋ฉํธ๋ฆญ
โข IOPS (์ฝ๊ธฐ/์ฐ๊ธฐ)
โข ์ฒ๋ฆฌ๋ (MB/s)
โข ์ง์ฐ ์๊ฐ (latency)
โข ํ ๊น์ด
๋ฆฌ์์ค ์ํ
โข PV/PVC ๋ฐ์ธ๋ฉ ์ํ
โข ์คํจํ ํ๋ก๋น์ ๋
โข ์ค๋๋ Released PV
โข ์ค๋
์ท ์ฑ๊ณต/์คํจ์จ
# ์ ์ฉํ ๋ชจ๋ํฐ๋ง ๋ช
๋ น๋ค
# ๋ชจ๋ PV ์ํ ํ์ธ
kubectl get pv -o wide
# PVC ์ฌ์ฉ๋ ํ์ธ
kubectl get pvc --all-namespaces
# ํน์ ๋ค์์คํ์ด์ค์ ์คํ ๋ฆฌ์ง ์ฌ์ฉ๋
kubectl top pvc -n [namespace]
# ์ด๋ฒคํธ ๋ชจ๋ํฐ๋ง
kubectl get events --watch
# ์คํ ๋ฆฌ์ง ๊ด๋ จ ๋ฆฌ์์ค ์ ์ฒด ํ์ธ
kubectl get pv,pvc,sc,volumesnapshot --all-namespaces
โข ์ ๊ธฐ์ ์ธ ๋ฐฑ์ ์ค์ผ์ค ์ค์ โ
โข ๋ชจ๋ํฐ๋ง ๋ฐ ์๋ฆผ ๊ตฌ์ฑ โ
โข ์ฌํด ๋ณต๊ตฌ ๊ณํ ์๋ฆฝ โ
โข ์ฉ๋ ๊ณํ ๋ฐ ์์ธก โ
โข ๋ณด์ ์ ์ฑ ์ ์ฉ (์ํธํ, RBAC) โ
โข ๋น์ฉ ์ต์ ํ ์ ๋ต โ
๐ ๋ฏธ๋ ์ ๋ง๊ณผ ์ต์ ํธ๋ ๋
๐ CSI (Container Storage Interface)
์ฟ ๋ฒ๋คํฐ์ค ์คํ ๋ฆฌ์ง์ ๋ฏธ๋๋ CSI์์! CSI๋ ์ปจํ
์ด๋ ์ค์ผ์คํธ๋ ์ดํฐ์ ์คํ ๋ฆฌ์ง ์์คํ
์ฌ์ด์ ํ์ค ์ธํฐํ์ด์ค๋๋๋ค. ๐ฏ
CSI์ ์ฅ์ :
โข ๋ฒค๋ ์ค๋ฆฝ์ : ์ด๋ค ์คํ ๋ฆฌ์ง ์์คํ
์ด๋ CSI ๋๋ผ์ด๋ฒ๋ง ์์ผ๋ฉด ์ฌ์ฉ ๊ฐ๋ฅ
โข ์ฟ ๋ฒ๋คํฐ์ค ์ธ๋ถ ๊ฐ๋ฐ: ์ฟ ๋ฒ๋คํฐ์ค ๋ฆด๋ฆฌ์ค์ ๋
๋ฆฝ์ ์ผ๋ก ์
๋ฐ์ดํธ ๊ฐ๋ฅ
โข ํ๋ถํ ๊ธฐ๋ฅ: ์ค๋
์ท, ํด๋ก , ํ์ฅ ๋ฑ ๊ณ ๊ธ ๊ธฐ๋ฅ ์ง์
โข ํ๋ฐํ ์ํ๊ณ: ์๋ง์ ์คํ ๋ฆฌ์ง ๋ฒค๋๊ฐ CSI ๋๋ผ์ด๋ฒ ์ ๊ณต
์ฃผ์ CSI ๋๋ผ์ด๋ฒ๋ค:
โข AWS EBS CSI Driver
โข GCE PD CSI Driver
โข Azure Disk CSI Driver
โข Ceph CSI
โข NetApp Trident
โข Pure Storage
โข Dell EMC PowerStore
๐ฎ ์๋ก์ด ๊ธฐ๋ฅ๋ค
์ฟ ๋ฒ๋คํฐ์ค ์คํ ๋ฆฌ์ง๋ ๊ณ์ ์งํํ๊ณ ์์ด์. ์ต์ ๊ธฐ๋ฅ๋ค์ ์ดํด๋ณผ๊น์? โจ
Volume Populator
PVC๋ฅผ ์์ฑํ ๋ ์ด๊ธฐ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ์ฑ์์ฃผ๋ ๊ธฐ๋ฅ์ด์์. ์๋ฅผ ๋ค์ด S3 ๋ฒํท์ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ๋ค์ด๋ก๋ํ๊ฑฐ๋, ๋ค๋ฅธ PVC์ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ ์ ์์ด์. ๐ช
Generic Ephemeral Volumes
Pod์ ์๋ช
์ฃผ๊ธฐ์ ํจ๊ปํ๋ ์์ ๋ณผ๋ฅจ์ด์ง๋ง, PVC์ฒ๋ผ ๊ด๋ฆฌํ ์ ์์ด์. ํ
์คํธ๋ ์์ ์์
์ ์ ์ฉํด์. ๐
Volume Health Monitoring
๋ณผ๋ฅจ์ ๊ฑด๊ฐ ์ํ๋ฅผ ์๋์ผ๋ก ๋ชจ๋ํฐ๋งํ๊ณ , ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ์๋ฆผ์ ๋ณด๋ด์ค์. ๋์คํฌ ์ค๋ฅ๋ฅผ ์กฐ๊ธฐ์ ๋ฐ๊ฒฌํ ์ ์์ด์! ๐ฅ
Volume Group Snapshots
์ฌ๋ฌ ๋ณผ๋ฅจ์ ๋์์ ์ค๋
์ทํ ์ ์์ด์. ์ผ๊ด์ฑ ์๋ ๋ฐฑ์
์ด ํ์ํ ๋ถ์ฐ ์์คํ
์ ์๋ฒฝํด์. ๐ธ
๐ ๋ฉํฐ ํด๋ผ์ฐ๋์ ํ์ด๋ธ๋ฆฌ๋ ํด๋ผ์ฐ๋
์์ฆ์ ์ฌ๋ฌ ํด๋ผ์ฐ๋๋ฅผ ํจ๊ป ์ฌ์ฉํ๋ ๋ฉํฐ ํด๋ผ์ฐ๋ ์ ๋ต์ด ์ธ๊ธฐ์์. ์คํ ๋ฆฌ์ง๋ ์ด์ ๋ง์ถฐ ์งํํ๊ณ ์์ฃ ! โ๏ธ
Portworx: ๋ฉํฐ ํด๋ผ์ฐ๋ ํ๊ฒฝ์์ ์ผ๊ด๋ ์คํ ๋ฆฌ์ง ๊ฒฝํ ์ ๊ณต
Rook: Ceph๋ฅผ ์ฟ ๋ฒ๋คํฐ์ค์์ ์ฝ๊ฒ ์ด์ํ ์ ์๊ฒ ํด์ฃผ๋ ์คํผ๋ ์ดํฐ
Longhorn: Rancher์์ ๋ง๋ ๊ฒฝ๋ ๋ถ์ฐ ๋ธ๋ก ์คํ ๋ฆฌ์ง
OpenEBS: ์ฟ ๋ฒ๋คํฐ์ค ๋ค์ดํฐ๋ธ ์คํ ๋ฆฌ์ง ์๋ฃจ์
์ด๋ฐ ์๋ฃจ์
๋ค์ ํด๋ผ์ฐ๋ ์ ๊ณต์์ ์ข
์๋์ง ์๊ณ , ์จํ๋ ๋ฏธ์ค์ ํด๋ผ์ฐ๋๋ฅผ ๋๋๋ค๋ฉฐ ์ฌ์ฉํ ์ ์์ด์. ์ง์ ํ ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ์คํ ๋ฆฌ์ง์ฃ ! ๐
๐ก AI/ML ์ํฌ๋ก๋์ ์คํ ๋ฆฌ์ง
AI์ ๋จธ์ ๋ฌ๋ ์ํฌ๋ก๋๊ฐ ์ฆ๊ฐํ๋ฉด์ ์คํ ๋ฆฌ์ง ์๊ตฌ์ฌํญ๋ ๋ณํ๊ณ ์์ด์. ๐ค
ํน์ง:
โข ๋์ฉ๋ ๋ฐ์ดํฐ์
: TB~PB ๋จ์์ ํ๋ จ ๋ฐ์ดํฐ
โข ๋์ ์ฒ๋ฆฌ๋: ๋น ๋ฅธ ๋ฐ์ดํฐ ๋ก๋ฉ์ด ์ค์
โข ๊ณต์ ์ ๊ทผ: ์ฌ๋ฌ GPU Pod๊ฐ ๋์์ ๋ฐ์ดํฐ ์ ๊ทผ
โข ๋ฐ์ดํฐ ๋ฒ์ ๊ด๋ฆฌ: ์คํ ์ฌํ์ ์ํ ๋ฐ์ดํฐ ์ค๋
์ท
์๋ฃจ์
:
โข WekaFS: ๊ณ ์ฑ๋ฅ ๋ณ๋ ฌ ํ์ผ์์คํ
โข NVIDIA GPUDirect Storage: GPU๊ฐ ์ง์ ์คํ ๋ฆฌ์ง ์ ๊ทผ
โข Alluxio: ๋ฐ์ดํฐ ์ค์ผ์คํธ๋ ์ด์
ํ๋ซํผ
โข MinIO: S3 ํธํ ๊ฐ์ฒด ์คํ ๋ฆฌ์ง
์ฟ ๋ฒ๋คํฐ์ค ์คํ ๋ฆฌ์ง๋ฅผ ๋ ๊น์ด ๊ณต๋ถํ๊ณ ์ถ๋ค๋ฉด:
โข Kubernetes ๊ณต์ ๋ฌธ์์ Storage ์น์
โข CNCF์ Storage Landscape
โข CSI ์คํ ๋ฌธ์
โข ๊ฐ ํด๋ผ์ฐ๋ ์ ๊ณต์์ ์คํ ๋ฆฌ์ง ๊ฐ์ด๋
โข ์ฌ๋ฅ๋ท์ ํด๋ผ์ฐ๋/DevOps ์ ๋ฌธ๊ฐ๋ค๊ณผ ์๋ด ๐
๐ฌ ๋ง๋ฌด๋ฆฌํ๋ฉฐ
์! ์ฌ๊ธฐ๊น์ง ์ ๋ง ๊ธด ์ฌ์ ์ด์์ฃ ? ๐
Persistent Volume๊ณผ PVC์ ๋ํด ์ ๋ง ๋ง์ ๊ฒ์ ๋ฐฐ์ ์ด์!
ํต์ฌ ๋ด์ฉ์ ๋ค์ ํ๋ฒ ์ ๋ฆฌํด๋ณผ๊น์? ๐
PV (Persistent Volume)
โข ํด๋ฌ์คํฐ ๋ ๋ฒจ์ ์คํ ๋ฆฌ์ง ๋ฆฌ์์ค
โข ์ค์ ๋ฌผ๋ฆฌ์ /ํด๋ผ์ฐ๋ ์คํ ๋ฆฌ์ง๋ฅผ ์ถ์ํ
โข ๊ด๋ฆฌ์๊ฐ ํ๋ก๋น์ ๋ํ๊ฑฐ๋ ๋์ ์ผ๋ก ์์ฑ
โข Pod ์๋ช
์ฃผ๊ธฐ์ ๋
๋ฆฝ์
PVC (Persistent Volume Claim)
โข ์ฌ์ฉ์์ ์คํ ๋ฆฌ์ง ์์ฒญ
โข ๋ค์์คํ์ด์ค ๋ ๋ฒจ ๋ฆฌ์์ค
โข PV์ 1:1 ๋ฐ์ธ๋ฉ
โข Pod์์ ๋ณผ๋ฅจ์ผ๋ก ๋ง์ดํธ
Storage Class
โข ๋์ ํ๋ก๋น์ ๋์ ํต์ฌ
โข ์คํ ๋ฆฌ์ง ์์ฑ ๋ฐฉ๋ฒ ์ ์
โข ๋ค์ํ ์คํ ๋ฆฌ์ง ํ์
์ง์
โข ์๋ํ์ ํจ์จ์ฑ ์ ๊ณต
์ฟ ๋ฒ๋คํฐ์ค์์ ์คํ ๋ฆฌ์ง๋ฅผ ๋ค๋ฃจ๋ ๊ฑด ์ฒ์์๋ ๋ณต์กํด ๋ณด์ผ ์ ์์ด์. ํ์ง๋ง PV์ PVC์ ๊ฐ๋
์ ์ ๋๋ก ์ดํดํ๋ฉด, ์ค์ ๋ก๋ ๋งค์ฐ ์ฐ์ํ๊ณ ๊ฐ๋ ฅํ ์์คํ
์ด๋ผ๋ ๊ฑธ ์๊ฒ ๋ ๊ฑฐ์์! ๐ช
ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ํ๊ฒฝ์์ ๋ฐ์ดํฐ ์์์ฑ์ ์ ๋ง ์ค์ํ ์ฃผ์ ์์. ์ปจํ
์ด๋๋ ์์์ ์ด์ง๋ง, ๋ฐ์ดํฐ๋ ์๊ตฌ์ ์ด์ด์ผ ํ๋๊น์. PV์ PVC๋ ์ด ๋ ์ธ๊ณ๋ฅผ ์๋ฒฝํ๊ฒ ์ฐ๊ฒฐํด์ฃผ๋ ๋ค๋ฆฌ ์ญํ ์ ํ์ฃ . ๐
์ค๋ฌด์์ ์ฌ์ฉํ ๋๋:
โข ์ํฌ๋ก๋ ํน์ฑ์ ๋ง๋ ์คํ ๋ฆฌ์ง ํ์
์ ํ
โข ์ ์ ํ ๋ฐฑ์
์ ๋ต ์๋ฆฝ
โข ์ง์์ ์ธ ๋ชจ๋ํฐ๋ง๊ณผ ์ต์ ํ
โข ๋ณด์๊ณผ ๋น์ฉ์ ํจ๊ป ๊ณ ๋ ค
โข ์ฌํด ๋ณต๊ตฌ ๊ณํ ์ค๋น
์ด๋ฐ ๊ฒ๋ค์ ์์ง ๋ง์ธ์! ๐ฏ
ํน์ ์ฟ ๋ฒ๋คํฐ์ค ์คํ ๋ฆฌ์ง ๊ตฌ์ถ์ด๋ ์ต์ ํ์ ์ด๋ ค์์ ๊ฒช๊ณ ๊ณ์ ๊ฐ์? ์ฌ๋ฅ๋ท์๋ ๋ค์ํ ํด๋ผ์ฐ๋์ DevOps ์ ๋ฌธ๊ฐ๋ค์ด ์์ด์. ์ฌ๋ฌ๋ถ์ ํ๋ก์ ํธ์ ๋ฑ ๋ง๋ ์คํ ๋ฆฌ์ง ์ ๋ต์ ํจ๊ป ๊ณ ๋ฏผํด์ค ์ ์๋ต๋๋ค! ๐ผ
์ฟ ๋ฒ๋คํฐ์ค์ ์ธ๊ณ๋ ๋๊ณ ๊น์ด์. ํ์ง๋ง ํ ๊ฑธ์์ฉ ๋ฐฐ์๋๊ฐ๋ค ๋ณด๋ฉด ์ด๋์ ์ ๋ฌธ๊ฐ๊ฐ ๋์ด ์์ ๊ฑฐ์์. ์ฌ๋ฌ๋ถ์ ํด๋ผ์ฐ๋ ๋ค์ดํฐ๋ธ ์ฌ์ ์ ์์ํฉ๋๋ค! ๐โจ
Happy Kubernetes-ing! ์ฆ๊ฑฐ์ด ์ฝ๋ฉ ๋์ธ์! ๐๐
๊ด๋ จ ํค์๋
๋๊ธ 0
์ง์์ธ์ ์ฒ - ์ง์ ์ฌ์ฐ๊ถ ๋ณดํธ ๊ณ ์ง
์ง์ ์ฌ์ฐ๊ถ ๋ณดํธ ๊ณ ์ง
- ์ ์๊ถ ๋ฐ ์์ ๊ถ: ๋ณธ ์ปจํ ์ธ ๋ ์ฌ๋ฅ๋ท์ ๋ ์ AI ๊ธฐ์ ๋ก ์์ฑ๋์์ผ๋ฉฐ, ๋ํ๋ฏผ๊ตญ ์ ์๊ถ๋ฒ ๋ฐ ๊ตญ์ ์ ์๊ถ ํ์ฝ์ ์ํด ๋ณดํธ๋ฉ๋๋ค.
- AI ์์ฑ ์ปจํ ์ธ ์ ๋ฒ์ ์ง์: ๋ณธ AI ์์ฑ ์ปจํ ์ธ ๋ ์ฌ๋ฅ๋ท์ ์ง์ ์ฐฝ์๋ฌผ๋ก ์ธ์ ๋๋ฉฐ, ๊ด๋ จ ๋ฒ๊ท์ ๋ฐ๋ผ ์ ์๊ถ ๋ณดํธ๋ฅผ ๋ฐ์ต๋๋ค.
- ์ฌ์ฉ ์ ํ: ์ฌ๋ฅ๋ท์ ๋ช ์์ ์๋ฉด ๋์ ์์ด ๋ณธ ์ปจํ ์ธ ๋ฅผ ๋ณต์ , ์์ , ๋ฐฐํฌ, ๋๋ ์์ ์ ์ผ๋ก ํ์ฉํ๋ ํ์๋ ์๊ฒฉํ ๊ธ์ง๋ฉ๋๋ค.
- ๋ฐ์ดํฐ ์์ง ๊ธ์ง: ๋ณธ ์ปจํ ์ธ ์ ๋ํ ๋ฌด๋จ ์คํฌ๋ํ, ํฌ๋กค๋ง, ๋ฐ ์๋ํ๋ ๋ฐ์ดํฐ ์์ง์ ๋ฒ์ ์ ์ฌ์ ๋์์ด ๋ฉ๋๋ค.
- AI ํ์ต ์ ํ: ์ฌ๋ฅ๋ท์ AI ์์ฑ ์ปจํ ์ธ ๋ฅผ ํ AI ๋ชจ๋ธ ํ์ต์ ๋ฌด๋จ ์ฌ์ฉํ๋ ํ์๋ ๊ธ์ง๋๋ฉฐ, ์ด๋ ์ง์ ์ฌ์ฐ๊ถ ์นจํด๋ก ๊ฐ์ฃผ๋ฉ๋๋ค.

๋๊ธ ์์ฑ
์ด ๊ธ์ ๋ํ ์ฌ๋ฌ๋ถ์ ์๊ฐ์ ๋ค๋ ค์ฃผ์ธ์
๋ก๊ทธ์ธ์ด ํ์ํฉ๋๋ค
๋๊ธ์ ์์ฑํ๋ ค๋ฉด ๋จผ์ ๋ก๊ทธ์ธํด์ฃผ์ธ์.