docker-compose 不支持自动负载感知伸缩,必须迁移到 Kubernetes 并配置 HPA;其 scale 命令仅为手动扩缩容,无监控闭环、跨节点调度及健康检查,无法满足生产级弹性需求。

docker-compose 本身不支持自动负载感知伸缩,它只是本地/单机多容器编排工具;真要实现“按需伸缩”,必须把 docker-compose 作为起点,迁移到 Kubernetes 并启用 HorizontalPodAutoscaler(HPA)。
为什么不能直接用 docker-compose scale 做生产级弹性伸缩
docker-compose scale 只是手动调整容器副本数,不感知 CPU、内存或请求延迟等真实负载指标。它没有监控闭环,也不能跨节点调度,更无法和 GPU、自定义指标联动。在流量突增时,你得人工登录服务器执行命令——这和半夜爬起来扩容没区别。
常见错误现象包括:
- 用
docker-compose up --scale web=10启动后,所有容器挤在同一台宿主机上,导致 OOM 或端口冲突 - 服务健康检查缺失,扩出来的容器根本没就绪,流量却被打过去
- 没有反亲和性配置,多个副本被调度到同一物理节点,单点故障直接雪崩
怎么把 docker-compose.yml 迁移到 Kubernetes 并启用 HPA
核心思路是:先转成 Kubernetes 原生对象,再补上弹性策略。不要指望 docker-compose convert 一步到位——它生成的 YAML 缺少资源限制、探针、HPA 配置等关键字段,必须手修。
实操建议:
- 用
docker-compose convert -f docker-compose.yml > k8s-deployment.yaml生成初稿,但仅作参考 - 手动重写为标准
Deployment+Service,务必设置resources.requests/limits,否则 HPA 不工作 - 添加
livenessProbe和readinessProbe,尤其对模型服务(如 Qwen3-VL-8B),启动耗时长,必须调大initialDelaySeconds - HPA 对象单独写,引用
scaleTargetRef指向你的 Deployment,比如:apiVersion: autoscaling/v2 kind: HorizontalPodAutoscaler metadata: name: qwen-vl-hpa spec: scaleTargetRef: apiVersion: apps/v1 kind: Deployment name: qwen-vl-api minReplicas: 2 maxReplicas: 8 metrics: - type: Resource resource: name: cpu target: type: Utilization averageUtilization: 70
GPU 模型服务伸缩的特殊处理
AI 推理类服务(如造相-Z-Image-Turbo、QWEN-AUDIO)不能只看 CPU 利用率——GPU 显存占用、推理延迟、队列积压才是关键。Kubernetes 原生 HPA 不支持这些指标,必须扩展。
你需要:
- 部署
prometheus+node-exporter+dcgm-exporter(专采 NVIDIA GPU 指标) - 用
custom-metrics-apiserver暴露nvidia.com/gpu/memory.used等指标 - 在 HPA 中改用
type: Pods或type: External,例如基于每秒请求数(http_requests_total)或 P95 延迟伸缩 - 设置
behavior.scaleDown.stabilizationWindowSeconds至少 300 秒,避免 GPU 实例频繁启停——冷启一次 Qwen3-VL-8B 可能要 90 秒以上
真正难的不是写 YAML,而是让伸缩决策“不瞎动”:HPA 默认 15 秒抓一次指标,但模型服务响应周期长,监控窗口、冷却时间、指标采集粒度全得对齐业务节奏。一个没调好的 HPA,比不伸缩还危险。











