engal1991 / Docker-Kubernetes

0 stars 0 forks source link

[09장: 퍼시스턴트 볼륨(PV)과 퍼시스턴트 볼륨 클레임(PVC)] 9.3 PV, PVC를 이용한 볼륨 관리 #34

Open engal1991 opened 2 years ago

engal1991 commented 2 years ago

9.3.1 퍼시스턴트 볼륨과 퍼시스턴트 볼륨 클레임을 사용하는 이유

9.3.2 퍼시스턴트 볼륨과 퍼시스턴트 볼륨 클레임 사용하기

9.3.3 퍼시스턴트 볼륨을 선택하기 위한 조건 명시

9.3.4 퍼시스턴트 볼륨의 라이프사이클과 Reclaim Policy

9.3.5 StorageClass와 Dynamic Provisioning

N3theri9N commented 2 years ago

image

9.3.1 퍼시스턴트 볼륨과 퍼시스턴트 볼륨 클레임을 사용하는 이유

기존에 NFS 를 고정명시를 했기에 반드시 NFS 를 사용해야만하며, 기존 데이터를 보관하기위해 다른 네트워크 볼륨을 쓰고싶다면 YAML 를 여러 개 만들어 배포해한다. 즉 너무 밀접해서 뗄레야 뗄 수 없게되버리는 불편한 상황이 벌어진다.

이를 해소하기위해 PV PVC 를 제공한다.

핵심은 YAML 입장에서는 네트워크 볼륨이 NFS이든, EBS이든 모른채 상관없이 볼륨을 사용하도록 하는 것이다. image

9.3.2 퍼시스턴트 볼륨과 퍼시스턴트 볼륨 클레임 사용하기

kubectl get pv,pvc 명령어로 리소스 목록 출력 가능

AWS의EBS 를 예로들어보면.

  1. EBS 볼륨을 생성한 다음 볼륨 ID 를 $VOLUME_ID 라는 shell 변수에 저장해둔다. 이 ID 로 PV 를 생성한다.
  2. EBS 볼륨을 통해 CV의 yaml 을 생성 기존에 생성한 VOLUME_ID 내용을 여기에 사용한다.
    kind : PersistentVolume
    meatdata:
    name: ebs-pv
    spec :
    capacity : 
    storgae: 5Gi
    accessModes :
    - ReadWriteOnce
    awsElasticBlockStore :
    fsType : ext4
    volumeID : <VOLUME_ID>

    이후 PV 생성 그후 get pv 명령어 실행하면 STATUS 가 Available ( 사용 가능 ) 으로 나오게 된다.

  3. PVC 를 생성한다.
    kind: PersistentVolumeClaim
    metadata :  
    name : my-ebs-pvc
    spec:
    storageClassName: ""
    accessModes:
    - ReadWriteOnce
    resources:
    requests:
        storage: 5Gi
  4. 이후 포드의 volume 항목에서 my-ebs-pvc 볼륨을 마운트한다.
  5. PVC 정의하는 accessModes 와 resource 항목은 볼륨의 요구사항으로 해당 조건을 만족하는 PV 와 연결된다. 5-1. 만약 요구사항의 PV가 존재하지 않다면 STATUS:pending 이 된다.
  6. PVC 가 STATUS:bound 면 두 리소스가 성공적으로 연결된 상태가 된다.

9.3.3 퍼시스턴트 볼륨을 선택하기

image

PVC 는 특정조건을 만족하는 볼륨만을 사용해야한다는것을 쿠버네티스에 알려줄 필요가 있다. AccessMode 나 볼륨 크기 등이 조건이 해당된다. 두 속성이 부합해야만 쿠버네이트는 두 리소스를 매칭해 바인드한다. (accessMode 나 볼륨 크기는 볼륨의 메타데이터일뿐 정말 그런 속성을 가지도록 강제하진 않는다.)

예컨데 5Gi 인 PV, 3Gi 인 PV 2개가 있을시 5Gi가 필요한 PVC 는 전자의 PV 랑 마운트된다. PVC 입장에선 조건이 중요하지 어떤 것과 연결하는지는 보진 않는다.

accessMode 의 종류

그 외에도 스토리지 클래스나 라벨 셀렉터를 이용해 볼륨 매칭을 더 세분화 할 수 있음.

9.3.4 퍼시스턴트 볼륨의 라이프사이클과 Reclaim Policy

image

PV 생성 후 kubectl get pv 명령어를 보면 STATUS 항목에 PV가 사용가능한지 연결되었는지 볼 수 있음.

ReclaimPolicy

available 상태가 되었을때 어떻게 처리할지를 정의가 가능한데 이를 ReclaimPolicy 라고 한다. 이를 따로 정의해야하는 이유는 애초에 볼륨의 역할이 데이터의 영구저장이라서다.

ReclaimPolicy 에는 3가지 방식이 있다. (아무런 설정을 하지 않았을경우 Retain 방식)

이 설정은 yaml 에서 spec : persistentVolumeReclaimPolicy : { 방식 이름} 으로 설정하며 get pv 실행시 RECLAIM POLICY 항목에 나오게된다.

9.3.5 StorageClass와 Dynamic Provisioning

image

다이나믹 프로비저닝은 PVC 가 요구하는 조건과 일치하는 PV 가 존재하지 않는다면 자동으로 PV 와 외부 스토리지를 함께 프로비저닝 하는 기능이다. 다이나믹 프로비저닝을 사용하면 EBS 와 같은 외부스토리지를 미리 생성할 필요가 없어진다.

특정 PV 를 선택하지 위해 스토리지 클래스를 사용했었는데 사실 스토리지 클래스는 다이나믹 프로비저닝에도 사용할 수 있는데, 스토리지 클래스의 정보를 참고해 외부 스토리지를 생성하기 때문이다.