본문 바로가기

클라우드/쿠버네티스(Kubernetes)

쿠버네티스 Kubernetes 스토리지 볼륨 5 / PersistenVolume(PV) 및 PersistentVolumeClaim(PVC)

EmptyDir, hostPath 같은 경우는 스토리지에 대한 많은 지식이 필요하지 않다

하지만 네트워크 기반 스토리지의 경우 스토리지 자체의 지식이 많이 필요하다

또한 볼륨의 라이프사이클이 컨트롤러 및 파드의 생명주기가 같아 컨트롤러 및 파드가 삭제되면 볼륨도 같이 삭제된다

 

# ​PersistentVolume(PV), PersistentVolumeClaim(PVC)

컨트롤러 및 파드와 별개의 쿠버네티스 리소스이며, 파드의 생명주기와 별개로 작동

# PV

: 쿠버네티스 클러스터 외부 스토리와 연결 담당 리소스

 

# PVC

: PV와 파드를 연결하기 위한 리소스

 

 

- 주로 관리자는 스토리지(PV), 개발자는 PVC로 많이 사용을 하고 있어 , 개발자는 스토리지 지식이 없어도 PVC를 작성해 사용할 PV를 지정하면 원하는 볼륨을 제공받을 수 있다. (파드의 생명주기랑 별도로 볼륨 생명주기를 가지게 됨)

- 관리자는 스토리지 지식이 있으니 PV를 생성해 스토리지와 연결, 파드 개발자는 PVC를 생성해 자신의 파드 및 관리자가 제공해준 PV와 연결해 파드에서 볼륨을 사용한다.

 

 

# PV 및 PVC 생명주기 (LifeCycle)

 

# 프로비저닝 (Provisioning)

- PV가 만들어지는 단계

- 정적 프로비저닝

  : PV를 직접 사용하고 생성한다

- 동적 프로비저닝

  : 볼륨 사용 요청이 있을 때마다 자동으로 생성, 추가 리소스(스토리지 클래스) 필요

 

#  바인딩 (Biding)

- PVC 리소스를 만들어 준비된 PV 리소스와 연결하는 단계

- PVC 리소스에 원하는 PV 리소스나 스토리지 용량 및 접근 방법을 정의한다.

  적절한 PV 리소스가 없다면 요청을 실패하고, 적절한 PV 리소스가 생성되어 연결될 때까지 대기한다.

- PV와 PVC는 1:1로 연결한다.

 

# 사용 (Using)

- PVC에서 제공한 볼륨을 파드가 마운트해서 사용하고 있는 단계

- 연결되어 사용중인 PV와 PVC는 임의로 삭제되지 않는다

 

# 회수 (Reclaiming)

- 사용이 끝난 PVC가 종료/삭제되면 연결된 PV를 회수

- 유지 정책, 삭제 정책, 재활용 정책이 있다.

    A) 유지 정책 (Retain)

        : PV 리소스를 그대로 유지 --> PV 리소스를 삭제하더라도 외부 스토리지를 사용하고 있으면

          외부 스토리지의 데이터는 그대로 남아있다 --> 그치만 PVC를 사용할 수 있는 건아니다

          (수동으로 볼륨 회수)

        - PV 삭제(외부 데이터 남아있음)

        - 데이터가 더 이상 필요하지않으면 실제 스토리지에서도 삭제(자원낭비 방지)

        - 동일한 데이터를 사용해야하면 해당 데이터를 가지고 둔 상태에서 PV리소스를 다시 생성

 

    B) 삭제 정책 (Delete)

        : PVC 리소스가 삭제되면 PV 리소스도 같이 삭제되고 연결되어 있는 외부 스토리지(실제 데이터)도

          삭제된다. (파드만 삭제해서 다시 연결할 수 있다) --> 자동으로 PV가 만들어진다(PVC만 안지우면 

          데이터는 없어지지 않는다.)

        - 동적 프로비저닝, AWS, GCP, Azure의 기본 정책이다

 

    C) 재활용 정책 (Recycle)

        : 말그대로 PV를 재활용하는 것, 근데 스토리지마다 다르기 때문에 구현하기 어렵다.

        - NFS, hostPath 볼륨 지원