스토리지
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"
입주 서비스
| 서비스 | 데이터베이스 | 사용자 | 용도 |
|---|---|---|---|
| Teleport | teleport | postgres | 사용자, 세션, 감사 로그 |
| Grafana | grafana | grafana | 대시보드, 설정, 사용자 |
| Umami | umami | umami | 웹 애널리틱스 |
| Keycloak | keycloak | keycloak | 사용자, 클라이언트, 토큰 |
| OpenClaw | openclaw | openclaw | 법률 문서 분석 |
| Coder | coder | coder | 개발 환경 워크스페이스 |
| Gitea | gitea | gitea | 소스 저장소 메타데이터 |
mission_controlDB와 역할은 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를 통해서만 접근
백업 전략
자동 백업
- PostgreSQL WAL + 베이스백업: CloudNativePG Barman → Cloudflare R2 (
s3://lumie-dr/cnpg/*) - Kubernetes 리소스: Velero 스케줄 백업 → MinIO (
velero-backups버킷) - PVC 데이터: Velero 파일시스템(Node Agent) 백업 → MinIO
보존 정책
- PostgreSQL WAL/베이스백업 (Cloudflare R2): 365일
- Velero 백업 (MinIO): 7일 (168시간)
- MinIO 임시 파일 (
omr/tmp/): 1일 (ILM 규칙)
복구 절차
재해 복구 시나리오별 복구 절차는 각 구성 요소의 상세 문서를 참조하세요: