[Project] Multi-Tenant K8s Cluster on ARM64 - (10) [Refactor] Building a Truly Stateful (Storage)

developowl·2026년 3월 9일
post-thumbnail

현재 입주해 있는 테넌트 중 한 분이 “인스턴스가 재시작 되면 일부 코드가 날라가는 것 같아요” 라는 피드백을 주셨습니다. 이전에 진행한 스토리지 설정 과정 에서 스토리지 자원 관리(Quota)와 데이터 격리(Isolation)만 설정을 했고, 영속성에 대한 생각을 못했던 것이 문제가 되었습니다.
치명적인 문제가 발생했기에,, 빠르게 작업을 해주었습니다..

들어가기 전 개념 정리 (PV & PVC)

  • 쿠버네티스에서 스토리지는 크게 두 단계로 관리됩니다.

📌 PV (PersistentVolume)

  • 실제 물리적 스토리지(SSD)의 일부분을 쿠버네티스가 인식할 수 있는 자원 형태로 등록해둔 것 → 관리자 영역

📌 PVC (PersistentVolumeClaim)

  • 사용자가 특정 용량과 접근 권한을 명시하여 스토리지를 할당받으려고 제출하는 요청 → 테넌트 영역

테넌트가 PVC를 생성하면, 쿠버네티스는 테넌트의 요구사항(용량, 읽기/쓰기 모드)에 맞는 PV를 찾아서 서로 연결(Binding) 해줍니다.


문제 상황

  • /config 내에 생성한 데이터, 파일들은 영속성이 보장되지만, 그 밖에 생성한 코드의 경우 영속성 유지가 안 됨.
  • 이는 파드가 죽을 경우 해당 디렉토리 밖에 있는 폴더나 설정들이 모두 사라지게 됨

해결 방안: 영속성 범위를 홈 디렉토리까지 확장

  • 현재 v1-basic-setup.sh 내에 있는 volumeMounts의 경로는 /config

  • → 이를 유지하며 subPath 기능을 사용해 영역 추가하기

  • name: tenant-storage
    • 역할: 연결할 PVC의 이름을 지정
    • 기능: 하단 volumes 섹션에 정의된 tenant-storage 라는 이름의 PVC를 찾아서 가져옴. 이전에 설정한 8Gi 짜리 디스크 공간을 가리킴
  • mountPath
    • 역할: 파드 내부에서 데이터가 보일 가상 경로
    • 기능:
      • /config : SSH 서버가 부팅될 때 필요한 호스트 키, 설정 파일들을 읽어가는 장소
      • /home/tenant-user : 테넌트가 접속하자마자 마주하는 홈 디렉토리
    • 효과: 이 경로에 파일을 저장하면 파드 내부의 휘발성 메모리가 아닌, 실제 외부 디스크(PVC)에 기록됨
  • subPath
    • 역할: 디스크 내 격리된 저장 구역 생성
    • 기능: 하나의 PVC 내부에 system-config, tenant-home-data 라는 별도의 디렉토리를 자동 생성하여 관리
      • system-config : PVC 내부에 system-config 라는 폴더를 만들어 SSH 시스템 파일만 따로 모음
      • tenant-home-data : PVC 내부에 tenant-home-data 폴더를 만들어 유저가 생성한 폴더나 파일들만 따로 모음
    • 도입 이유
      • subPath 없이 마운트하면 볼륨의 루트(Root)가 해당 경로를 완전히 덮어씌우는 상황 발생.
      • subPath 기능을 통해 시스템 설정 파일과 사용자 데이터를 물리적으로 분리 & 관리포인트(PVC)는 하나로 유지

현재 홈랩 물리 디스크의 구조

  • tenant-storage
    • 8Gi 용량의 실제 물리 디스크 (PVC)
  • system-config
    • SSH 구동을 위한 필수 설정 저장소 (/config)
  • tenant-home-data
    • 유저의 실제 데이터 저장소 (/home/tenant-user)

Before & After

  • Before
    • 파드가 재시작 되면 SSH 설정은 남지만, 테넌트가 작성한 코드 등의 데이터는 사라짐(휘발성)
  • After
    • 파드가 재시작 되어도 설정과 테넌트가 저장한 데이터 모두 남아 있음(영속성)
profile
Don’t get mad at the computer.

0개의 댓글