【架构拆解】从架构师的角度去看Kubernetes系统

从架构师视角拆解 Kubernetes:为什么诞生、如何设计,以及它到底解决了什么问题

很多人学习 Kubernetes 是从 Pod、Deployment、Service 开始的。

但对于架构师而言,更重要的问题是:

Kubernetes 为什么会出现?它解决了什么问题?为什么这样设计?这些设计思想又能迁移到哪些复杂系统中?

本文尝试从架构设计视角,而非运维视角,全面拆解 Kubernetes。


文章目录

一、Kubernetes 为什么诞生?

云计算时代的新挑战

在虚拟机时代,一个应用通常对应一台服务器。

随着容器技术的发展,部署成本大幅降低:

text 复制代码
1台服务器
  ↓
10个容器
  ↓
100个容器
  ↓
1000个容器

当企业拥有数百台服务器、数万个容器时,新的问题出现了:

  • 容器崩溃怎么办?
  • 服务器故障怎么办?
  • 流量突然增长怎么办?
  • 如何自动扩容?
  • 如何自动恢复?
  • 如何统一升级?

人工运维开始失效。


Google 的解决方案

事实上,在 Kubernetes 出现之前,Google 已经运行着一个内部系统:

Borg

Google 使用 Borg 管理其全球基础设施:

  • Gmail
  • YouTube
  • Google Search
  • Google Maps

等核心业务。

2014 年,Google 将 Borg 的设计思想开源,最终形成了:

Kubernetes


二、Kubernetes 到底解决什么问题?

很多人认为:

Kubernetes 是容器管理平台。

这并不准确。

更准确的说法是:

Kubernetes 是一个大规模分布式系统自动控制平台。

它解决的是:

text 复制代码
如何自动管理海量应用运行状态

具体包括:

服务故障恢复

text 复制代码
Pod Crash
↓
自动重建

节点故障恢复

text 复制代码
Node Down
↓
业务迁移

自动扩缩容

text 复制代码
流量增长
↓
增加实例

流量下降
↓
减少实例

滚动升级

text 复制代码
V1
↓
V2

过程中保证业务不中断。


三、Kubernetes 的核心设计目标

Kubernetes 最大的创新之一是:

声明式(Declarative)

用户不需要告诉系统:

text 复制代码
如何创建
如何调度
如何恢复

只需要告诉系统:

yaml 复制代码
replicas: 3

意思是:

text 复制代码
我希望有3个实例运行

至于:

  • 放在哪里
  • 如何创建
  • 挂了怎么恢复

全部由系统完成。


四、整体架构

Kubernetes 采用经典的:

Control Plane + Data Plane

架构。

text 复制代码
                 User
                   │
                   ▼

            API Server
                   │

        ┌──────────┴──────────┐

        ▼                     ▼

      etcd              Controller

                              │

                              ▼

                         Scheduler

                              │

                              ▼

                            Node

                              │

                              ▼

                             Pod

Control Plane(控制平面)

负责:

  • 状态管理
  • 调度决策
  • 自动恢复
  • 集群管理

核心组件:

text 复制代码
API Server
Controller Manager
Scheduler
etcd

Data Plane(数据平面)

负责:

text 复制代码
运行应用
处理流量
提供服务

核心组件:

text 复制代码
Node
Pod
Container

五、Kubernetes 最重要的抽象

很多人认为 Kubernetes 的核心抽象是:

text 复制代码
Pod

实际上不是。

真正的核心抽象是:

Resource(资源)

在 Kubernetes 中:

text 复制代码
Pod
Deployment
Service
Node
ConfigMap
Secret

本质上都是资源。

统一结构:

yaml 复制代码
metadata:
spec:
status:

例如:

yaml 复制代码
apiVersion: apps/v1
kind: Deployment

metadata:
  name: demo

spec:
  replicas: 3

status:
  availableReplicas: 3

这种设计带来的好处是:

万物资源化

系统内部统一处理。

开发者不需要针对每种对象设计完全不同的框架。


六、Kubernetes 的核心设计模式

1. Controller Pattern

这是 Kubernetes 最重要的设计模式。

Controller 持续执行:

text 复制代码
Observe
↓
Compare
↓
Reconcile

即:

text 复制代码
观察
↓
比较
↓
修正

例如:

期望状态:

text 复制代码
3个Pod

实际状态:

text 复制代码
2个Pod

发现差异:

text 复制代码
Desired != Current

Controller 自动创建:

text 复制代码
第3个Pod

直到:

text 复制代码
Desired == Current

2. Control Loop

控制循环思想来自工业控制系统。

类似:

  • 自动驾驶
  • 飞机自动驾驶仪
  • 工业自动化控制

系统持续执行:

text 复制代码
检测
↓
决策
↓
执行
↓
检测

形成闭环。


3. Event Driven

事件驱动。

例如:

text 复制代码
Pod Created
Pod Deleted
Node Down

产生事件。

Controller 根据事件执行动作。


4. Operator Pattern

允许用户扩展自己的业务控制器。

例如:

text 复制代码
MySQL Operator

Redis Operator

Kafka Operator

七、核心组件分析

API Server

整个系统唯一入口。

所有操作必须经过 API Server。

负责:

  • API管理
  • 认证
  • 授权
  • 状态读写
  • 对象管理

为什么重要?

因为统一入口意味着:

text 复制代码
统一安全
统一审计
统一治理

etcd

Kubernetes 的状态中心。

负责保存:

text 复制代码
Desired State
Current State

为什么不用 MySQL?

因为 Kubernetes 更关注:

text 复制代码
状态一致性

而不是:

text 复制代码
复杂查询

etcd 提供:

  • 强一致性
  • Watch机制
  • Leader选举

非常适合控制平面。


Controller Manager

系统真正的大脑。

负责:

text 复制代码
自动纠偏

例如:

text 复制代码
Deployment Controller
Node Controller
Job Controller

Scheduler

负责资源调度。

决定:

text 复制代码
Pod运行在哪台机器

本质是:

text 复制代码
资源优化问题

八、关键流程分析

以创建 Deployment 为例。


Step1

用户提交:

yaml 复制代码
replicas: 3

Step2

API Server 接收请求。


Step3

写入 etcd。


Step4

Deployment Controller 发现:

text 复制代码
需要3个Pod

Step5

创建 Pod 对象。


Step6

Scheduler 分配节点。


Step7

Node 启动容器。


完成部署。


九、数据流分析

text 复制代码
YAML
 ↓
API Server
 ↓
etcd
 ↓
Controller
 ↓
Pod Object
 ↓
Scheduler
 ↓
Node
 ↓
Container

十、控制流分析

Kubernetes 本质上是一个持续运行的控制系统。

text 复制代码
Observe
 ↓
Compare
 ↓
Reconcile
 ↓
Observe
 ↓
Compare
 ↓
Reconcile

无限循环。


十一、扩展机制

Kubernetes 成功的重要原因之一:

CRD(Custom Resource Definition)

允许定义新的资源类型。

例如:

yaml 复制代码
kind: Database

或者:

yaml 复制代码
kind: RedisCluster

无需修改 Kubernetes 源码。


Operator

允许为资源定义自己的控制器。

实现:

text 复制代码
资源
+
控制逻辑

统一管理。


十二、Kubernetes 的优点

1. 自动化能力强

自动部署。

自动恢复。

自动扩容。


2. 声明式架构

用户关注目标。

系统负责过程。


3. 可扩展性极强

CRD + Operator 提供无限扩展能力。


4. 插件化设计优秀

支持:

  • 网络插件
  • 存储插件
  • 调度插件

自由扩展。


十三、Kubernetes 的缺点

学习成本高

组件众多。

概念复杂。


调试困难

控制链路较长。

问题定位成本高。


运维复杂

尤其是:

text 复制代码
etcd
网络
证书

维护难度较高。


小规模场景收益有限

对于:

text 复制代码
单机应用
小团队项目

往往过重。


十四、最佳实践场景

Kubernetes 最适合:

云平台

大规模资源管理。


PaaS平台

企业内部应用平台。


微服务平台

数百到数万个服务。


AI平台

GPU资源调度。


SaaS平台

多租户业务管理。


十五、架构师真正应该学什么?

很多人学习 Kubernetes:

text 复制代码
Pod
Deployment
Service
Ingress

学完以后:

text 复制代码
会用K8S
不会设计系统

而从架构师视角看:

Kubernetes 最值得学习的是:

统一资源模型

text 复制代码
Resource

控制器模式

text 复制代码
Controller Pattern

控制循环

text 复制代码
Control Loop

声明式系统

text 复制代码
Desired State

控制平面思想

text 复制代码
Control Plane
+
Data Plane

总结

Kubernetes 的伟大之处,并不在于它能管理容器。

而在于它提出了一套可以管理复杂系统的通用方法论:

text 复制代码
统一资源抽象
+
声明式目标
+
状态存储
+
控制器纠偏
+
持续控制循环

这套思想不仅适用于容器编排,也广泛存在于云平台、网络控制器、服务治理平台、数据库集群管理系统等大型基础设施中。

对于架构师而言,真正值得学习的不是 Kubernetes 的命令,而是 Kubernetes 背后的系统设计哲学。

相关推荐
Patrick_Wilson1 天前
幂等到底是什么?从前端视角讲透 SQL、HTTP 与 POST 接口的幂等设计
前端·后端·架构
禅思院1 天前
Vite vs Webpack 深度对比:从启动原理到生产构建,一篇就够了
前端·架构·前端框架
Cerrda2 天前
开发体验升级:UnoCSS 自定义 SVG 图标热更新方案
架构·前端框架
Kstheme2 天前
把任何 GitHub 仓库变成系统设计课:这个开源项目做到了
架构
禅思院2 天前
路由性能高可用架构实战方案
前端·架构·前端框架
贵慜_Derek3 天前
《从零实现 Agent 系统》连载 32|闭集 IE 与小模型:分类、意图与字段抽取
人工智能·架构·agent
江米小枣tonylua4 天前
译:设计生产级 RAG 架构
架构
怕浪猫4 天前
领域特定语言(Domain-Specific Language, DSL)
设计模式·程序员·架构
怕浪猫4 天前
哪些软件对 Chrome DevTools Protocol 频繁使用
人工智能·架构·前端框架