Skip to main content

스토리지

Lumie 인프라의 스토리지 계층은 관계형 데이터베이스(CloudNativePG), 커넥션 풀링(CNPG 네이티브 Pooler), 인메모리 캐시(Redis), 오브젝트 스토리지(MinIO), 백업 및 재해 복구(Velero)로 구성됩니다.

구성 요소

데이터베이스 계층

  • CloudNativePG: Kubernetes Native PostgreSQL 오퍼레이터
  • infra-db: 인프라 서비스용 공유 PostgreSQL 클러스터
  • PgBouncer (CNPG Pooler): CNPG 네이티브 커넥션 풀러 (icoretech Helm 차트 폐기)
  • PgWeb: PostgreSQL 웹 관리 UI

캐시 계층

  • Redis: 고성능 인메모리 캐시 및 세션 스토어

오브젝트 스토리지

  • MinIO: S3 호환 분산 오브젝트 스토리지

백업 및 복구

  • Velero: Kubernetes 클러스터 백업 및 재해 복구

infra-db (공유 PostgreSQL)

infra-db는 인프라 구성 요소들이 공유하는 PostgreSQL 클러스터입니다. 각 서비스는 독립된 데이터베이스를 사용하여 데이터를 분리합니다.

클러스터 구성

apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: infra-db
spec:
instances: 3
imageName: zot.lumie-infra.com/storage/postgresql-wal2json:18.1

storage:
storageClass: local-path-retain
size: 2Gi

postgresql:
parameters:
wal_level: "logical"
max_replication_slots: "8"

입주 서비스

서비스데이터베이스사용자용도
Teleportteleportpostgres사용자, 세션, 감사 로그
Grafanagrafanagrafana대시보드, 설정, 사용자
Umamiumamiumami웹 애널리틱스
Keycloakkeycloakkeycloak사용자, 클라이언트, 토큰
OpenClawopenclawopenclaw법률 문서 분석
Codercodercoder개발 환경 워크스페이스
Giteagiteagitea소스 저장소 메타데이터

mission_control DB와 역할은 2026-05-26 폐기되었습니다.

초기화 스크립트

-- 부트스트랩 시 실행되는 SQL (postInitSQL)
CREATE USER grafana WITH PASSWORD 'VAULT_PASSWORD';
CREATE DATABASE grafana OWNER grafana;
CREATE USER umami WITH PASSWORD 'VAULT_PASSWORD';
CREATE DATABASE umami OWNER umami;
CREATE USER keycloak WITH PASSWORD 'VAULT_PASSWORD';
CREATE DATABASE keycloak OWNER keycloak;
CREATE USER openclaw WITH PASSWORD 'VAULT_PASSWORD';
CREATE DATABASE openclaw OWNER openclaw;
CREATE USER coder WITH PASSWORD 'VAULT_PASSWORD';
CREATE DATABASE coder OWNER coder;
CREATE USER gitea WITH PASSWORD 'VAULT_PASSWORD';
CREATE DATABASE gitea OWNER gitea;

PgWeb

PgWeb은 PostgreSQL 데이터베이스를 웹 브라우저에서 탐색하고 쿼리할 수 있는 관리 UI입니다.

주요 기능

  • SQL 쿼리 실행 및 결과 조회
  • 테이블 스키마 탐색
  • 데이터 내보내기 (CSV, JSON)
  • 실시간 쿼리 실행 계획 분석
  • Liveness/Readiness Probe: 서비스 상태 자동 확인
  • Pod Anti-Affinity: PgWeb Pod를 서로 다른 노드에 분산 배치하여 가용성 향상

접근 방법

  • 네임스페이스: lumie-db
  • 접근: Teleport Web App 터널을 통해서만 접근 (공개 인그레스 없음)
  • 연결 대상: lumie-db-rw.lumie-db.svc:5432/lumie

보안 설정

env:
PGWEB_DATABASE_URL:
valueFrom:
secretKeyRef:
name: pgweb-db-secrets
key: database-url

데이터베이스 연결 정보는 Vault Static Secret을 통해 안전하게 관리됩니다.


스토리지 클래스

local-path-retain

CloudNativePG 클러스터에서 사용하는 로컬 스토리지 클래스입니다.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: local-path-retain
provisioner: rancher.io/local-path
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer

특징:

  • Provisioner: Rancher Local Path Provisioner
  • Reclaim Policy: Retain (PVC 삭제 시 데이터 보존)
  • Volume Binding: WaitForFirstConsumer (Pod 스케줄링 후 볼륨 바인딩)

minio-local

MinIO에서 사용하는 전용 로컬 스토리지 클래스입니다.

apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
name: minio-local
provisioner: kubernetes.io/no-provisioner
reclaimPolicy: Retain
volumeBindingMode: WaitForFirstConsumer

특징:

  • Provisioner: no-provisioner (수동 PV 관리)
  • Node Affinity: 각 워커 노드의 /mnt/minio-data 경로 사용
  • Erasure Coding: 4개 드라이브로 EC:2 구성

모니터링

모든 스토리지 구성 요소는 Prometheus 메트릭을 제공합니다:

  • CloudNativePG: PodMonitor를 통한 PostgreSQL 메트릭 수집
  • Redis: ServiceMonitor를 통한 Redis 메트릭 수집
  • MinIO: ServiceMonitor를 통한 오브젝트 스토리지 메트릭 수집
  • Velero: ServiceMonitor를 통한 백업 작업 메트릭 수집

Grafana 대시보드

  • CloudNativePG: Grafana.com ID 20417 (수동 임포트)
  • Redis: Bitnami Redis 대시보드
  • MinIO: MinIO 공식 대시보드
  • Velero: Velero 백업 상태 대시보드

보안

Vault 통합

모든 데이터베이스 자격 증명과 API 키는 Vault Static Secret을 통해 관리됩니다:

apiVersion: secrets.hashicorp.com/v1beta1
kind: VaultStaticSecret
metadata:
name: infra-db-bootstrap-vss
spec:
vaultAuthRef: vault/vault-auth
mount: secret
type: kv-v2
path: infrastructure/postgresql
destination:
name: infra-db-bootstrap-secret
transformation:
templates:
username: "{{ .Secrets.POSTGRES_USER }}"
password: "{{ .Secrets.POSTGRES_PASSWORD }}"

네트워크 정책

  • 데이터베이스 접근은 동일 네임스페이스 또는 명시적으로 허용된 네임스페이스로 제한
  • MinIO API는 클러스터 내부에서만 접근 가능
  • 관리 UI(PgWeb, Velero UI)는 Teleport를 통해서만 접근

백업 전략

자동 백업

  1. PostgreSQL WAL + 베이스백업: CloudNativePG Barman → Cloudflare R2 (s3://lumie-dr/cnpg/*)
  2. Kubernetes 리소스: Velero 스케줄 백업 → MinIO (velero-backups 버킷)
  3. PVC 데이터: Velero 파일시스템(Node Agent) 백업 → MinIO

보존 정책

  • PostgreSQL WAL/베이스백업 (Cloudflare R2): 365일
  • Velero 백업 (MinIO): 7일 (168시간)
  • MinIO 임시 파일 (omr/tmp/): 1일 (ILM 규칙)

복구 절차

재해 복구 시나리오별 복구 절차는 각 구성 요소의 상세 문서를 참조하세요: