๋ฐ์ดํฐ๋ฅผ ์์ ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉ๋์ด cluster์ ๋ถ๋ฆฌ๋์ด ์กด์ฌ
๊ด๋ฆฌ์๊ฐ ์ ์ฅ์ฉ๋/access mode๋ฅผ ์ค์ ํด pv๋ฅผ ๋ง๋ค๊ณ ์ฌ์ฉ์๊ฐ pvc๋ฅผ ๋ง๋ค๋ฉด k8s๊ฐ ์ ์ ํ pv๋ฅผ ์ฐ๊ฒฐํด์ฃผ๋ฉฐ access mode์๋ 3๊ฐ์ง๊ฐ ์กด์ฌํ๋ค. ์ด๋ฐ ์ฐ๊ฒฐ๋ฐฉ์์ volume์ด ํ์ํ ๋๋ง๋ค pv๋ฅผ ๋ง๋ค์ด์ฃผ์ด์ผ ํ๊ณ ์ด๋ฅผ ์ฐ๊ฒฐํ๊ธฐ ์ํด storage/access mode๋ฅผ ๋ง์ถ์ฃผ์ด์ผ ํ๋๋ฐ ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด dynamic provisioning์ด ์กด์ฌํ๋ค.
# namespace๋ด์ ๋ชจ๋ objects๋ค ์กฐํ
kubectl get all -n storagesos-operator
# Force Deletion
kubectl delete persistentvolumeclaims pvc-fast1 --namespace=default --grace-period 0 --force
kubectl delete persistentvolume pvc-b53fd802-3919-4fb0-8c1f-02221a3e4bc0 --grace-period 0 --force
# StorageClass ํ์ธ
kubectl get storageclasses.storage.k8s.io์ปจํ ์ด๋๋ค๋ผ๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๊ธฐ ์ํด ๋ณผ๋ฅจ์ ์ฌ์ฉํ๋ ๊ฒ์ผ๋ก ์ด ๋ณผ๋ฅจ์ด ์ฒ์ ์์ฑ๋ ๋๋ ํญ์ ๋น์ด์๊ธฐ ๋๋ฌธ์ empty๋ผ ๋ถ๋ฆฌ๋ ๊ฒ
๋ณผ๋ฅจ์ ํ๋์์ ์์ฑ์ด ๋๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ํ๋๊ฐ ์ญ์ ๊ฐ ๋๋ค๋ฉด ๊ฐ์ด ์ญ์ ๊ฐ ๋๊ธฐ ๋๋ฌธ์ ์ผ์์ ์ธ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ ์ด์ฉํ๋ ๊ฒ์ด ์ข๋ค.
apiVersion: v1
kind: Pod
metadata:
name: pod-volume-1
spec:
containers:
- name: container1
image: tmkube/init
volumeMounts:
- name: empty-dir
mountPath: /mount1
- name: container2
image: tmkube/init
volumeMounts:
- name: empty-dir
mountPath: /mount2
volumes:
- name: empty-dir
emptyDir: {}ํ๋๋ค์ด ๋ค์ด์๋ ๋ ธ๋์ path๋ฅผ ๋ณผ๋ฅจ์ผ๋ก์จ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๊ฐ hostPath์ด๋ฉฐ, ํ๋๋ค์ด ๋ณผ๋ฅจ์ ๋ง์ดํธํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ํ๋๊ฐ ์ฃฝ์ด๋ ๋ณผ๋ฅจ์ด ์ญ์ ๋์ง๋ ์๋๋ค. ํ์ง๋ง ํ๋๊ฐ ์ฃฝ๊ณ ์ฌ์์ฑ๋๋ ์๊ฐ์ ์ด์ ์ ์์ฑ๋์๋ ๋ ธ๋์ ์์ฑ๋๋ฆฌ๋ผ๋ ๋ณด์ฅ์ด ์๋๋ฐ ์ด๋ ๊ฒ ๋ค๋ฅธ ๋ ธ๋์ ํ๋๊ฐ ์ฌ์์ฑ๋๊ฒ ๋๋ฉด ์ด์ ์ ๋ง์ดํธํ๋ ๋ณผ๋ฅจ์ ์ ๊ทผํ ์ ์๊ฒ ๋๋ค.
ํ๋๊ฐ ์์ฑ๋ ๋๋ง๋ค ๋ ธ๋๋ด์ ๋ณผ๋ฅจ์ ์๋ก ๋ง์ดํธํด์ค์ผ๋ก์จ ํด๊ฒฐํ ์ ์์ง๋ง k8s๊ฐ ์๋์ ์ผ๋ก ์ง์ํด์ฃผ๋ ๊ธฐ๋ฅ์ด์๋๋ผ ์ด์์๊ฐ ๊ฐ๋ณ์ ์ผ๋ก ์ค์ ํด์ฃผ์ด์ผ ํ๋ ๋ถ๋ถ์ด๋ผ ์ค์์ ์ฌ์ง๊ฐ ์กด์ฌํ๋ค.
apiVersion: v1
kind: Pod
metadata:
name: pod-volume-2
spec:
cointainers:
- name: cotainer
image: tmkube/init
volumeMounts:
- name: host-path
mountPath: /mount1
volumes:
- name: host-path
host-path:
path: /node-v
type: Diretory์ด๋ host-path์ path๋ ํ๋๊ฐ ์์ฑ๋๊ธฐ ์ ์ ๋
ธ๋์ ์์ฑ์ด ๋์ด์์ด์ผ ๋ง์ดํธ๊ฐ ๊ฐ๋ฅํ๋ค.
- DirectoryOrCreate : ์ค์ ๊ฒฝ๋ก๊ฐ ์๋ค๋ฉด ์์ฑ
- Directory : ์ค์ ๊ฒฝ๋ก๊ฐ ์์ด์ผ์ง ๊ฐ๋ฅ
- FileOrCreate : ์ค์ ๊ฒฝ๋ก์ ํ์ผ์ด ์๋ค๋ฉด ์์ฑ
- File : ์ค์ ๊ฒฝ๋ก์ ํ์ผ์ด ์์ด์ผ ๊ฐ๋ฅ
ํ๋๊ฐ์ด ๋ฐ์ดํฐ๋ฅผ ์์์ฑ์ ๊ฐ์ง ์ํ๋ก ์ฌ์ฉํ๊ณ ์ถ์๋ ์ฌ์ฉํ ์์๋๋ฐ PV๋ ์ธํ๋ผ๋ฅผ ๊ด๋ฆฌํ๋ Admin์ด ์ค์ ํ๋ฉฐ, PVC๋ ์ด volume๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
#PV
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-03
spec:
capacity:
storage: 2G
accessModes:
- ReadWriteOnce
local:
path: /node-v
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- {key: kubernetes.io/hostname, operator: In, values: [k8s-node1]}#PV
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-01
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1G
storageClassName: ""#Pod
apiVersion: v1
kind: Pod
metadata:
name: pod-volume-3
spec:
containers:
- name: container
image: kubetm/init
volumeMounts:
- name: pvc-pv
mountPath: /mount3
volumes:
- name : pvc-pv
persistentVolumeClaim:
claimName: pvc-01#PV
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-04
labels:
pv: pv-04
spec:
capacity:
storage: 2G
accessModes:
- ReadWriteOnce
local:
path: /node-v
nodeAffinity:
required:
nodeSelectorTerms:
- matchExpressions:
- {key: kubernetes.io/hostname, operator: In, values: [k8s-node1]}#PV
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-04
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2G
storageClassName: ""
selector:
matchLabels:
pv: pv-04
์ฌ์ฉ์๊ฐ pvc๋ฅผ ๋ง๋ค๋ฉด ์์์ pv๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ volume์ ์ฐ๊ฒฐํด์ฃผ๋ ๊ธฐ๋ฅ์ด๋ฉฐ ๋ชจ๋ pv์๋ ๊ฐ๊ฐ์ ์ํ๊ฐ ์กด์ฌํ๊ณ pv๋ฅผ ์ญ์ ํ ๋ ์ ์ฑ
์ ์์๋ ์กด์ฌํ๋ค.
์์์ local PV๋ฅผ ์ด์ฉํด PVC๋ฅผ ๋ง๋ค๋ ClassName์ ""๋ก ์ฃผ์๋๋ฐ ์ด์ฒ๋ผ ""๋ local, ํน์ solution/cloud๋ฅผ ์ด์ฉํ PV๋ฅผ ์ฌ์ฉํ ๋๋ ํด๋น storageClass๋ฅผ ์ฃผ์ด์ง๋ฉด ํด๋น volume์ด ๋์ ์ผ๋ก ๋ง๋ค์ด์ง๋ฉฐ default Storage๋ฅผ ์์ฑํด๋์๋ค๋ฉด className์ ์๋ฌด๊ฒ๋ ์ฃผ์ด์ง์ง ์์ผ๋ฉด defalut class๋ฅผ ์ด์ฉํด ์์ฑ์ด๋๋ค.
# Storage class
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: default
annotations:
# Default StorageClass๋ก ์ ํ
storageclass.kubernetes.io/is-default-class: "true"
# ๋์ ์ผ๋ก PV์์ฑ์ PersistentVolumeReclaimPolicy ์ ํ (Default:Delete)
reclaimPolicy: Retain, Delete, Recycle
provisioner: kubernetes.io/storageos
# provisioner ์ข
๋ฅ์ ๋ฐ๋ผ parameters์ ํ์ ๋ด์ฉ ๋ค๋ฆ
parameters: #PV
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-hostpath1
spec:
capacity:
storage: 1G
accessModes:
- ReadWriteOnce
hostPath:
path: /mnt/hostpath
type: DirectoryOrCreate#PVC (local)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-hostpath1
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1G
storageClassName: ""#PVC (storage Class)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-fast1
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 1G
storageClassName: "fast"#PVC (default)
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-default1
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 2G- available : ์ฒ์ pv๊ฐ ์์ฑ๋์ด์์๋์ ์ํ
- Bound : PVC์ ์ฐ๊ฒฐ๋์ด ์๋ ์ํ๋ก PV๋ฅผ ์ง์ ๋ง๋๋ ๊ฒฝ์ฐ์๋ volume์ ์ค์ ๋ฐ์ดํฐ๊ฐ ๋ง๋ค์ด์ง ์ํ๋ ์๋๊ณ pod๊ฐ pvc๋ฅผ ์ฌ์ฉํด์ ๊ณ ์ ์ด ๋ ๋ ์ค์ ๋ฐ์ดํฐ๊ฐ ๋ง๋ค์ด์ง๋ค.
pod๋ฅผ ์ญ์ ํ๋ค๊ณ ํด์ pvc๊ฐ ์ญ์ ๋๋ ๊ฒ์ด ์๋๊ธฐ ๋๋ฌธ์ ์ํ๊ฐ ๋ณํ์ง ์๋๋ค.
- Released : pvc๊ฐ ์ญ์ ๋์ด pv์ ์ฐ๊ฒฐ์ด ๋์ด์ง ์ํ
- Failed : ์ ์ํ ์ ํ๊ฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ํ
- Retain : ์ด ์ ์ฑ ์ด default๋ก pvc๊ฐ ์ญ์ ๋์์๋ pv๊ฐ released๋ก ๋ณํ๋๋ฉฐ ์ค์ ๋ฐ์ดํฐ๋ ์ ์ง ๋์ง๋ง ์ด pv๋ฅผ ๋ค๋ฅธ pvc์ ์ฐ๊ฒฐํ ์ ์์ด ์๋์ผ๋ก pv๋ฅผ ์ญ์ ํด์ฃผ์ด์ผ ํ๋ค.
- Delete : pvc๋ฅผ ์ญ์ ํ๋ฉด ๊ฐ์ด pv๊ฐ ์ญ์ ๋์ด, storageClass๋ฅผ ์ฌ์ฉ์ default ๊ฐ์ด๋ค.
- Recycle : ํ์ฌ๋ deprecated๋ ์ ์ฑ ์ผ๋ก ๋ฐ์ดํฐ๋ ์ญ์ ๋์ง๋ง pv๋ ์ฌ์ฌ์ฉ์ด ๊ฐ๋ฅํ ์ ์ฑ ์ด๋ค.
#Recycle
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-recycle1
spec:
persistentVolumeReclaimPolicy: Recycle
capacity:
storage: 3G
accessModes:
- ReadWriteOnce
hostPath:
path: /tmp/recycle
type: DirectoryOrCreateRecycle ์ ์ฑ ์ /tmp/๋ก ์์ํ๋ path์์๋ง ๊ฐ๋ฅํ๋ค.



