๐ ํ๋ก๋น์ ๋ - Storage - K8S - hostPath
๐ณ๏ธโ๐ [๊ถ๊ธํ์ ]
๐[๋ชฉ์ฐจ]
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: local-storage1
provisioner: kubernetes.io/no-provisioner
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: local-storage2
provisioner: kubernetes.io/no-provisioner
reclaimPolicy: Retain
volumeBindingMode: Immediate
allowVolumeExpansion: true
---
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: local-storage3
provisioner: kubernetes.io/no-provisioner
reclaimPolicy: Delete
volumeBindingMode: WaitForFirstConsumer
allowVolumeExpansion: true
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv1
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
storageClassName: local-storage1
hostPath:
path: /mnt/data1
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv2
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
storageClassName: local-storage2
hostPath:
path: /mnt/data2
---
apiVersion: v1
kind: PersistentVolume
metadata:
name: my-pv3
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Delete
storageClassName: local-storage3
hostPath:
path: /mnt/data3
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc1
spec:
storageClassName: local-storage1
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc2
spec:
storageClassName: local-storage2
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: my-pvc3
spec:
storageClassName: local-storage3
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1Gi
ImmediatePVC๋ฅผ ์์ฑํ๋ฉด ์ฆ์ PV ๋ฐ์ธ๋ฉ ์๋ |
WaitForFirstConsumerPVC๊ฐ ์ฐ๊ฒฐ๋ Pod์ด ์ค์ผ์ค๋ง๋ ๋ PV ์์ฑ ๋ฐ ๋ฐ์ธ๋ฉ ์ํ โ ๋ ธ๋ ์ง์ญ ๊ณ ๋ ค ๊ฐ๋ฅ
DeletePVC ์ญ์ ์ PV๋ ์ญ์
Retain |PVC ์ญ์ ํ PV๋ ๋จ๊ฒจ๋ (๋ฐ์ดํฐ ๋ณด์กด)
k apply -f my-sc-poc.yaml
storageclass.storage.k8s.io/local-storage1 created
storageclass.storage.k8s.io/local-storage2 created
storageclass.storage.k8s.io/local-storage3 created
k get sc
NAME PROVISIONER RECLAIMPOLICY VOLUMEBINDINGMODE ALLOWVOLUMEEXPANSION AGE
local-storage1 kubernetes.io/no-provisioner Retain WaitForFirstConsumer true 8s
local-storage2 kubernetes.io/no-provisioner Retain Immediate true 8s
local-storage3 kubernetes.io/no-provisioner Delete WaitForFirstConsumer true 8s
ssh slave1
sudo mkdir /mnt/data{1..3}
k apply -f my-pv-poc.yaml
persistentvolume/my-pv1 created
persistentvolume/my-pv2 created
persistentvolume/my-pv3 created
k get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
my-pv1 1Gi RWO Retain Available 11m
my-pv2 1Gi RWO Retain Available 12m
my-pv3 1Gi RWO Retain Available 11m
k apply -f my-pvc-poc.yaml
persistentvolumeclaim/my-pvc1 created
persistentvolumeclaim/my-pvc2 created
persistentvolumeclaim/my-pvc3 created
k get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
my-pvc1 Pending local-storage1 17s
my-pvc2 Bound my-pv2 1Gi RWO local-storage2 17s
my-pvc3 Pending local-storage3 17s
Immediatepv๊ฐ Immediate์ธ ๊ฒฝ์ฐ POD ์์ฑ ์ฌ๋ถ์ ๊ด๊ณ์์ด ์๋ ์ฒ๋ผ ์กฐ๊ฑด์ ๋ง๋ pvc์ Bound ๋๋ค.
k get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
my-pvc1 Pending local-storage1 17s
my-pvc2 Bound my-pv2 1Gi RWO local-storage2 17s
my-pvc3 Pending
WaitForFirstConsumerapiVersion: v1
kind: Pod
metadata:
name: my-pod1
spec:
containers:
- name: app
image: busybox
command: ["/bin/sh", "-c", "sleep 3600"]
volumeMounts:
- name: my-storage
mountPath: /data
volumes:
- name: my-storage
persistentVolumeClaim:
claimName: my-pvc1
---
apiVersion: v1
kind: Pod
metadata:
name: my-pod3
spec:
containers:
- name: app
image: busybox
command: ["/bin/sh", "-c", "sleep 3600"]
volumeMounts:
- name: my-storage
mountPath: /data
volumes:
- name: my-storage
persistentVolumeClaim:
claimName: my-pvc3
k apply -f my-pod-poc.yaml
pod/my-pod1 created
k get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
my-pvc1 Bound my-pv1 1Gi RWO local-storage1 14m
my-pvc2 Bound my-pv2 1Gi RWO local-storage2 14m
my-pvc3 Bound my-pv3 1Gi RWO local-storage3 14m
Deletek get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
my-pv1 1Gi RWO Retain Bound default/my-pvc1 local-storage1 8s
my-pv2 1Gi RWO Retain Bound default/my-pvc2 local-storage2 8s
my-pv3 1Gi RWO Delete Bound default/my-pvc3 local-storage3 8s
StorageClass์ reclaimPolicy: Delete๋ ๋์ ํ๋ก๋น์ ๋(PVC โ PV ์๋ ์์ฑ) ์ ์ฌ์ฉํ ๋์๋ง ์๋ฏธ๊ฐ ์๋ค.
์ฆ, PVC๊ฐ ์์ฑ๋ ๋ ์๋์ผ๋ก ์์ฑ๋๋ PV์ ๊ธฐ๋ณธ reclaimPolicy๋ฅผ ์ค์ ํ๋ ์ฉ๋์ด๋ค. ์์์
์ผ๋ก PV๋ฅผ ์์ฑํ ๋๋ PV์ persistentVolumeReclaimPolicy: Delete ์ฒ๋ผ ๋ช
๊ธฐ๋์ด์ผ ํ๋ค.
my-pv3์ RECLAIM POLICY ๊ฐ Delete ์ธ ๊ฒ์ ํ์ธํ ์ ์๋ค.
pod,pvc๋ฅผ ์ญ์ ํ๋ค.
k delete -f my-pod-poc.yaml
k delete pvc my-pvc1
k delete pvc my-pvc3
k get pvc
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
my-pvc2 Bound my-pv2 1Gi RWO local-storage2 5m46s
k get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
my-pv1 1Gi RWO Retain Released default/my-pvc1 local-storage1 5m53s
my-pv2 1Gi RWO Retain Bound default/my-pvc2 local-storage2 5m53s
my-pv3 1Gi RWO Delete Failed default/my-pvc3 local-storage3 5m53s
local ๋ณผ๋ฅจ์ ๋ณดํต reclaimPolicy: Retain์ผ๋ก ์จ์ผ ํ๋ค. local ๋ณผ๋ฅจ์ ์๋์ผ๋ก ์์ฑ๋๋ ๋ก์ปฌ ๋์คํฌ ๊ฒฝ๋ก ๊ธฐ๋ฐ์ด๋ค (/mnt/data ๋ฑ). ์ด๋ก ์ธํด ๋ณด์/์์ ์ฑ ๋ฌธ์ ๋ก Kubernetes๋ ๋ ธ๋์ ๋ก์ปฌ ํ์ผ์์คํ ์ ์๋์ผ๋ก ์ญ์ ํ ์ ์๋ค.
๊ผญ ์๋ ์ญ์ ๋ฅผ ํ์ธํ๊ณ ์ถ๋ค๋ฉด ๋ ธ๋ ๋ง์ดํธ ๊ฒฝ๋ก๋ฅผ /mnt/data ๋์ ์ /tmp/data ํํ๋ก ์ฌ์ฉํ๋ฉด ๋๋ค. ์ด ์ํ์์ ๊ฐ์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉด ์๋์ฒ๋ผ pvc ์ญ์ ์ ๋์์ pv๊ฐ ์ญ์ ๋๋ค.
k get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
my-pv1 1Gi RWO Retain Released default/my-pvc1 local-storage1 66s
my-pv2 1Gi RWO Retain Bound default/my-pvc2 local-storage2 66s
Retain์ ๊ณผ์ ์์ Delete ์ํ์ PV๊ฐ PVC์ญ์ ์ ๋์์ ์์ด์ก์ง๋ง, Retain์ํ์ธ my-pv1์ ๋จ์ ์์์ ํ์ธํ ์ ์๋ค.
์ฐธ๊ณ
[^1]: StorageClass๋ Kubernetes์์ ๋์ ํ๋ก๋น์ ๋์ ๊ฐ๋ฅํ๊ฒ ํด์ฃผ๋ ๋ฆฌ์์ค์ด๋ค.์ฌ์ฉ์๊ฐ PVC(PersistentVolumeClaim)๋ฅผ ๋ง๋ค๋ฉด, PVC๊ฐ ์ฐธ์กฐํ๋ StorageClass์ ๋ฐ๋ผ ์๋ง์ PV๊ฐ ์๋์ผ๋ก ์์ฑ๋๋ค.์คํ ๋ฆฌ์ง ํด๋์ค ๊ฐ์
[^2]: Kubernetes์์ PersistentVolume (PV) ๋ ํด๋ฌ์คํฐ ๋ด์์ ๋ฐ์ดํฐ๋ฅผ ์๊ตฌ์ ์ผ๋ก ์ ์ฅํ ์ ์๋๋ก ์ง์ํ๋ ์์์ด๋ค. ์ผ๋ฐ์ ์ธ Kubernetes Pod๋ ์์ฑ๊ณผ ์ญ์ ๊ฐ ๋ฐ๋ณต๋๋ฏ๋ก, Pod์๋ ์๋ช ์ด ๋ค๋ฅด๊ณ ๋ ๋ฆฝ์ ์ธ ์ ์ฅ์๊ฐ ํ์ํ ๋ PV๋ฅผ ์ฌ์ฉํ๋ค.PV ๊ฐ์
[^3]: Kubernetes์์ PVC (PersistentVolumeClaim) ๋ ์ฌ์ฉ์๊ฐ ์ํ๋ ์คํ ๋ฆฌ์ง ์์์ ์์ฒญํ๋ ๊ฐ์ฒด๋ค. ์ฝ๊ฒ ๋งํด, ์ฌ์ฉ์๊ฐ "๋ 5Gi ํฌ๊ธฐ์ ๋ณผ๋ฅจ์ด ํ์ํด!"๋ผ๊ณ Kubernetes์ ์์ฒญํ๋ ๋ฐฉ์์ด๋ค.PVC ๊ฐ์
[^4]: ๋ชจ๋ ๋ ธ๋์ ํด๋ ์์ฑ์ด ํ์ํ๋ค. ์๊ณ ๋ฅผ ๋๊ธฐ ์ํด ๋ฐ๋ชฌ์ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ด ์๋ค. ํ๋ก๋น์ ๋ ๋ฐ๋ชฌ์