셀프 호스팅 인프라 확장(Scaling Self-Hosted Infrastructure)

셀프 호스팅 인프라 확장(Scaling Self-Hosted Infrastructure)

차트는 대부분의 팀이 편안하게 운영할 수 있는 프로덕션 기본값을 담고 있어요. 로드가 커지면 각 계층을 각자 스케일해요: 애플리케이션 워크로드, ClickHouse, Redis, PostgreSQL, 그리고 그 아래의 클러스터. 이 페이지는 노브(knob)를 그것이 통제하는 계층에 매핑해 드릴게요.

출처: 문서

본문

애플리케이션 워크로드

각 서비스는 자체 레플리카 수, 자동 확장기, 리소스를 가진 별도 Deployment예요. Horizontal Pod Autoscaling은 기본으로 70% CPU에서 켜져 있어요:

워크로드 기본 레플리카 자동 확장 (최소~최대) 무엇에 따라 확장
backend 2 2 to 6 API와 대시보드 트래픽
frontend 1 고정 대시보드 트래픽 (무상태)
evals 2 2 to 6 동기 평가 요청
evals-worker 2 2 to 10 비동기 평가 처리량
ingestion-worker 2 2 to 4 트레이스 수집 볼륨
worker 2 2 to 4 백그라운드 작업
otel 2 2 to 6 트레이스·OTLP 수집 속도

evals-worker와 otel이 평가·트레이싱 로드가 많을 때 지켜볼 두 가지예요. 그 상한을 먼저 올려요.

워크로드별로 자동 확장기를 튜닝하거나, 고정 크기로 묶어요:

evalsWorker:
  autoscaling:
    enabled: true
    minReplicas: 4
    maxReplicas: 20
    targetCPU: 70

# Or pin a fixed count instead of autoscaling:
backend:
  autoscaling:
    enabled: false
  replicas: 4

리소스

워크로드별로 <workload>.resources로 CPU·메모리를 알맞게 잡아요. 평가 서비스(evals, evals-worker)가 모델 호출을 조율하므로 가장 무거운 작업을 해요. 메모리 헤드룸을 가장 많이 주세요:

evals:
  resources:
    requests: { cpu: "1", memory: 2Gi }
    limits:   { cpu: "2", memory: 4Gi }

ClickHouse (트레이스와 스팬)

ClickHouse가 모든 트레이스·스팬 데이터를 저장하므로 보존 기간과 수집 볼륨에 따라 커져요. 기본값: 2 레플리카, 1 샤드, 256Gi 스토리지, 3노드 Keeper 쿼럼.

clickhouse:
  replicas: 2          # read availability
  shards: 1            # raise only for very high ingest
  storage: 512Gi       # grow for longer retention
  keeper:
    replicas: 3        # keep at 3 for quorum
    storage: 20Gi

처음부터 성장할 크기로 스토리지를 잡아요: 볼륨을 키우는 것은 간단하지만 줄이는 것은 어려워요. 샤드는 단일 샤드가 더 이상 수집을 따라가지 못할 때만 추가해요. 샤딩은 운영 오버헤드를 추가하거든요. Keeper는 건강한 쿼럼을 위해 3 레플리카로 유지하세요.

Redis

클러스터 내부 Redis는 중소 규모 배포에는 충분해요. 더 높은 처리량과 관리형 내구성을 원하면 클라우드의 관리형 Redis(각 클라우드의 권장 설정)를 사용해요. 클러스터 용량을 소비하지 않고 확장되죠:

redis:
  internal: false
  externalUrl: <redis_url>

PostgreSQL

데이터베이스는 관리형 서비스(RDS, Cloud SQL, Flexible Server)예요. 차트가 아니라 Terraform으로 확장해요: 인스턴스 크기를 키우고 고가용성을 유지하세요. 기본값은 이미 HA를 실행해요. 스토리지는 클라우드의 autogrow 설정에 따라 커져요.

클러스터 용량

애플리케이션 자동 확장은 클러스터에 새 파드를 스케줄할 여유가 있을 때만 도움이 돼요. Terraform에서 노드 풀을 잡아요:

클라우드 기본 노드 풀
AWS 4 x m6i.2xlarge
GCP 4 x n2-standard-8
Azure 4 x Standard_D8s_v5

더 많은 헤드룸을 위해 노드 수나 인스턴스 크기를 올리고, HPA가 워크로드를 확장할 때 노드가 추가되도록 클라우드의 클러스터 자동 확장기를 활성화해요.

객체 스토리지

S3, GCS, Blob은 자동으로 확장돼요. 튜닝할 것이 없어요.

시작 지점

  • 시험 또는 소규모 팀: 앱 레플리카를 1로, autoscaling.enabled: false, 더 작은 clickhouse.storage. 실제 클러스터에서 POC에 가까운 구성이에요.
  • 프로덕션: 기본 제공값으로 시작하세요. 저~중간 트래픽을 편안하게 서빙해요.
  • 대용량: evals-worker와 otel 자동 확장 상한을 올리고, clickhouse.storage를 키우고(수집이 매우 많으면 샤드 추가), 관리형 Redis로 옮기고, 노드나 클러스터 자동 확장기를 추가해요.

더 알아보기