가이드
Kubernetes에 배포
번들로 제공되는 Helm chart를 사용한 프로덕션 HA 배포.
HA, 멀티 리전이 필요하거나 단일 호스트가 부담스러운 팀을 위한 것입니다. 완전한 Helm chart를 deploy/helm/singlink/에 제공합니다.
아키텍처
Ingress (nginx / Cloudflare)
│
┌──────────┼──────────┐
│ │ │
web (×N) ws (×N) worker (×N)
│ │ │
└────┬─────┴────┬─────┘
│ │
Postgres Redis S3
(managed) (managed) (managed)설치
helm install singlink ./deploy/helm/singlink \
--namespace singlink --create-namespace \
--set domain.app=chat.acme.com \
--set secret.authSecret="$(openssl rand -base64 32)" \
--set secret.postgresPassword="$(openssl rand -base64 24)" \
--set secret.redisPassword="$(openssl rand -base64 24)" \
--set s3.endpoint="https://s3.us-east-1.amazonaws.com" \
--set s3.bucket="acme-singlink" \
--set s3.accessKey="AKIA..." \
--set s3.secretKey="..."생성되는 리소스
- 3개의 Deployment:
web,ws,worker - 2개의 Service(web HTTP, ws 스티키 세션)
- WS 업그레이드 규칙이 있는 Ingress 1개
- 선택적 내장 postgres + redis StatefulSet
prisma migrate deploy를 실행하는 설치 후 Job- 구성과 자격 증명을 위한 ConfigMap + Secret
프로덕션 체크리스트
- 내장 데이터베이스 비활성화 후 관리형 RDS / ElastiCache를 가리키도록 합니다:
--set embedded.postgres.enabled=false --set externalDatabaseUrl=... - 오토스케일링 활성화:
--set autoscaling.enabled=true --set autoscaling.maxReplicas=20 - ingress에서의 TLS: cert-manager를 설치하고 다음을 설정합니다
ingress.tls.secretName="singlink-tls" - WS의 스티키 세션은 Service 레벨에서 이미 구성되어 있습니다 (
sessionAffinity: ClientIP) —— 추가 ingress 어노테이션이 필요 없습니다 - 시크릿 관리: CLI로 값을 전달하는 대신 Sealed Secrets 또는 External Secrets를 사용합니다
- S3: AWS S3, R2, GCS, 또는 관리형 MinIO. 이 chart는MinIO를 포함하지 않습니다 —— K8s에서 상태 저장 오브젝트 스토리지를 운영하는 것은 즐겁지 않습니다
스케일링
# Manual scale
kubectl -n singlink scale deploy singlink-web --replicas=5
kubectl -n singlink scale deploy singlink-worker --replicas=10
# With autoscaling.enabled=true, HPAs do this automatically based on CPU.업그레이드
helm upgrade singlink ./deploy/helm/singlink -n singlink \
--set image.tag=v0.2.0 \
--reuse-values
# Helm hook runs the migrate Job post-upgrade automatically.관측 가능성
Next.js 헬스 체크는 /api/healthz에 있습니다(이미 readiness/liveness 프로브에 연결되어 있습니다). 메트릭의 경우 원하는 표준 sidecar에 Prometheus를 가리키도록 하세요. 트레이싱의 경우 ConfigMap에서OTEL_EXPORTER_OTLP_ENDPOINT를 설정합니다.
엔터프라이즈
EE 기능을 활성화하려면 공개 키 + 고객의 라이선스를 전달합니다:
helm upgrade singlink ./deploy/helm/singlink -n singlink \
--reuse-values \
--set secret.licensePublicKey="..." \
--set secret.licenseKey="..."전체 라이선싱 흐름은 CE vs EE를 참조하세요.