PV와 PVS
- 개발자들은 백엔솔루션이 무엇인지 상관없이 알아서 배정되는 방식 : PV, PVC
- 백엔솔루션 부분을 별도로 분리하여 PV로 관리 개발자는 PVC 요청서만 만들면 된다.
- 개발자는 더 쉽게 저장공간을 사용할 수 있다.
- PVC : 사용자 정의 리소스 (Client 사이드 리소스)
1. PV
1.Retain : PV(볼륨)를 보존, 또한 Data도 보존
2.Delete : PV(볼륨) 삭제, Data도 삭제
3.Recycle : 재활용 하겠다. Data는 삭제, PV(볼륨) 보존 (PV만 또 사용하겠다는 의미)
- 추상적인 볼륨 PV1, PV2, PV3를 정의
- PVC 요청서를 요청 -> Pv2와 연결
- POD yaml 명세서에 name을 맞춰 PVC와 연결된 상태
- 만약 이상태에서 PVC를 삭제 하려고 시도하면? 사용하는 POD가 없어야 삭제가 가능하다.
- 즉 위 3가지는 삭제시 policy 이다.
- 드라이버마다 3가지 policy를 제공하는 수준이 다르므로 판단이 필요하다.
accessModes: ReadWriteOnce (한쪽에서만 마운트해서 사용하겠다는 의미)
pv.yaml 생성
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-1
spec:
capacity:
storage: 1Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain #PV가 삭제되도 유지한다
nfs:
path: /share
server: ip-172-31-4-27 #<-- Edit to match master node
readOnly: false
pv2.yaml 생성
apiVersion: v1
kind: PersistentVolume
metadata:
name: pv-2
spec:
capacity:
storage: 200Mi
accessModes:
- ReadWriteOnce
persistentVolumeReclaimPolicy: Recycle
hostPath:
path: /test
엑세스모드가 일치하는것 이 매칭되는지 확인
root@ip-172-31-4-27:~/pv# kubectl create -f pv.yaml
persistentvolume/pv-1 created
root@ip-172-31-4-27:~/pv# kubectl create -f pv2.yaml
persistentvolume/pv-2 created
root@ip-172-31-4-27:~/pv# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv-1 1Gi RWX Retain Available 16s
pv-2 200Mi RWO Recycle Available 10s
PVC
- 개발자가 작성 후 바인딩해서 사용하는 방식
Access Mode
- ReadWriteOnce
- ReadOnlyMany
- ReadWriteMany
PVC 가 생성시 요청 Capacity 를 수용하고 Access Mode 를 포함하는 PV 를 찾아 Binding.
Access Mode 는 Pod 단위가 아닌 Worker node 가 volume 에 동시 사용 가능한지에 대한 항목.
pvc.yaml 명세서 정의
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: pvc-1 #
spec:
accessModes:
- ReadWriteMany #요청 방법 PV에서 제공해줘야 한다
resources:
requests:
storage: 100Mi #100MG있어야 한다.
accessMode 때문에 pv-1과 연결된것을 확인한다.
root@ip-172-31-4-27:~/pv# kubectl create -f pvc.yaml
persistentvolumeclaim/pvc-1 created
root@ip-172-31-4-27:~/pv# kubectl get pv
NAME CAPACITY ACCESS MODES RECLAIM POLICY STATUS CLAIM STORAGECLASS REASON AGE
pv-1 1Gi RWX Retain Bound default/pvc-1 107s
pv-2 200Mi RWO Recycle Available 101s
nfs-pod.yaml 명세서 정의
apiVersion: v1
kind: Pod
metadata:
name: test-pd
spec:
containers:
- image: nginx
name: web-container
volumeMounts:
- mountPath: /data
name: cache-volume
- image: busybox
name: write-container
command: ['sh','-c','echo hello k8s! && sleep 1000']
volumeMounts:
- mountPath: /app
name: cache-volume
volumes:
- name: cache-volume
nfs:
server: ip-172-31-4-27 #nfs-server
path: /share
#type: Directory
terminationGracePeriodSeconds: 0
root@ip-172-31-4-27:~/pv# kubectl create -f nfs-pod.yaml
pod/test-pd created
root@ip-172-31-4-27:~/pv# kubectl exec test-pd -c web-container -- ls /data
hello.txt
PV 의 Raw Block mode
pvc 생성 요청 -> 여러 PV가 있다면 volumeMode가 같은 PV를 찾고 -> POD의 claimName이 PVC의 name이 일치 하는지 확인
'클라우드 컴퓨팅 & NoSQL > k8s' 카테고리의 다른 글
Configmaps (0) | 2020.12.02 |
---|---|
Storage Class (0) | 2020.12.02 |
Volumes (pod 내 공유 방법, Pod 외부 공유 방법, NFS) (0) | 2020.12.02 |
RollingUpdate Blue/Green 배포 시나리오 (0) | 2020.12.02 |
Rolling Update 예제 (0) | 2020.12.02 |