WEBKT

别折腾 K8s 了,中小企业用 Docker Swarm 到底有多香?

24 0 0 0

说实话,每次看到中小企业团队花大价钱招 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,就是那个答案。

老王聊架构 Kubernetes容器编排

评论点评