Generic

OpenEBS - 볼륨(PV)과 노드(Node) 연결 본문

kubernetes

OpenEBS - 볼륨(PV)과 노드(Node) 연결

Generic 2026. 4. 2. 13:11

OpenEBS에서 볼륨(PV)과 노드(Node)를 연결하는 과정.

데이터가 어디에 저장되는가(Provisioning), 다른 하나는 파드가 해당 데이터를 사용하기 위해 노드에 어떻게 마운트되는가(Mounting)

 

대중적인 Local PV Hostpath 엔진을 기준으로 그 연결 메커니즘을 정리


1. 연결의 핵심: Node Affinity (노드 친화성)

OpenEBS Local PV의 가장 큰 특징은 볼륨이 특정 노드에*종속(Bound)된다.

  • 정적 연결: OpenEBS는 PV를 생성할 때, 해당 데이터가 실제 존재하는 노드의 정보를 PV 객체 안에 저장. 이를 nodeAffinity라고 부른다.
  • 강제 배치: 쿠버네티스 스케줄러는 이 정보를 읽고, 해당 볼륨을 사용하는 파드를 반드시 데이터가 있는 그 노드에만 배치한다.

2. 물리적 연결 과정 (Step-by-Step)

① PVC 요청 및 노드 선택

사용자가 PVC를 생성하면, OpenEBS 컨트롤러는 클러스터 내의 노드 중 하나를 선택한다. (보통 파드가 처음 스케줄링되는 노드를 기준으로 결정)

② 디렉토리 생성 (Hostpath 연결)

선택된 노드의 특정 경로(예: /var/openebs/local/...)에 실제 데이터를 저장할 디렉토리를 생성. 과정에서 Helper Pod가 해당 노드에 잠시 실행되어 mkdir 등의 작업을 수행.

③ PV 생성 및 바인딩

OpenEBS는 생성된 실제 경로와 노드 이름을 기록한 PV를 생성하고, 사용자의 PVC와 연결(Bound).


3. 파드와 볼륨의 최종 연결 (Mount)

실제 파드가 실행될 때 노드와 볼륨이 연결되는 방식.

  1. Kubelet의 개입: 파드가 배정된 노드의 kubelet이 PV 설정을 확인.
  2. 마운트 작업: 노드의 실제 경로(Hostpath)를 파드 내부의 컨테이너 경로로 연결.
  3. 심볼릭 링크/바인드 마운트: 내부적으로는 리눅스의 mount --bind와 유사한 기술을 사용하여, 노드의 디스크 공간을 파드가 자기 것처럼 쓸 수 있게 해준다.

4. 구조 요약표

연결 계층 연결 도구 설명
논리적 연결 PVC - PV 사용자의 요청과 실제 자원을 연결
위치적 연결 PV - Node nodeAffinity를 통해 데이터가 위치한 노드 고정
물리적 연결 Node - Pod kubelet이 노드의 로컬 경로를 파드에 마운트