01 - 为什么需要 Kubernetes?
从 Docker 到 K8s 的必然演进
Docker 解决了"打包和运行单个应用"的问题,但在生产环境中,你面临的是:
- 数十甚至数百个容器要管理
- 容器挂了谁来自动重启?
- 流量大了怎么自动扩容?
- 新版本发布时怎么零停机更新?
- 多台机器上的容器怎么互相通信?
- 怎么合理地分配资源到不同机器?
Kubernetes(K8s) 就是为了解决这些问题而生的容器编排系统。
Kubernetes 是什么
一句话定义:Kubernetes 是一个用于自动化部署、扩缩容和管理容器化应用的开源平台。
名字来自希腊语"舵手"(κυβερνήτης),K 和 s 之间有 8 个字母,所以简称 K8s。
K8s 的核心能力
| 能力 | 说明 |
|---|---|
| 服务发现与负载均衡 | 自动为容器分配 DNS 名称和 IP,并在多个副本间负载均衡 |
| 自动装箱(调度) | 根据资源需求和约束自动将容器放到合适的节点上 |
| 自动修复 | 容器崩溃自动重启,节点故障自动迁移 Pod |
| 自动扩缩容 | 根据 CPU/内存等指标自动增减容器副本数 |
| 滚动更新与回滚 | 零停机发布新版本,出问题一键回滚 |
| 配置与密钥管理 | 安全地管理配置和敏感信息,不需要重建镜像 |
| 存储编排 | 自动挂载本地存储、云存储、NFS 等 |
K8s 不是什么
常见误解澄清:
- 不是 PaaS:K8s 不限制你用什么语言、框架、数据库
- 不提供 CI/CD:它是运行平台,不负责构建和测试
- 不管理源码:你需要自己构建镜像推送到 Registry
- 不是万能的:简单场景可能不需要 K8s(比如跑一个博客)
K8s vs 其他编排工具
| 特性 | Docker Compose | Docker Swarm | Kubernetes |
|---|---|---|---|
| 规模 | 单机 | 小集群 | 大规模集群 |
| 复杂度 | 低 | 中 | 高 |
| 社区生态 | 小 | 小 | 极大 |
| 云厂商支持 | 无 | 无 | 全部主流云(ACK、EKS、GKE、AKS) |
| 自动扩缩容 | 无 | 有限 | 完整 |
| 生产就绪 | 不适合 | 一般 | 首选 |
