ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Kubernetes Persistent Volume
    Kubernetes 2019. 10. 8. 17:43

    Kubernetes는 다양한 스토리지 디스크에 대한 마운트 인터페이스를 지원하기 때문에 현재 환경에 적합한 스토리지를 선택해서 사용해야 한다.

    1. Local Volume

    1.1 emptyDir

    emptyDir은 Pod과 함께 생성되고, 삭제되는 임시 Volume이라고 볼 수 있다. 만약 Pod 내에 여러개의 컨테이너가 정의되어 생성될 경우 그 컨테이너들은 하나의 emptyDir을 공유한다. 또한 Pod가 삭제될 경우 emptyDir 또한 삭제되기 때문에 Pod 내부 컨테이너간에 공유해야 하는 휘발성 데이터를 저장하기 위해 사용될 수 있다.

    emptyDir을 사용할 경우 각 컨테이너에 다른 mountPath로 마운트할 수 있으며, emptyDir.medium을 memory로 설정하게 되면 emptyDir을 메모리에 저장해 사용할 수 있다. 즉, emptyDir을 인메모리로서 사용할 수 있다.

     

    1.2 hostpath

    hostPath는 호스트의 디렉토리를 Pod에 Mount 해서 사용하는 Volume 방식이다. 이는 Docker에서 -v 옵션으로 Volume을 연결하는 것과 동일하다고 볼 수 있다. 이는 Pod가 삭제되어도 hostpath에 저장된 파일들은 호스트에 저장되어 남아있게 된다. 그러나 당연하게도 컨테이너가 할당될 특정 호스트를 nodeSelector를 통해 지정해주지 않으면 매번 컨테이너가 다른 호스트에 할당되므로 이 방식은 Persistent storage와는 거리가 있다고 볼 수 있다. hostpath 지정 시 주의할 점은 호스트의 디렉터리를 미리 생성해놓지 않으면 Pod 생성에 실패한다는 것이다.

     

    1.3 local

    local 볼륨은 데이터를 로컬 호스트에 저장한다는 점에서는 동일하지만, 해당 로컬 볼퓸이 존재하는 호스트를 인식해 컨테이너를 할당한다는 특징을 갖는다. local 볼륨을 생성할 경우 호스트에 볼륨이 논리적으로 생성되며, 해당 local 볼륨을 사용하는 Pod는 자동으로 해당 호스트로 할당되는 방식이다. 이 방식 또한 hostpath와 마찬가지로 해당 호스트에 장애가 발생할 경우 Pod의 데이터를 사용할 수 없다는 한계점이 있으므로 Persistent Volume으로는 거의 사용되지 않는다. local은 볼륨이 논리적으로 생성되는 것이기 때문에 Dynamic Provisioning이 불가능하다.

     

     

    2. Network Volume

     

    2.1 Persistent Volume (PV) & Persistent Volume Claim (PVC)

    Kubernetes는 service account나 namespace 등의 object에서 알 수 있듯이 여러 사용자가 동시에 클러스터를 사용하는 것을 전제로 하고 있다. 따라서 Kubernetes cluster 제공자 or 관리자 와 사용자 or 개발자가 별도로 존재하게 되는데, 사용자는 Kubernetes cluster를 사용해 서비스를 배포할 뿐 근본적인 인프라에 대해서는 관리 권한을 갖지 않는 것으로 간주된다.

    Persisten Volume : Kubernetes에서 관리되는 저장소로 Pod과는 다른 수명 주기로 관리된다. Pod이 재실행 되더라도, PV의 데이터는 정책에 따라 유지/삭제된다.

    Persistent Volume Claime : PV를 추상화하여 개발자가 손쉽게 PV를 사용 가능하게 만들어주는 기능으로 개발자는 사용에 필요한 Volume의 크기, Volume의 정책을 선택하고 요청만 하면 된다.

     

    Static Provisioning [ 운영자가 직접 PV 생성 ]

    Cluster 운영자가 만들어 놓은 PV를 PVC를 통해 Pod에 바인딩 하는 Static Provisioning 외에도 PVC의 조건을 만족하는 PV가 없을 경우 PV를 자동으로 Provisioning 해주는 Dynamic Provisioning이 있다. Dynamic Provisioning에는 Specification Template인 StorageClass라는 이름의 Object가 필요하다. StorageClass는 https://kubernetes.io/docs/concepts/storage/storage-classes/에서 확인할 수 있다.

     

     

    'Kubernetes' 카테고리의 다른 글

    hdfs-k8s helm deploy  (0) 2019.11.04
    Helm Charts  (0) 2019.11.01
    Kubernetes GPU Container  (0) 2019.10.02
    Kubernetes 특정 Node로 Pod 배포  (0) 2019.10.02
    Kubernetes PKI Certificate  (0) 2019.10.02

    댓글

Designed by Tistory.