셀프 호스팅 인프라 확장(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로 옮기고, 노드나 클러스터 자동 확장기를 추가해요.