Skip to content

Kubernetes 部署

deploy/k8s/ 提供了最小可用的 Kubernetes 清单:api / worker / transcoder / etcd + ConfigMap

清单一览

文件资源说明
configmap.yamlConfigMap vistack-config容器内配置 app.k8s.toml(各服务经 VISTACK_CONFIG_PATH 挂载)
etcd.yamlDeployment + Service单节点 etcd(生产建议 3~5 节点)
api.yamlDeployment + ServiceAPI 服务(args: ["api"]
worker.yamlDeploymentWorker(args: ["worker"]
transcoder.yamlDeploymentTranscoder,默认 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 面向集群化、弹性伸缩与多租户场景。

基于 MIT License 发布