别折腾 K8s 了,中小企业用 Docker Swarm 到底有多香?
说实话,每次看到中小企业团队花大价钱招 DevOps,又是搭集群又是配 Helm Chart,结果跑的应用就那么几个微服务,我就替他们心疼——不是心疼钱,是心疼那些被浪费在「学习如何管理工具」上的生命。
今天聊聊 Docker Swarm,这个被很多人忽视、甚至被认为是「过时的玩具」的容器编排方案,到底为什么更适合中小团队。
先说个扎心的事实:你真的需要 Kubernetes 吗?
K8s 很强大,这点毫无疑问。但强大的另一面是复杂,而复杂是有代价的:
- 一个最小的生产级 K8s 集群,至少需要3个 master 节点 + 若干净 worker,光基础设施成本就上去了
- RBAC、NetworkPolicy、ResourceQuota...光这些概念就让普通开发团队摸不着头脑
- 问题排查时要看日志、看事件、看描述符,一层套一层,排查链路巨长
很多中小企业的业务场景是什么?几十台服务器,几百个容器,跑着十几二十个服务。说白了,需求很简单:能跑起来,能扩缩容,能滚动更新,故障能自动恢复。
这些需求,Docker Swarm 一个 docker stack deploy 就搞定了。
Docker Swarm 的核心优势,说白了就三点
1. 上手门槛低到离谱
如果你团队里有人会用 Docker Compose,那他就已经会一半的 Docker Swarm 了。Compose 文件稍作修改,加几行 deploy 配置,一个完整的分布式应用就能跑起来。
version: "3.8"
services:
web:
image: nginx:latest
deploy:
replicas: 3
resources:
limits:
cpus: "0.5"
memory: 256M
restart_policy:
condition: on-failure
ports:
- "80:80"
这配置够简单吧?但它已经包含了:
- 服务副本数控制(高可用)
- 资源限制(防止单服务耗尽机器)
- 自动重启策略(故障恢复)
三行配置解决三个问题,K8s 要实现同样的效果,得写 Deployment、Service、HPA,还得配 Resource limits 和 PodDisruptionBudget,哪个更香?
2. 学习曲线几乎是平的
Docker 命令体系对大多数开发者来说是基础技能。Swarm 只是在这基础上增加了一个管理层:
| 操作 | K8s | Docker Swarm |
|---|---|---|
| 查看服务状态 | kubectl get pods,svc |
docker service ls |
| 查看日志 | kubectl logs pod/xxx |
docker service logs svc/xxx |
| 更新服务 | 修改 yaml 后 kubectl apply |
修改 yml 后 docker stack deploy |
| 进入容器调试 | kubectl exec -it pod/xxx sh |
docker exec -it container_id sh |
看右边的命令,有没有一种熟悉的亲切感?这就是你的团队不需要额外培训就能上手的东西。
3. 对小规模场景极其友好
Swarm 的架构本身就轻量。一个 manager 带几个 worker,资源占用可以忽略不计。我见过最夸张的生产案例是一个人的创业公司,用一台阿里云 ECS 同时跑着 MySQL 主从、Nginx、Java 应用和 Redis,全部通过 Docker Compose 管理,日常运维基本为零。
反观 K8s,最小的生产集群也要占用不少资源,更别说 etcd 的高可用要求了。对于日活几千几万的小产品,这些开销完全可以省下来买服务器或者加人力。
但不是说 Swam 没有局限,有些坑你得知道
讲了半天好话,也得说点实在的缺点,不然这篇文章就成了软文:
不擅长的场景:
- 超大规模集群(几百个节点、上千个 Pod)——这是 K8s 的主场,没争议
- 需要精细的资源调度和亲和性控制——Swarm 目前做不到这么细粒度
- 需要复杂的自定义调度策略——比如区域性部署、打散同一服务的实例到不同机房,Swarm 支持但没有 K8s 那么灵活
客观评价: 如果你的业务明年要扩张到支撑百万并发、需要跨云多活、对接 Service Mesh,那早点上 K8s 是对的。但如果你的预期是未来一两年内还是中等规模增长,现有架构能 hold 住,那么折腾一套复杂的 CI/CD + K8s 环境,纯属自找麻烦。
实操建议:三步判断你该选哪个
第一步:数一数你有多少个微服务
10 个以下?毫不犹豫选 Swam。超过50个且有复杂的依赖关系?考虑 K8s。
第二步:评估你们的运维能力
团队里有专职 SRE 或者运维经验丰富的同学?能玩转 YAML 并愿意持续学习?K8s 可以。反之,全栈开发兼顾运维,连 Linux 都只是会用程度?别为难自己,上 Swam 先把业务跑起来比什么都重要。
第三步:看增长预期
如果未来6个月内流量不会有数量级的变化,先上 Swam,把精力放在产品上。等业务真的起来了,再做技术迁移也不迟,技术债务这东西,早期不存在的问题都不是问题。
我的真实经历:从 K8s 回退到 Swarm 的团队
之前接触过一个 SaaS 初创公司,他们 CTO 一上来就要对标大厂,搞了一套完整的 GitOps + ArgoCD + K8s 生产架构。结果呢?
三个后端开发轮流转值班,每周至少有两天在处理各种奇怪的 Pod crash、网络不通、CNI 问题。最离谱的一次,他们为了修复一个 Ingress 配置问题,花了整整两天查文档、改配置、等滚动更新完成。
后来我建议他们先试着用 Docker Stack 重构一遍部署流程。结果呢?他们花了两个周末迁移完所有服务,现在三个人都能独立部署,再也没因为「工具太复杂」耽误过业务迭代。当然,这不代表他们以后不会切回 K8s,但至少现阶段,业务活着比技术选型正确更重要。
最后说一句掏心窝的话
技术选型这件事,从来都不是「哪个最强用哪个」,而是「哪个最适合现在的你和你的团队」。
中小企业最大的敌人不是缺技术,而是缺时间、缺人手。把原本可以快速迭代产品的精力花在研究 DaemonSet 为什么调度失败,不值当。Docker Swarm 不是妥协,它是一种务实的选择——先让业务跑起来,等有了更多资源和更明确的规模需求,再去升级基础设施也不迟。
所以,别再无脑卷 Kubernetes 了。停下来问问自己:我真的需要这些复杂度吗?如果答案是「不需要」,那 Docker Swarm,就是那个答案。