【kubernetes v1.21】(一)Kubernetes 总览架构深度分析
Kubernetes 总览架构深度分析
基于 Kubernetes 源码(
github.com/kubernetes/)的系统性架构分析文档。
目录
- 一、项目定位与业务职责
- 二、目录结构总览
- 三、整体架构图
- 四、组件交互图
- 五、数据流图
- 六、请求处理链路图
- 七、Etcd 存储架构图
- 八、认证授权链路图
- 九、控制器协同图
- 十、调度框架与流程图
- 十一、Kubelet 节点架构图
- 十二、网络模型与 Service 架构图
- 十三、Informer/Cache 机制图
- 十四、插件化与扩展架构图
- 十五、声明式 API 与 Reconcile 模式
- 十六、Leader Election 高可用模式
- 十七、核心设计模式汇总
- 十八、架构优势与设计原则
一、项目定位与业务职责
1.1 项目定位
Kubernetes(简称 K8s)是业界事实标准的容器编排平台,用于自动化部署、扩展和管理容器化应用。其核心价值在于:
- 声明式配置:用户描述"期望状态",系统自动驱动"实际状态"趋近期望
- 自愈能力:控制器持续 Reconcile,故障 Pod 自动重建、节点异常自动标记
- 水平扩展:基于指标自动伸缩应用副本数
- 服务发现与负载均衡:内置 DNS + Service + Endpoints 机制
- 滚动更新与回滚:Deployment 控制器管理应用版本的渐进式升级
1.2 业务职责矩阵
| 职责域 | 核心组件 | 关键能力 |
|---|---|---|
| 集群状态存储 | Etcd + API Server | 分布式一致性存储、RESTful CRUD、Watch 机制 |
| 工作负载编排 | Controller Manager + Kubelet | Deployment/StatefulSet/DaemonSet/Job 生命周期管理 |
| 调度决策 | Scheduler | 资源过滤、打分、亲和性、拓扑分布、抢占 |
| 网络代理 | kube-proxy + CNI | Service ClusterIP/NodePort/LoadBalancer、iptables/IPVS 规则 |
| 节点管理 | Kubelet | Pod 生命周期、容器运行时交互、卷挂载、健康探测 |
| 安全控制 | API Server Auth 模块 | 认证(Token/Cert/OAuth)、授权(RBAC/ABAC/Webhook)、准入控制 |
| 存储编排 | PV/PVC Controller + CSI | 动态供给、卷挂载/卸载、存储类管理 |
1.3 技术栈
- 编程语言:Go(全部核心组件均用 Go 实现)
- 持久化存储:Etcd v3(基于 Raft 的分布式 KV 存储,gRPC 协议)
- 容器运行时接口:CRI(Container Runtime Interface,支持 containerd、CRI-O 等)
- 网络接口:CNI(Container Network Interface,支持 Calico、Flannel、Cilium 等)
- 存储接口:CSI(Container Storage Interface,标准化存储插件协议)
- 通信协议:HTTP/REST(API Server 对外)、gRPC(Etcd 通信、CRI 通信)、Watch(长轮询/流式)
二、目录结构总览
基于源码实际目录的完整结构:
kubernetes/
├── api/ # OpenAPI / Swagger 规范定义
├── build/ # 构建系统
│ ├── build-image/ # 构建基础镜像
│ ├── server-image/ # 服务器镜像
│ └── pause/ # Pause 容器镜像(Pod 基础设施容器)
├── cluster/ # 集群部署与配置
│ ├── addons/ # 集群附加组件(DNS、Metrics、Storage)
│ ├── gce/ # GCP 平台特定配置
│ ├── kubemark/ # 虚拟集群框架(性能压测用)
│ └── skeleton/ # 集群骨架模板
├── cmd/ # ⭐ 命令行入口程序(核心组件可执行文件)
│ ├── kube-apiserver/ # API 服务器入口
│ ├── kube-controller-manager/ # 控制器管理器入口
│ ├── kube-scheduler/ # 调度器入口
│ ├── kubelet/ # 节点代理入口
│ ├── kube-proxy/ # 网络代理入口
│ ├── kubeadm/ # 集群引导工具入口
│ ├── kubectl/ # CLI 命令行工具入口
│ ├── kubectl-convert/ # kubectl 资源转换插件
│ ├── cloud-controller-manager/ # 云控制器管理器入口
│ └── kubemark/ # 性能压测代理入口
├── docs/ # 文档
├── hack/ # 构建/测试/发布脚本
├── logo/ # 项目 Logo
├── pkg/ # ⭐ 核心实现代码包
│ ├── apis/ # API 类型定义(含各子模块 admission/rbac/abac 等)
│ ├── controller/ # 控制器实现(~30+ 控制器)
│ ├── kubeapiserver/ # API Server 核心实现
│ ├── kubelet/ # Kubelet 核心实现(Pod 管理/容器运行时/卷管理等)
│ ├── scheduler/ # 调度器核心实现
│ ├── proxy/ # kube-proxy 实现(iptables/ipvs/userspace)
│ ├── volume/ # 存储卷管理(~30+ 卷插件)
│ ├── registry/ # REST Storage 注册表(各资源的 CRUD 实现)
│ ├── auth/ # 认证/授权实现
│ ├── client/ # 客户端库
│ ├── cloudprovider/ # 云平台集成接口
│ ├── controlplane/ # 控制平面辅助组件
│ ├── security/ # 安全上下文
│ ├── serviceaccount/ # ServiceAccount 管理
│ ├── features/ # Feature Gate 管理
│ └── util/ # 通用工具函数
├── plugin/ # 插件系统(admission 等)
├── staging/ # ⭐ 可独立版本化的组件(k8s.io 标准库)
│ └── src/k8s.io/
│ ├── apimachinery/ # API 机器库(meta/types/watch/codec)
│ ├── apiserver/ # 通用 API Server 框架
│ ├── client-go/ # 官方 Go 客户端库
│ ├── component-base/ # 组件基础库(metrics/healthz/cli)
│ ├── controller-manager/ # 控制器管理器共享代码
│ ├── kube-aggregator/ # API 聚合层
│ ├── apiextensions-apiserver/ # CRD API Server
│ ├── cri-api/ # 容器运行时接口定义
│ ├── metrics/ # 指标库
│ ├── code-generator/ # 代码生成器
│ ├── sample-controller/ # 示例控制器
│ └── ... (共 25+ 子仓库)
├── test/ # 测试代码(e2e/integration/benchmark)
├── third_party/ # 第三方依赖
└── vendor/ # Go 依赖库(dep/vendor 管理)
关键洞察:
cmd/是组件入口:每个 Kubernetes 组件都有独立的cmd/子目录,入口文件统一为app/server.go,使用 Cobra 命令行框架pkg/是核心实现:与cmd/一一对应,pkg/controller对应cmd/kube-controller-manager,pkg/kubelet对应cmd/kubeletstaging/是标准库:将可复用的库独立版本化,通过k8s.io/前缀导入,如k8s.io/client-go、k8s.io/apimachinerypkg/registry/是 REST 层:每个 Kubernetes 资源(Pod/Service/Deployment 等)在 registry 中都有对应的 Storage 实现,负责 CRUD + Watch
三、整体架构图
Kubernetes 采用经典的主从架构(Master-Worker),控制平面与数据平面分离,组件间通过 API Server 进行松耦合通信。
架构说明
- 控制平面(Control Plane):集群的大脑,负责全局决策(调度、资源分配、状态同步)。核心三大组件:API Server、Controller Manager、Scheduler
- 数据平面(Data Plane):工作节点承载实际业务负载,Kubelet 管理 Pod 生命周期,kube-proxy 管理网络规则
- 通信模式:所有组件只与 API Server 通信(通过 HTTP/REST + Watch),绝不直接互相调用,实现完全解耦
- Etcd:唯一的状态存储后端,API Server 是唯一与 Etcd 直接交互的组件
四、组件交互图
展示各组件之间的通信协议、数据流向和交互模式:
交互说明
| 通信路径 | 协议 | 方向 | 用途 |
|---|---|---|---|
| kubectl → API Server | HTTP/REST | 单向请求 | 资源 CRUD 操作 |
| API Server → Etcd | gRPC | 双向 | 持久化存储读写 |
| API Server → Controller Manager | Watch (HTTP Long Poll / WebSocket) | 服务器推送 | 资源变更通知 |
| Controller Manager → API Server | HTTP/REST | 请求-响应 | 状态更新、子资源创建 |
| API Server → Scheduler | Watch | 服务器推送 | 未调度 Pod 通知 |
| Scheduler → API Server | HTTP/REST | 请求-响应 | Pod 绑定(Bind) |
| API Server → Kubelet | Watch | 服务器推送 | 分配到本节点的 Pod 通知 |
| Kubelet → API Server | HTTP/REST | 请求-响应 | 状态上报、心跳 |
| Kubelet → CRI Runtime | gRPC | 双向 | 容器创建/停止/查询 |
| Kubelet → CNI | Exec + JSON | 单向调用 | Pod 网络配置 |
| kube-proxy → Kernel | Netlink/iptables | 系统调用 | 网络规则注入 |
关键原则:所有组件之间的交互必须经过 API Server,不存在组件间的直接调用。这种"中心化通信总线"设计使得:
- 任何组件故障不影响其他组件的通信
- API Server 成为唯一的安全策略执行点
- 组件可独立升级和替换
五、数据流图
以 Pod 创建为例,展示完整的端到端数据流:
数据流关键节点说明
- 认证→授权→准入:API Server 内部的三阶段安全处理链,任何请求都必须通过这三关
- Etcd 写入:是数据持久化的唯一路径,写入成功后才返回给用户
- Watch 传播:通过 Etcd Watch → API Server Watch → 组件 Watch 的三级 Watch 链路,变更事件高效推送到各组件
- 调度决策:Scheduler 是无状态的,通过 Watch 获取未调度 Pod,经过 Filter→Score→Bind 三阶段
- Kubelet 执行:严格按 CNI→CSI→CRI 顺序,先配网络、再挂卷、最后创建容器
- 状态闭环:Kubelet 持续上报状态,Controller Manager 持续 Reconcile,形成闭环
六、请求处理链路图
展示 API Server 内部处理一个 REST 请求的完整链路:
请求处理链说明
源码对应关系:
| 阶段 | 源码位置 | 核心逻辑 |
|---|---|---|
| Handler Chain | staging/src/k8s.io/apiserver/pkg/endpoints/filters/ |
请求预处理、限流 |
| Authentication | pkg/kubeapiserver/authenticator/ |
Token/Cert/Webhook 认证 |
| Authorization | pkg/auth/authorizer/ + pkg/auth/abac/rbac/ |
RBAC/ABAC/Webhook 授权 |
| Admission (Mutating) | staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/mutating/ |
修改请求对象 |
| Admission (Validating) | staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/validating/ |
校验请求合法性 |
| REST Storage | pkg/registry/core/pod/storage.go 等 |
资源 CRUD + Watch |
| Etcd Client | staging/src/k8s.io/apiserver/pkg/storage/etcd3/ |
gRPC 调用 Etcd |
准入控制的双阶段设计:
- Mutating 先执行:允许 Webhook 修改对象(如注入 Sidecar、设置默认值),修改后的对象进入 Validating
- Validating 后执行:在对象最终形态上做校验(如配额检查、安全策略),只读不修改
- 内置插件在 Webhook 之前/之后:部分内置 Admission Plugin 在 Webhook 之前运行(如 NamespaceLifecycle),确保基础约束先被检查
七、Etcd 存储架构图
Etcd 存储架构说明
Key 前缀设计(源码:pkg/registry/):
| 资源类型 | Key 前缀 | 示例 |
|---|---|---|
| Pod | /registry/pods/ |
/registry/pods/default/nginx-7f8b5 |
| Service | /registry/services/ |
/registry/services/default/nginx-svc |
| Deployment | /registry/deployments/ |
/registry/deployments/default/nginx-deploy |
| Node | /registry/nodes/ |
/registry/nodes/worker-1 |
| ConfigMap | /registry/configmaps/ |
/registry/configmaps/default/app-config |
| Secret | /registry/secrets/ |
/registry/secrets/default/db-password |
| PV | /registry/persistentvolumes/ |
/registry/persistentvolumes/pv-001 |
| RBAC Role | /registry/rbac/roles/ |
/registry/rbac/roles/default/admin |
| Lease | /registry/leases/ |
/registry/leases/kube-node-worker1 |
| CRD | /registry/apiextensions.k8s.io/ |
/registry/apiextensions.k8s.io/customresources |
核心机制:
- Revision 机制:Etcd 维护全局单调递增的 Revision,每次写操作 Revision+1,Watch 基于 Revision 实现增量推送
- Lease 机制:Kubelet 心跳、Leader Election 均基于 Lease,Lease 到期自动删除关联 Key
- Compaction:定期压缩历史 Revision,释放存储空间,但保留最近 N 个 Revision 供 Watch 回放
- Quorum 写入:写入需经多数成员(≥2/3)确认才算成功,保证强一致性
- Storage 接口抽象:API Server 通过
storage.Interface抽象层访问 Etcd,理论上可替换为其他后端(实际均用 Etcd)
八、认证授权链路图
认证授权源码结构
| 模块 | 源码位置 | 核心文件 |
|---|---|---|
| Authentication | pkg/kubeapiserver/authenticator/ |
config.go - 认证配置构建 |
| Token 认证 | staging/src/k8s.io/apiserver/pkg/authentication/request/bearertoken/ |
JWT Token 验证 |
| 证书认证 | staging/src/k8s.io/apiserver/pkg/authentication/request/x509/ |
CN/O 提取 |
| Webhook 认证 | staging/src/k8s.io/apiserver/pkg/authentication/request/webhook/ |
外部 TokenReview |
| RBAC 授权 | pkg/auth/authorizer/rbac/ |
Role/RoleBinding 匹配 |
| Node 授权 | pkg/auth/authorizer/node/ |
Kubelet 权限限制 |
| ABAC 授权 | pkg/auth/abac/ |
策略文件解析 |
| Admission 插件 | pkg/apis/admission/ + staging/src/k8s.io/apiserver/pkg/admission/ |
插件注册与链式调用 |
九、控制器协同图
Kubernetes 控制器管理器内运行 ~30+ 控制器,它们通过 Informer 共享缓存和 Watch 机制协同工作:
控制器协同关系详解
源码位置:pkg/controller/ 各子目录 + cmd/kube-controller-manager/app/controllers.go
关键协同链路:
-
Deployment → ReplicaSet → Pod 链:
- 用户创建 Deployment → Deployment Controller Watch 到事件 → 创建 ReplicaSet
- ReplicaSet Controller Watch 到新 ReplicaSet → 根据
.spec.replicas创建/删除 Pod - 这形成了一条级联创建链:Deployment → ReplicaSet → Pod
-
Service → EndpointSlice → kube-proxy 链:
- 用户创建 Service → EndpointSlice Controller Watch 到事件
- Controller 根据 Service Selector 匹配 Pod → 创建 EndpointSlice
- kube-proxy Watch EndpointSlice → 更新 iptables/IPVS 规则
-
PVC → PV → Volume 链:
- 用户创建 PVC → PV Controller Watch 到事件
- Controller 匹配可用 PV 或触发动态供给 → 绑定 PVC 与 PV
- Kubelet 的 Volume Manager 挂载卷到 Pod
-
控制器间的资源依赖:
- Namespace Controller 在删除 Namespace 时,通知 Garbage Collector 级联删除该 Namespace 下所有资源
- Node Lifecycle Controller 标记 NotReady 节点后,Pod GC Controller 清理该节点上的 Terminating Pod
SharedInformerFactory 设计:
- 所有控制器共享同一套 Informer,避免重复 Watch API Server
- 本地缓存(Cache)避免频繁 List 调用,降低 API Server 负载
- 事件处理器仅将 Key 入队,不做复杂逻辑,保证事件处理吞吐量
十、调度框架与流程图
10.1 调度框架架构
源码位置:pkg/scheduler/framework/
10.2 调度完整流程
调度框架源码对应
| 组件 | 源码位置 | 说明 |
|---|---|---|
| 调度器入口 | cmd/kube-scheduler/app/server.go |
Cobra 命令,创建调度器 |
| 调度核心 | pkg/scheduler/scheduler.go |
ScheduleOne 主循环 |
| 调度队列 | pkg/scheduler/internal/queue/ |
PriorityQueue,支持优先级和回退 |
| 调度缓存 | pkg/scheduler/internal/cache/ |
节点信息缓存,避免频繁 List |
| Framework 接口 | pkg/scheduler/framework/interface.go |
Plugin 扩展点定义 |
| Filter 插件 | pkg/scheduler/framework/plugins/noderesources/ |
资源充足性检查 |
| Score 插件 | pkg/scheduler/framework/plugins/noderesources/ |
资源均衡评分 |
| Bind 插件 | pkg/scheduler/framework/plugins/defaultbinder/ |
默认绑定实现 |
| 抢占插件 | pkg/scheduler/framework/plugins/defaultpreemption/ |
默认抢占实现 |
十一、Kubelet 节点架构图
源码位置:pkg/kubelet/ + cmd/kubelet/app/server.go
Kubelet 核心模块说明
| 模块 | 源码位置 | 职责 |
|---|---|---|
| Pod Workers | pkg/kubelet/pod_workers.go |
为每个 Pod 启动独立 goroutine 执行 SyncPod |
| CRI Runtime | pkg/kubelet/kuberuntime/ |
通过 CRI gRPC 接口操作容器运行时 |
| Volume Manager | pkg/kubelet/volumemanager/ |
期望/实际状态协调,驱动卷挂载/卸载 |
| PLEG | pkg/kubelet/pleg/ |
定期查询 CRI 获取容器状态变更,生成事件 |
| Prober | pkg/kubelet/prober/ |
执行 Liveness/Readiness/Startup 探针 |
| Eviction | pkg/kubelet/eviction/ |
节点资源不足时驱逐低优先级 Pod |
| Status Manager | pkg/kubelet/status/ |
聚合 Pod 状态并上报 API Server |
| Certificate Manager | pkg/kubelet/certificate/ |
自动申请和轮转 Kubelet 客户端证书 |
PLEG 机制详解:
PLEG(Pod Lifecycle Event Generator)是 Kubelet 的核心事件驱动机制。它通过定时(默认 1s)调用 CRI 的 ListPodSandbox 和 ListContainers 获取容器运行时状态,与本地缓存对比生成 Pod 生命周期事件(Started/Died/Changed),驱动 Pod Workers 执行同步操作。这种设计避免了为每个容器设置独立 Watch 的开销。
十二、网络模型与 Service 架构图
12.1 三层网络模型
12.2 kube-proxy 工作流程
源码位置:pkg/proxy/(iptables/ipvs/userspace 三种模式)
12.3 Service 请求路由详解
kube-proxy 源码结构
| 模式 | 源码位置 | 说明 |
|---|---|---|
| iptables | pkg/proxy/iptables/ |
基于 iptables 规则,默认模式 |
| IPVS | pkg/proxy/ipvs/ |
基于 IPVS 内核负载均衡,高性能 |
| userspace | pkg/proxy/userspace/ |
用户态代理,已废弃 |
| Endpoints 缓存 | pkg/proxy/endpointslicecache.go |
EndpointSlice → 内部 EndpointsMap |
| 规则同步 | pkg/proxy/service.go |
Service/Endpoint 变更触发规则重写 |
十三、Informer/Cache 机制图
Informer 是 Kubernetes 控制器编程的核心模式,所有控制器都基于 Informer 实现状态同步:
Informer 机制详解
源码位置:staging/src/k8s.io/client-go/informers/ + staging/src/k8s.io/client-go/tools/cache/
核心流程:
- ListAndWatch:Reflector 先 List 全量数据建立初始缓存,然后启动 Watch 流接收增量事件
- ResourceVersion:每次 Watch 携带上次收到的 ResourceVersion,API Server 只推送该版本之后的变更
- 本地缓存:所有通过 Informer 读取的数据来自本地内存,不直接调用 API Server
- 共享机制:SharedInformerFactory 确保同一资源的 Informer 只创建一个,多个控制器共享同一缓存
- Resync:可选的定期全量同步,将缓存中所有对象重新触发 OnUpdate 事件,确保没有遗漏
- WorkQueue:事件处理器将 Key(
namespace/name)入队而非整个对象,保证处理顺序和限流
十四、插件化与扩展架构图
Kubernetes 的核心设计理念之一是插件化,几乎所有功能模块都支持通过接口扩展:
插件接口源码映射
| 扩展点 | 接口定义 | 源码位置 | 扩展方式 |
|---|---|---|---|
| CRI | runtimeapi.RuntimeService |
staging/src/k8s.io/cri-api/ |
gRPC 插件 |
| CNI | CNI Plugin Interface |
外部规范 | 可执行二进制 |
| CSI | csi.*Server |
staging/src/k8s.io/csi-translation-lib/ |
gRPC 插件 |
| Scheduler Plugin | framework.Plugin |
pkg/scheduler/framework/interface.go |
Go 插件 |
| Admission Webhook | admission.Webhook |
staging/src/k8s.io/apiserver/pkg/admission/plugin/webhook/ |
HTTP Webhook |
| CRD | CustomResourceDefinition |
staging/src/k8s.io/apiextensions-apiserver/ |
YAML 声明 |
| Device Plugin | deviceplugin.Plugin |
staging/src/k8s.io/kubelet/pkg/apis/deviceplugin/ |
gRPC 插件 |
| Cloud Provider | cloudprovider.Interface |
pkg/cloudprovider/ + staging/src/k8s.io/cloud-provider/ |
Go 接口 |
十五、声明式 API 与 Reconcile 模式
15.1 声明式 API 核心原理
Kubernetes 最根本的设计是声明式 API:用户声明"我想要什么"(期望状态),系统负责驱动"实际是什么"(实际状态)趋近期望状态。
15.2 Reconcile 循环详解
15.3 以 Deployment 控制器为例
源码路径:
- Deployment Controller:
pkg/controller/deployment/deployment_controller.go - ReplicaSet Controller:
pkg/controller/replicaset/replica_set.go - 滚动更新逻辑:
pkg/controller/deployment/rolling.go
十六、Leader Election 高可用模式
Kubernetes 控制平面组件(Controller Manager、Scheduler)支持多副本部署,通过 Leader Election 确保同一时刻只有一个实例运行:
Leader Election 源码
| 组件 | 源码位置 | 机制 |
|---|---|---|
| Controller Manager | cmd/kube-controller-manager/app/controllermanager.go |
Lease-based Election |
| Scheduler | cmd/kube-scheduler/app/server.go |
Lease-based Election |
| 通用实现 | staging/src/k8s.io/client-go/tools/leaderelection/ |
LeaderElector 结构体 |
| Lease CRD | staging/src/k8s.io/api/coordination/v1/ |
Lease API 对象 |
选举参数:
| 参数 | 默认值 | 说明 |
|---|---|---|
| leaseDuration | 15s | Leader 租约有效期 |
| renewDeadline | 10s | Leader 续约超时时间 |
| retryPeriod | 2s | Follower 重试间隔 |
十七、核心设计模式汇总
17.1 设计模式全景图
17.2 关键模式详解
Level-driven vs Edge-driven
Kubernetes 采用 Level-driven(电平驱动)模式,而非 Edge-driven(边沿驱动):
- Edge-driven:只在状态变化时触发一次操作,如果操作失败,不会自动重试
- Level-driven:持续检查当前状态(Level),只要当前状态与期望不一致,就持续驱动变更
这通过 Informer 的 Resync 机制实现:即使没有新事件,定期 Resync 也会将所有对象重新入队,确保最终一致性。
Work Queue 三层保障
源码:staging/src/k8s.io/client-go/util/workqueue/
- 去重(Deduplication):同一 Key 多次入队只保留一个,避免重复处理
- 限流(RateLimiting):处理失败后指数退避重试,避免错误风暴
- 延迟入队(AddAfter):支持延迟重入队,实现退避策略
Storage 抽象层次
API Layer (REST Handler)
↓
Registry (资源路由 → Storage 映射)
↓
Strategy (创建/更新/删除策略)
↓
Codec (JSON/Protobuf 编解码)
↓
Storage Interface (Create/Get/List/Watch/Update/Delete)
↓
Etcd Store (gRPC 实现)
↓
Etcd Cluster (Raft 共识)
十八、架构优势与设计原则
18.1 架构优势
| 优势 | 实现方式 | 核心收益 |
|---|---|---|
| 声明式 API | Spec/Status 分离 + Reconcile Loop | 用户只需声明期望,系统自动达成 |
| 最终一致性 | Informer + WorkQueue + Resync | 网络分区恢复后自动修复状态 |
| 高度可扩展 | CRD + Webhook + Plugin Interface | 无需修改核心代码即可扩展功能 |
| 松耦合 | API Server 作为唯一通信总线 | 组件可独立升级/替换 |
| 自愈能力 | 控制器持续 Reconcile | Pod 故障自动重建、节点异常自动标记 |
| 高可用 | Leader Election + 多副本 | 控制平面组件故障自动切换 |
| 多租户 | Namespace + RBAC + ResourceQuota | 命名空间级隔离 + 权限控制 + 配额限制 |
18.2 核心设计原则
- Keep the core simple:核心只做编排调度,复杂功能通过扩展实现(CSI/CNI/CRI)
- API Server is the source of truth:所有状态必须通过 API Server,Etcd 是唯一持久化后端
- Controllers are level-driven:持续 Reconcile,不依赖单次事件触发
- No direct component-to-component communication:组件间不直接通信,避免耦合
- Fail-open, not fail-closed:系统优先保证可用性,允许短暂不一致
- Extensibility by default:所有功能模块预留扩展接口
- Immutable infrastructure:Pod 不被修改,只被替换(重建)
18.3 架构演进趋势
| 方向 | 当前状态 | 演进中 |
|---|---|---|
| API Server | 单体 API Server + 聚合层 | API 聚合 + CRD 分片 |
| 调度器 | 单调度器 + Framework 插件 | 多调度器 + Coscheduling |
| 网络 | kube-proxy iptables/IPVS | eBPF 替代 kube-proxy (Cilium) |
| 运行时 | Docker + containerd | containerd-only + Kata (安全容器) |
| 存储 | FlexVolume → CSI | CSI only + 快照/克隆 |
| 安全 | RBAC + PodSecurityPolicy | RBAC + PodSecurity Standards |
| 可观测性 | Metrics Server + cAdvisor | OpenTelemetry 集成 |
附录:源码快速参考
核心入口文件
| 组件 | 入口文件 | 核心实现目录 |
|---|---|---|
| kube-apiserver | cmd/kube-apiserver/app/server.go |
pkg/kubeapiserver/ + pkg/registry/ |
| kube-controller-manager | cmd/kube-controller-manager/app/controllermanager.go |
pkg/controller/ |
| kube-scheduler | cmd/kube-scheduler/app/server.go |
pkg/scheduler/ |
| kubelet | cmd/kubelet/app/server.go |
pkg/kubelet/ |
| kube-proxy | cmd/kube-proxy/app/server.go |
pkg/proxy/ |
| kubectl | cmd/kubectl/kubectl.go |
pkg/kubectl/ |
| cloud-controller-manager | cmd/cloud-controller-manager/main.go |
pkg/cloudprovider/ |
API 类型定义
| 资源组 | 源码位置 |
|---|---|
| Core (Pod/Service/Node) | pkg/apis/core/ |
| Apps (Deployment/StatefulSet/DaemonSet) | pkg/apis/apps/ |
| Batch (Job/CronJob) | pkg/apis/batch/ |
| Networking (Ingress/NetworkPolicy) | pkg/apis/networking/ |
| RBAC (Role/RoleBinding) | pkg/apis/rbac/ |
| Storage (PV/PVC/StorageClass) | pkg/apis/storage/ |
| Admission (Webhook配置) | pkg/apis/admissionregistration/ |
关键接口
| 接口 | 源码位置 | 用途 |
|---|---|---|
runtimeapi.RuntimeService |
staging/src/k8s.io/cri-api/ |
CRI 容器运行时接口 |
framework.Plugin |
pkg/scheduler/framework/interface.go |
调度框架插件接口 |
cloudprovider.Interface |
pkg/cloudprovider/ |
云平台接口 |
volume.VolumePlugin |
pkg/volume/plugins.go |
存储卷插件接口 |
admission.Validation/Mutation |
staging/src/k8s.io/apiserver/pkg/admission/ |
准入控制插件接口 |
store.Interface |
staging/src/k8s.io/apiserver/pkg/storage/ |
存储后端接口 |
更多推荐



所有评论(0)