Skip to content

Kubernetes ​

这里主要整理 Kubernetes 这条线。先不用急着背对象名,把它为什么会出现、到底在解决什么问题想清楚更重要:

  1. 为什么有了 Docker 之后还需要 Kubernetes
  2. Kubernetes 到底解决什么问题
  3. 为什么它要用 Pod、Deployment、Service 这些对象来描述系统
  4. 它是怎么把调度、服务发现、扩缩容、发布和自愈串起来的
  5. 工程里哪些能力适合交给 K8s,哪些问题又不只是 K8s 自己能解决

Kubernetes 直接看成:一个面向容器集群的编排和调度平台,用来持续维持应用在集群中的目标状态。

这里的 编排,不要只理解成“把容器启动起来”。更贴近项目现场的说法是:很多容器分散在很多机器上,应该怎么部署、怎么互相访问、挂了怎么恢复、流量怎么进去、发布怎么做、资源怎么分配。


1. 为什么有了 Docker 还不够 ​

Docker 更偏:

  1. 把应用打包成镜像
  2. 在单机上运行容器
  3. 解决环境一致性和交付问题

但当服务越来越多,只靠手工管理容器,很快会遇到这些问题:

  1. 多台机器上的容器怎么统一部署
  2. 某个实例挂了谁来拉起
  3. 服务扩容后别人怎么找到它
  4. 发布时怎么滚动替换,而不是全部一起重启
  5. 资源怎么分配才不会相互抢占

这就是 Kubernetes 出现的原因。


2. Kubernetes 最核心的价值是什么 ​

可以压缩成一句话:把“容器怎么在集群里持续稳定运行”这件事做成标准化、自动化、声明式的一套机制。

这里的 声明式 可以理解成:你主要描述想要的目标状态,而不是亲手一步一步去执行所有操作。

例如:

  1. 我希望这个服务始终有 3 个副本
  2. 我希望外部可以通过一个稳定入口访问它
  3. 我希望发布时逐步替换实例

Kubernetes 会持续把实际状态往目标状态拉回去。


3. Kubernetes 里最核心的几个对象 ​

3.1 Pod ​

Pod 是 Kubernetes 最小部署单元。

可以看成:一组共享网络和部分存储上下文、并且生命周期绑定在一起的容器。

它不等于“只是套了个壳的容器”。Kubernetes 用 Pod 作为最小调度单位,是为了表达哪些容器应该作为一个整体被部署和管理。

3.2 Deployment ​

Deployment 可以理解成 负责管理无状态应用副本数、滚动更新和回滚的一层控制器。

它解决的是:

  1. 应该跑几个副本
  2. 实例挂了要不要补齐
  3. 发布时怎么平滑替换

3.3 Service ​

Service 可以理解成 为一组动态变化的 Pod 提供稳定访问入口和服务发现能力。

它解决的是 Pod 会变,IP 会变,但调用方不应该跟着这些变化一起变。

3.4 Ingress ​

Ingress 可以理解成 把集群外部的 HTTP/HTTPS 流量按域名和路径规则引入到集群内部服务。

它常和反向代理、网关入口、域名路由一起出现。

3.5 ConfigMap 和 Secret ​

它们都用于管理配置。

区别抓住这一层就够了:

  1. ConfigMap:普通配置
  2. Secret:敏感配置

4. Kubernetes 真正强的不是“能跑容器”,而是这些能力能协同工作 ​

单看某个对象,可能会觉得没什么特别,但真正重要的是它们如何一起工作:

  1. Deployment 管 Pod 副本和发布
  2. Service 给 Pod 提供稳定入口
  3. Ingress 把外部流量引进来
  4. 调度器决定 Pod 落到哪台节点
  5. 控制器持续对比实际状态和目标状态

这样一套机制组合起来,才构成了 Kubernetes 的真正价值。


5. Kubernetes 更适合什么,不适合什么 ​

更适合 ​

  1. 容器化应用集群部署
  2. 微服务和多服务协作
  3. 标准化发布流程
  4. 自动扩缩容和自愈
  5. 多环境统一治理

不适合简单理解成 ​

  1. “比 Docker 更高级的单机工具”
  2. “只要上了 K8s 就天然高可用”
  3. “上了 K8s 就不需要关心监控、日志和网络”

Kubernetes 很强,但它不是自动帮你把所有架构问题都解决掉。


6. 当前目录下的专题 ​

推荐阅读顺序:

  1. 看这篇总览,建立 Kubernetes 整体定位
  2. 再看“核心对象与控制器”,理解 Pod、Deployment 这些抽象为什么存在
  3. 再看“Service、Ingress 与网络访问”,理解服务怎么互相找、流量怎么进来
  4. 再看“配置、存储与有状态服务”,理解有状态场景为什么更复杂
  5. 最后看“调度、扩缩容与发布实践”,把这些能力串到工程场景里

7. 常见误区 ​

7.1 误区一:把 Kubernetes 理解成“会自动帮你运维一切” ​

它能自动化很多事,但前提是:

  1. 对象建模合理
  2. 资源设置合理
  3. 监控、日志、告警链路到位
  4. 应用本身具备基本可运维性

7.2 误区二:只会背对象名,不理解对象协作关系 ​

真正重要的不是单个对象定义,而是:一个请求、一个服务、一次发布,在这套对象体系里是怎么流转的。

7.3 误区三:把自动扩缩容和高可用混为一谈 ​

扩缩容 关注的是资源弹性,
高可用 关注的是故障时服务还能不能继续可用。

两者相关,但不是一回事。


8. 一句话总结 ​

Kubernetes 最值得先建立的认知,不是“对象清单”,而是它为什么会成为容器集群的操作系统,以及它怎么把部署、流量、配置、扩缩容和发布串成一套稳定的运行体系。

基于 VitePress 构建的个人技术笔记。