본문 바로가기

Docker & Kubenetes

쿠버네티스 볼륨 PV 와 PVC

 

emptyDir

파드가 생성될 때 같이 생성되고 삭제될 때 같이 삭제되는 볼륨으로, 생성 당시에 아무 내용도 없다.

파드내에 컨테이너들이 공유 가능하다.

apiVersion: v1
kind: Pod
metadata:
  name: shared-volumes 
spec:
  containers:
  - name: redis
    image: redis
    volumeMounts:
    - name: shared-storage
      mountPath: /data/shared
  - name: nginx
    image: nginx
    volumeMounts:
    - name: shared-storage
      mountPath: /data/shared
  volumes:
  - name : shared-storage
    emptyDir: {}

위와 같은 yaml 파일로 파드를 생성하면 redis나 nginx컨테이너에서 /data/shared에 작성한 데이터가 공유 된다.

hostPath

노드의 로컬 디스크의 경로를 파드에 마운트해서 사용한다
파드가 삭제 되더라도 파일은 삭제되지 않고 다른 파드가 마운트 하게 되면 남아있는 파일에 액세스가 가능하다
단, 파드가 재시작 되어 다른 노드에서 기동되면 다른 노드의 hostPath를 사용하기 때문에 기존 디스크의 파일에 액세스가 불가능하다
노드의 파일 시스템을 접근하는데 유용하다 (노드의 로그 파일을 읽고 수집하는 작업 등)

실무에서는 대부분 외부 디스크와 연결하여 사용한다.(EFS, NAS 등)


 

PV와 PVC의 생명 주기

  • 프로비저닝(Provisioning): PV를 생성하는 단계  
  • 바인딩(Binding): PV를 PVC에 연결시키는 단계 
  • 사용(Using): Pod가 PVC를 볼륨으로 사용하는 단계 
  • 회수(Reclaiming): PVC를 삭제할 때, 연결된 PV를 어떻게 처리할지에 대한 설정하는 단계(Retain, Recycle, Delete 3가지 옵션이 있습니다)            
Retain PV의 데이터를 그대로 보존
Retain 재사용할 경우 PV 데이터들을 모두 삭제 후 재사용 
Delete 사용이 종료되면 삭제 

PV(영구적인 저장공간) 와 PVC(영구적인 저장공간 요청)

PV를 생성하고, 이 PV를 PVC에 연결한후에, PVC를 Pod에 할당하여 사용한다.
PV와 PVC는 1:1 연결 해야함
PV보다 작은 PVC만 연결 됨, 남는 공간이 있다해서 추가 연결로 사용 불가


PV

관리자가 생성한 디스크
생명주기가 파드와 상관없이 별도로 관리된다, 그러므로 직접 생성하고 삭제해야함

PVC

사용자가 디스크를 사용할 수 있도록 PV와 연결해주는 것

SC(스토리지 클래스)

PV를 PVC에 맞게 만들어 주는것을 자동화 해준 것
관리자가 저장공간을 지정(EFS, NAS 등)하여 SC를 생성하면 사용자가 PVC생성 시 SC를 지정하면 자동으로 SC가 PVC 만큼 PV를 생성함
SC가 없을 때 만약 이미 생성된 PV가 있다면 새로운 PVC 생성 시 연결이 안되어 있는 PV에 무작위 연결되기 때문에 관리하기가 힘듦