본문 바로가기

Cloud

(Kubernetes) - storage

반응형

🍳머리말

kubernetes docs의 storage 복붙글입니다.


📕 Volume

컨테이너 내의 디스크에 있는 파일은 임시적이며, 컨테이너에서 실행될 때 애플리케이션에 적지 않은 몇 가지 문제가 발생합니다. 한 가지 문제는 컨테이너가 크래시될 때 파일이 손실되는 점입니다. kubelet은 컨테이너를 다시 시작하지만 초기화된 상태입니다. 두 번째 문제는 Pod에서 같이 실행되는 컨테이너간에 파일을 공유할 때 발생하는 것입니다. 쿠버네티스 volume 추상화는 이러한 문제를 모두 해결합니다.

📔 배경

 도커는 다소 느슨하고, 덜 관리되지만 볼륨이라는 개념을 가지고 있습니다. 도커 볼륨은 디스크에 있는 디렉터리이거나 다른 컨테이너에 있습니다. 도커는 볼륨 드라이버를 제공하지만, 기능은 제한적입니다.

쿠버네티스는 다양한 유형의 볼륨을 지원합니다. 파드는 여러 볼륨 유형을 동시에 사용할 수 있습니다. 임시 볼륨 유형은 파드의 수명을 갖지만, 퍼시스턴트 볼륨은 파드의 수명을 넘어 존재합니다. 파드가 더 이상 존재하지 않으면, 쿠버네티스는 임시(ephemeral) 볼륨을 삭제하지만, 퍼시스턴트(persistent) 볼륨은 삭제하지 않습니다. 볼륨의 종류와 상관없이, 파드 내의 컨테이너가 재시작되어도 container안의 데이터는 보존됩니다.

 기본적으로 볼륨은 디렉터리이며, 일부 데이터가 있을 수 있으며, 파드 내 컨테이너에서 접근할 수 있습니다. 디렉터리의 생성 방식, 이를 지원하는 매체와 내용은 사용된 특정 볼륨의 유형에 따라 결정됩니다.

볼륨을 사용하려면, .spec.volumes 에서 파드에 제공할 볼륨을 지정하고 .spec.containers[*].volumeMounts 의 컨테이너에 해당 볼륨을 마운트할 위치를 선언합니다. 컨테이너의 프로세스는 도커 이미지와 볼륨으로 구성된 파일시스템 뷰를 봅니다. 도커 이미지는 파일시스템 계층의 루트에 있습니다. 볼륨은 이미지 내에 지정된 경로에 마운트됩니다. 볼륨은 다른 볼륨에 마운트할 수 없거나 다른 볼륨에 대한 하드 링크를 가질 수 없습니다. 파드 구성의 각 컨테이너는 각 볼륨을 마운트할 위치를 독립적으로 지정해야 합니다.

📔 persistent volume

 스토리지 관리는 컴퓨트 인스턴스 관리와는 별개의 문제입니다. 퍼시스턴트볼륨 서브시스템은 사용자 및 관리자에게 스토리지 사용 방법에서부터 스토리지가 제공되는 방법에 대한 세부 사항을 추상화하는 API를 제공합니다. 이를 위해 퍼시스턴트볼륨 및 퍼시스턴트볼륨클레임이라는 두 가지 새로운 API 리소스를 소개합니다.

퍼시스턴트볼륨 (PV)은 관리자가 프로비저닝하거나 스토리지 클래스를 사용하여 동적으로 프로비저닝한 클러스터의 스토리지입니다. 노드가 클러스터 리소스인 것처럼 PV는 클러스터 리소스입니다. PV는 Volumes와 같은 볼륨 플러그인이지만, PV를 사용하는 개별 파드와는 별개의 라이프사이클을 가집니다. 이 API 오브젝트는 NFS, iSCSI 또는 클라우드 공급자별 스토리지 시스템 등 스토리지 구현에 대한 세부 정보를 담아냅니다.

 퍼시스턴트볼륨클레임 (PVC)은 사용자의 스토리지에 대한 요청입니다. 파드와 비슷합니다. 파드는 노드 리소스를 사용하고 PVC는 PV 리소스를 사용합니다. 파드는 특정 수준의 리소스(CPU 및 메모리)를 요청할 수 있습니다. 클레임은 특정 크기 및 접근 모드를 요청할 수 있습니다(예: ReadWriteOnce, ReadOnlyMany 또는 ReadWriteMany로 마운트 할 수 있음. AccessModes 참고).

 퍼시스턴트볼륨클레임을 사용하면 사용자가 추상화된 스토리지 리소스를 사용할 수 있지만, 다른 문제들 때문에 성능과 같은 다양한 속성을 가진 퍼시스턴트볼륨이 필요한 경우가 일반적입니다. 클러스터 관리자는 사용자에게 해당 볼륨의 구현 방법에 대한 세부 정보를 제공하지 않고 크기와 접근 모드와는 다른 방식으로 다양한 퍼시스턴트볼륨을 제공할 수 있어야 합니다. 이러한 요구에는 스토리지클래스 리소스가 있습니다.


📕 Storage Class

📔 소개

스토리지클래스는 관리자가 제공하는 스토리지의 "classes"를 설명할 수 있는 방법을 제공합니다. 다른 클래스는 서비스의 품질 수준 또는 백업 정책, 클러스터 관리자가 정한 임의의 정책에 매핑될 수 있습니다. 쿠버네티스 자체는 클래스가 무엇을 나타내는지에 대해 상관하지 않습니다. 다른 스토리지 시스템에서는 이 개념을 "프로파일"이라고도 합니다.

  📑 설명 부연의 부연 제목

📔 Storage class resource

각 스토리지클래스에는 해당 스토리지클래스에 속하는 퍼시스턴트볼륨을 동적으로 프로비저닝 할 때 사용되는 provisioner, parameters  reclaimPolicy 필드가 포함됩니다.

스토리지클래스 오브젝트의 이름은 중요하며, 사용자가 특정 클래스를 요청할 수 있는 방법입니다. 관리자는 스토리지클래스 오브젝트를 처음 생성할 때 클래스의 이름과 기타 파라미터를 설정하며, 일단 생성된 오브젝트는 업데이트할 수 없습니다.

관리자는 특정 클래스에 바인딩을 요청하지 않는 PVC에 대해서만 기본 스토리지클래스를 지정할 수 있습니다. 


📕참조

https://kubernetes.io/ko/docs/concepts/storage/volumes/

 

'Cloud' 카테고리의 다른 글

(Kubernetes) - pod lifecycle  (0) 2021.11.15
(Kubernetes) - k8s namespace 생성하기  (0) 2021.11.09
(Kubernetes) - workload  (0) 2021.10.20
(Kubernetes) - 용어 정리  (0) 2021.10.18
DevOps와 NoOps  (0) 2021.10.13