背景 · 部署方式的演变

容器革命并不是一夜之间发生的,而是服务器部署方式不断进化的结果。


传统部署 → 虚拟化 → 容器化:技术演进三阶段

一、传统物理机部署(落后但曾经主流)

典型特点:

  • 应用直接安装在物理机上

  • 资源不可隔离

  • 一个程序跑满 CPU,其他应用全被拖垮

  • 扩展困难,维护成本高

  • “一机一应用”导致大量资源浪费

总结:不隔离、不弹性、不好用。

二、虚拟化部署(第一次实现隔离)

虚拟化技术带来了革命性变化:

  • 一台物理机上运行多个虚拟机(VM)

  • 每个 VM 拥有独立 CPU、内存

  • 应用隔离性更强

  • 资源利用率提升

  • 支持更灵活的扩展

但仍有问题:

❌ 每个 VM 都需要一个完整的操作系统 ❌ 冗余多、体积大

图片

级时代真正到来)

容器是新一代应用运行方式:

  • 共享宿主机操作系统

  • 启动速度快、资源占用低

  • 跨平台、跨环境一致运行

  • 更适合 DevOps、微服务架构

容器的两个核心技术:

  • Namespaces:隔离环境

  • Cgroups:限制资源

容器带来的巨大优势:

  • 快速构建和部署

  • 环境一致、可迁移

  • 高密度部署、极致资源利用率

  • 可观察性强

  • 微服务天然搭配

容器不是替代虚拟机,而是现代应用的最佳交付方式。

f4129aff-9edb-4216-b164-ff8caff49c7d.png

容器化带来的新问题

当系统中有几十、几百、甚至上千个容器时,会出现:

  • 如何自动化管理容器?

  • 容器挂了谁来拉起来?

  • 如何弹性扩展?

  • 如何做滚动更新?

  • 如何发现服务和负载均衡?

答案就是:Kubernetes。


为什么使用 Kubernetes(K8s)?

Kubernetes 是容器编排的事实标准,它能够自动化管理大规模容器集群。

🔥 K8s 提供的核心能力:

✔ 服务发现 & 负载均衡

自动分配容器 IP,流量大时自动分流。

✔ 存储编排

自动挂载本地盘、云盘、网络存储。

✔ 自动部署 & 回滚

定义好“期望状态”,K8s 会自动将系统调整到目标状态。

✔ 资源调度(装箱)

根据容器需求自动调度到最合适的节点。

✔ 自我修复

容器挂了 → 自动重启 健康检查失败 → 自动替换 就绪前不对外服务

✔ 密钥与配置管理

密码、密钥等敏感信息可以安全管理,不用写进镜像。

一句话:Kubernetes 让容器集群的运维进入全自动时代。


Kubernetes 简介

Kubernetes 是一个开源的容器管理平台:

  • Google 2014 年开源

  • 源自 Google 十多年 Borg 生产经验

  • 拥有最大容器生态系统

  • 支持所有主流云厂商

“Kubernetes”意为“舵手”,简称 k8s(中间 8 个字母)。


Kubernetes 不是什么?你可能误解了

Kubernetes 不是

  • ❌ PaaS 平台

  • ❌ CI/CD 系统

  • ❌ 数据库、中间件平台

  • ❌ 日志监控系统

  • ❌ 机器管理系统

  • ❌ 单体式部署工具

Kubernetes 提供的是:

  • 声明式 API

  • 弹性伸缩机制

  • 自动化调度

  • 可插拔的组件体系

K8s 是构建云平台的基座,而不是完整的云平台本身。


Kubernetes 集群原理解析


集群架构:Master & Node 分工

🧠 控制面(Control Plane / Master)

负责“大脑级”功能:

  • kube-apiserver

    :所有操作的入口

  • etcd

    :存储集群状态的键值数据库

  • scheduler

    :调度器

  • controller-manager

    :各种控制器

💪 工作节点(Node)

负责运行应用:

  • kubelet

    :管理 Pod

  • kube-proxy

    :管理网络

  • 容器运行时(containerd/Docker)

🧱 Pod:K8s 最小调度单元

  • 一个 Pod = 一个或多个紧密耦合的容器

  • 共享网络、存储与生命周期

微信图片_2026-01-19_160826_080.png

Kubernetes 是如何部署一个 Tomcat 的?

当你运行:

kubectl create deploy tomcat --image=tomcat:8

K8s 内部会发生 13 个步骤

  1. kubectl 将请求发送给 apiserver

  2. apiserver 写入 etcd

  3. etcd 触发事件

  4. controller-manager 监听到新的 Deployment

  5. 生成对应 Pod 的期望状态

  6. apiserver 写入 etcd

  7. etcd 再触发事件

  8. scheduler 发现“有未调度 Pod”

  9. 选择最合适节点(例如 node-02)

  10. 写回调度结果

  11. 各节点的 kubelet 获取调度事件

  12. node-02 的 kubelet 发现需要自己运行

  13. 启动 Pod,并向 apiserver 汇报状态

Kubernetes 的核心理念:不断将“实际状态”向“期望状态”靠拢。

微信图片_2026-01-19_160826_080.png