Kubernetes 部署
deploy/k8s/ 提供了最小可用的 Kubernetes 清单:api / worker / transcoder / etcd + ConfigMap。
清单一览
| 文件 | 资源 | 说明 |
|---|---|---|
configmap.yaml | ConfigMap vistack-config | 容器内配置 app.k8s.toml(各服务经 VISTACK_CONFIG_PATH 挂载) |
etcd.yaml | Deployment + Service | 单节点 etcd(生产建议 3~5 节点) |
api.yaml | Deployment + Service | API 服务(args: ["api"]) |
worker.yaml | Deployment | Worker(args: ["worker"]) |
transcoder.yaml | Deployment | Transcoder,默认 2 副本,注入 POD_IP(用于 etcd 注册地址与 Snowflake node_id) |
部署步骤
bash
# 1. 构建并推送镜像(或使用已有镜像仓库)
docker build -t vistack:latest --target vistack .
docker build -t vistack-transcoder:latest --target vistack-transcoder .
# 2. 应用配置与基础组件
kubectl apply -f deploy/k8s/configmap.yaml
kubectl apply -f deploy/k8s/etcd.yaml
# 3. 部署业务服务
kubectl apply -f deploy/k8s/api.yaml
kubectl apply -f deploy/k8s/worker.yaml
kubectl apply -f deploy/k8s/transcoder.yaml
# 4. 查看状态
kubectl get pods,svc注意:
configmap.yaml中的中间件地址(postgres / redis / minio / kafka / etcd)需与集群内实际服务名一致;生产环境建议改用 Secret 存放凭证。
水平扩展
bash
# 扩容 transcoder(计算节点,默认已 2 副本)
kubectl scale deployment transcoder --replicas=5
# 扩容 api / worker
kubectl scale deployment api --replicas=3
kubectl scale deployment worker --replicas=2- transcoder 副本数随转码负载调整,新增 Pod 自动向 etcd 注册;
- worker 副本数受 Kafka topic 分区数约束(消费组共享分区);
- retry dispatcher / watchdog 由 etcd 领导选举保证单例,多 worker 安全。
配置注入方式
清单使用 ConfigMap 挂载配置:
yaml
# deploy/k8s/api.yaml 片段
env:
- name: VISTACK_CONFIG_PATH
value: /app/conf/app.k8s.toml
volumeMounts:
- name: config
mountPath: /app/conf/app.k8s.toml
subPath: app.k8s.toml
volumes:
- name: config
configMap:
name: vistack-config生产化 checklist(演进方向)
当前清单是「最小可用」版本,生产部署前建议补齐:
- [ ] 中间件高可用:etcd 3~5 节点、Kafka 3 broker、PostgreSQL 主从(或云 RDS)、Redis Sentinel/Cluster、分布式 MinIO;
- [ ] Secret 管理:数据库密码 / JWT 密钥 / MinIO 凭证 / Auth RSA 私钥改用 Secret,不要明文写入 ConfigMap;
- [ ] 探针:
/health接入 readiness / liveness(区分依赖就绪与进程存活); - [ ] 资源限制:为每个容器配置
resources.requests/limits(transcoder 内存敏感); - [ ] HPA:api 按 CPU、worker 按队列深度自动扩缩;
- [ ] Ingress / 网关:
api.yaml目前只有 ClusterIP Service,需补 Ingress 或复用 Traefik 网关统一入口; - [ ] 可观测性:Prometheus metrics + OpenTelemetry 链路追踪 + 日志聚合。
单机场景?
单机或多机简单部署直接用 Docker 一键部署 更省事;K8s 面向集群化、弹性伸缩与多租户场景。
