什么时候用 Docker,什么时候不用 Kubernetes
很多团队的问题不是"没上 Kubernetes",而是"上得太早"。
技术选型决策路径
graph TD
A[需要容器化?] --> B{环境一致性是主要痛点?}
B -->|是| C[Docker + Compose 单机]
B -->|否| D[可能不需要容器,先解决真正的问题]
C --> E{服务数量 > 10 或需要跨机器扩容?}
E -->|否| F[继续 Compose,成本最低]
E -->|是| G{团队有专职平台工程师?}
G -->|否| H[托管 Kubernetes: GKE/EKS/AKS]
G -->|是| I[自建 Kubernetes 集群]
Docker + Compose 什么时候就够了
适合的场景:
- 单机或 2–3 台服务器(垂直扩容仍有空间)
- 团队规模 < 10 人,没有专职 SRE
- 服务数量 < 10 个
- 主要痛点是:开发/生产环境不一致、依赖冲突
- 发布频率高但每次变更范围小
Docker Compose 能解决的问题:
| 问题 | Compose 的解法 |
|---|---|
| "在我机器上能跑" | docker-compose.yml 锁定依赖版本 |
| 多服务依赖顺序 | depends_on + healthcheck |
| 数据库持久化 | Named volumes |
| 零停机重启 | docker compose up -d --no-deps web |
何时考虑升级到 Kubernetes
真正需要 Kubernetes 的信号(不是因为"高级",而是因为"痛"):
| 信号 | 说明 |
|---|---|
| 需要跨多台机器调度容器 | Compose 只能管理单机 |
| 需要自动水平扩容(HPA) | 流量峰值时需要动态增加实例 |
| 需要滚动发布 + 自动回滚 | 多实例场景的零停机发布 |
| 运维在服务发现/负载均衡上消耗大量时间 | Kubernetes 内置服务发现 |
| 微服务数量超过 20 个 | Compose 管理复杂度过高 |
不应该上 Kubernetes 的理由:
- 团队没有人专门维护平台(K8s 本身就是一个产品)
- 月流量 < 10 万次,单机 Compose 绰绰有余
- 想"学习"或"简历好看"——这是个人理由,不是业务理由
成本对比(参考数字)
| 方案 | 月费用参考 | 运维负担 | 适合规模 |
|---|---|---|---|
| 单台 VPS + Compose | $20–50(4核8G) | 低 | 月活 < 10 万 |
| 2–3 台 VPS + Compose | $60–150 | 中 | 月活 10–50 万 |
| GKE Autopilot(最小) | $100–300+ | 低(托管) | 需要弹性扩容 |
| EKS(AWS,3节点) | $200–500+ | 中(托管) | 需要 AWS 生态 |
| 自建 K8s(3 master + 工作节点) | 硬件 + 大量人力 | 极高 | 大型团队 |
注意:托管 Kubernetes 的控制面(master)有额外费用。GKE: 约 $74/月/集群;EKS: 约 $73/月/集群。
合理的演进路径
阶段 1:单机 systemd(适合起步)
└─ 无容器,直接部署,运维最简单
阶段 2:Docker + Compose(推荐大多数团队)
└─ 环境一致性,依赖隔离,单机编排
阶段 3:托管 Kubernetes(业务需要时再升级)
└─ GKE/EKS/AKS,无需自己维护控制面
阶段 4:自建 Kubernetes(极少数团队需要)
└─ 特殊合规/定制需求,需要专职平台团队
跳过阶段 2 直接到阶段 4 是常见错误:Kubernetes 的运维复杂度是 Compose 的 10 倍以上,在业务没有这个需求之前,它只会拖慢交付速度。
常见误区
| 误区 | 正确做法 |
|---|---|
| "Kubernetes 是免费的" | 托管控制面 $70–80/月,加上节点费用;自建 K8s 需要专职工程师 |
| "上了 K8s 就不会宕机了" | K8s 增加了新的故障点(etcd、scheduler、DNS 等) |
| "Compose 是开发用的,生产要用 K8s" | 大量中小型生产系统长期运行在 Compose 上,稳定可靠 |
| "先上 K8s,以后好扩展" | 过早引入 K8s 会让交付速度降低,先把单机跑好更重要 |
本节执行清单
- [ ] 明确你当前的真实业务规模(月活、服务数量、团队人数)
- [ ] 如果 Compose 能解决问题,写下"继续用 Compose,下一个升级触发条件是 X"
- [ ] 如果需要 K8s,优先选择托管版(GKE/EKS/AKS)而非自建
下一章:AWS 版本实战——把前面的方法映射到第一家云平台。