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

+ Recent posts