容器编排的前世今生:K8s 解决了哪些痛点

212 阅读4分钟

你以为 Kubernetes 只是用来“跑容器”的?
其实,它解决的是一套分布式系统几十年来反复踩坑的老问题。从手动部署,到容器崛起,再到编排平台大浪淘沙,K8s 是走在尸山血海上诞生的“编排王者”。


️ 编排是什么?先说点“前世”的事

我们先从一个问题开始:

如果你有一个 Web 应用,要部署 100 个副本,横跨 20 台服务器,怎么干?

这其实就是“编排”的问题,即:

  • 应用部署到哪里?
  • 怎么启动?
  • 如何连通网络?
  • 如何感知它挂了?
  • 挂了之后怎么办?
  • 如何优雅上线新版本?

当系统只运行在一台服务器上时,这些问题根本不是问题。但一旦进入分布式时代(多台机器 + 多个副本) ,你将面临如下挑战。


没有编排器的年代:靠人力扛的“地狱级副本”

在没有容器、没有编排器的年代,部署应用像这样:

  • 每台服务器都要手动安装依赖;
  • 每次部署都得用 scp + ssh;
  • 要手动写脚本来启动、关闭、拉日志;
  • 配置文件分布在多台机器上,极易错乱;
  • 应用挂了没人知道,监控靠“钉钉消息”;
  • 想做蓝绿发布?滚动更新?几乎不可能。

容器时代来了,但问题也没解决

Docker 横空出世,第一次让开发与运维有了隔离机制:

  • “我给你一个镜像,能跑就是能跑。”
  • 应用打包一次、处处运行;
  • 镜像内集成依赖、环境、配置;
  • 一条命令 docker run 就能启动服务。

BUT!当容器多了以后,又遇到新问题:

问题描述
容器在哪运行?哪台机器有资源?怎么调度?
容器宕了怎么办?如何感知?自动重启?
容器怎么访问彼此?IP 是动态的?端口冲突怎么办?
服务怎么对外暴露?流量怎么进来?
配置怎么统一管理?每个容器要不同变量怎么办?
多容器升级?回滚?怎么控制灰度?怎么 A/B?

简而言之,Docker 解决的是“单个容器运行”的问题,而不是集群级容器管理的问题。


容器编排器的登场:Swarm、Mesos 与 K8s

当人们意识到容器变多了之后,开始造轮子进行编排

编排工具优点缺点
Docker Swarm原生、轻量、易上手社区式微、功能有限
Mesos + Marathon通用调度器、支持多框架配置复杂、运维难度高
Kubernetes社区活跃、生态繁荣、企业认可学习曲线陡峭、资源开销高

这些系统的目标都是一样的:

你只要说出“想要什么”,我帮你安排“怎么做”。


Kubernetes 是如何解决这些痛点的?

痛点Kubernetes 解法
容器运行在哪?Scheduler 根据资源动态调度 Pod
容器崩了怎么办?Controller 检测状态自动重建
IP 动态问题?Pod + Service 模型稳定访问地址
网络连通性?CNI 插件自动构建 Overlay 网络
对外暴露服务?Service、Ingress 管理进出流量
多副本负载均衡?kube-proxy 实现连接转发
滚动升级与灰度?Deployment 滚动发布、回滚自如
配置集中管理?ConfigMap、Secret 支持注入
运维统一视图?API Server + Dashboard/Prometheus

下面用一个典型“没 K8s vs 有 K8s”的流程图来对比:


一个例子:部署 Nginx 的对比体验

没 Kubernetes:

scp nginx.tar user@192.168.1.101:/apps/
ssh user@192.168.1.101
docker load -i nginx.tar
docker run -d -p 8080:80 nginx

用 Kubernetes:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx:latest
        ports:
        - containerPort: 80
kubectl apply -f nginx.yaml

结果:自动调度、自动创建 3 个副本、挂掉自动恢复、服务可访问。


为什么 Kubernetes 胜出?

Kubernetes 胜出的关键在于:

✅ 开源 + 云厂商强力背书(Google、AWS、阿里、腾讯)
✅ 社区庞大,生态丰富(Istio、Helm、ArgoCD)✅ 标准化 API,支持 GitOps、DevOps✅ 适配云上、裸机、本地多种部署场景✅ 支持企业级安全、审计、网络策略等功能

它不仅仅是个编排器,更是一个现代云基础设施的操作系统内核


✅ 总结一句话

容器解决了“能不能跑”,Kubernetes 解决了“怎么优雅地大规模运行”。

如果你今天还在手动部署容器,踩一遍我们曾踩过的坑,不如直接进入 Kubernetes 的世界。

它的设计目标不是让你多学一堆 YAML,而是让你从繁杂的系统管理中彻底解放。


关注我,不走丢,一起玩转 Kubernetes!