第三部分:从单机 Docker 到集群 Kubernetes

📝 前言

在容器技术的早期阶段,Docker 以其简单易用的特性迅速成为开发者的“标配”,从构建、打包到运行应用,几乎一条命令就能搞定。

然而,随着业务规模扩大、部署环境复杂化,仅依靠单机 Docker 已经难以满足弹性伸缩、高可用与自动化运维的需求。

为了解决多容器管理问题,Docker Compose 出现作为中间过渡方案,而最终 Kubernetes(K8s) 则成为集群编排的终极解决方案。

本文是云原生之旅第三部分的第一篇,带领大家从单机 Docker 的视角,循序渐进地走到 Kubernetes 集群的世界。

🧠 本章知识卡片

🚀 本章小节

1️⃣ 单机 Docker 的局限性

Docker 在单机环境中最大的优势是轻量、快速、易用,但它也存在天然的限制:

  • 资源限制:所有容器运行在同一台机器上,CPU、内存有限。
  • 高可用不足:主机宕机意味着所有容器全部不可用。
  • 多容器管理困难:如果应用依赖多个服务,需要手动维护容器启动顺序与参数。
  • 扩展瓶颈:弹性伸缩需要人工干预,无法自动根据流量变化调整容器数量。

在业务初期,这些限制并不明显,但一旦用户规模扩大,就会直接影响系统稳定性和运维效率。

2️⃣ Docker Compose:单机多容器编排的过渡方案

在迁移到 Kubernetes 之前,Docker Compose 是很多团队的自然选择。

它是一个单机容器编排工具,通过一个 YAML 文件描述多容器应用及其依赖,使用 docker compose up 一键启动。

优点

  • 配置集中化:所有服务定义集中在 docker-compose.yml 中。
  • 多容器管理:数据库、缓存、后端、前端等可一次性启动/停止。
  • 简化依赖管理:支持容器间的网络与启动顺序定义。

局限

  • 依旧是单机:无法跨节点调度容器。
  • 伸缩能力有限:支持 scale 手动扩容,但不能自动伸缩。
  • 高可用缺失:容器或宿主机异常需要人工处理。

适用场景:本地开发环境、多容器单机部署、测试环境。

更多详情介绍可参看之前的一篇文章:《第二部分:从 Docker 到 Docker Compose》

3️⃣ 为什么选择 Kubernetes

Kubernetes 的诞生,就是为了管理多台机器上的容器,它带来了许多 Docker/Compose 所不具备的能力,以下是它们的对比:

特性 单机 Docker Docker Compose Kubernetes
弹性伸缩 手动 手动 自动伸缩(HPA)
高可用 多节点冗余,自动容器调度
服务发现 需手动配置 自动单机网络 内置 DNS 与跨节点服务发现
滚动升级 需停机或自写脚本 原生滚动更新与回滚
资源调度 单机 单机 集群级别智能调度
运维自动化

一句话总结:

Docker 解决了“如何构建并运行容器”的问题,Docker Compose 解决了“如何在单机管理多容器”的问题,Kubernetes 解决了“如何大规模、自动化、可靠地运行容器”的问题。

4️⃣ 使用 kompose 一键迁移至 Kubernetes

什么是 kompose ?

kompose 是 Kubernetes 社区官方维护的一个迁移工具,可以一键把 Docker Compose 转成 Kubernetes YAML。

如果已经有了docker-compose.yaml文件,使用该工具可以大大减少手工编写YAML的工作量。

安装 kompose

1
2
3
4
5
6
7
8
# macOS(Homebrew)
brew install kompose

# Linux
curl -L https://github.com/kubernetes/kompose/releases/latest/download/kompose-linux-amd64 \
-o kompose
chmod +x kompose
sudo mv ./kompose /usr/local/bin/kompose

PS:如果无法从 github 官方下载,可关注公众号【青萍叙事】,回复kompose即可获取快速下载链接。

一键转换 YAML
kompose 的用法也很简单,一键即可将docker-compose.yaml文件转换并生成k8s yaml

1
2
# 一键转换,执行完后会在当前目录下生成 k8s yaml 文件
kompose convert -f docker-compose.yaml

✅ 总结

从单机 Docker 到 Docker Compose 再到 Kubernetes,不只是一次工具迁移,更是一次运维思维的升级

  • 单机思维多容器协作思维再到集群思维
  • 手工部署声明式管理
  • 资源限制弹性扩展

未来,随着 Serverless + Kubernetes 的结合,开发者将更少关注底层集群管理,而把更多精力投入到业务逻辑上。

对于正处在业务增长阶段的团队来说,以 Docker Compose 作为过渡,将会让迁移过程更加平滑、风险更可控。

而借助 kompose 工具,开发者可以无缝迁移现有 Compose 配置到 Kubernetes,降低学习和改造成本。