Files
platform-core/infrastructure/storage/ssd-local-pv

SSD 정적 Local PersistentVolume

첫 배포에서는 서버의 루트 SSD에 워크로드별 Local PV 두 개를 예약한다.

워크로드 StorageClass 로컬 경로 선언 용량
플랫폼 PostgreSQL ssd-local-postgres-retain /srv/k3s/ssd/platform-postgres 20Gi
Gitea ssd-local-gitea-retain /srv/k3s/ssd/gitea 50Gi

별도의 StorageClass를 사용하여 PostgreSQL의 20 GiB Claim이 Gitea의 50 GiB 볼륨에 잘못 바인딩되는 것을 방지한다. WaitForFirstConsumer를 사용하면 Scheduler가 Local PV의 node affinity를 반영할 수 있다. 두 PV 모두 Retain을 사용하므로 Claim을 삭제해도 디스크의 데이터는 삭제되지 않는다.

PVC는 의도적으로 이 인프라 디렉터리가 아니라 소유자와 함께 둔다.

  • CloudNativePG는 Cluster의 storage 명세에서 PostgreSQL 인스턴스 PVC를 생성한다. 이 PVC는 ssd-local-postgres-retain20Gi를 요청해야 한다.
  • Gitea 서비스 배포가 직접 또는 공식 Chart를 통해 자체 PVC를 소유한다. 이 PVC는 ssd-local-gitea-retain50Gi를 요청해야 한다.

PV를 생성하기 전에 scripts/bootstrap/prepare-ssd-local-paths.sh를 수동으로 실행한다. 이 스크립트는 /srv가 루트 파일시스템에 있는지 확인한 후 정확히 두 디렉터리만 준비한다.

Local PV의 capacity 필드는 바인딩 메타데이터이며 파일시스템 quota가 아니다. PostgreSQL과 Gitea는 루트 SSD의 여유 공간을 공유한다. 루트 파일시스템을 모니터링하고, 하드 제한이 필요해지면 파일시스템 또는 블록 장치 quota를 별도로 추가한다.

Local PV는 이 워크로드들을 donghyeon-system-product-name 노드에 종속시킨다. Retain은 자동 파일 삭제를 막지만 백업이나 고가용성을 제공하지 않는다. Released 상태의 PV를 재사용하는 작업은 명시적인 복구 절차로 수행해야 한다.