Kubernetes 架构与底层实现详解
Kubernetes(K8s)是容器编排的行业标准。本文重点剖析其架构和核心组件底层实现原理。
为什么 Kubernetes?
- 声明式 API:定义期望状态,系统自动维护
- 强一致性存储:etcd + Raft
- 分布式调度与控制器模式
- 插件化:CRI/CNI/CSI
整体架构
核心概念概览
在深入Kubernetes架构之前,我们需要理解几个核心概念:
| 概念 | 定义 | 作用 |
|---|---|---|
| Pod | Kubernetes中最小可部署单元 | 包含一个或多个容器,共享网络和存储 |
| Service | 为Pod提供稳定网络访问的抽象 | 通过标签选择器动态发现后端Pod |
| Deployment | 声明式应用管理控制器 | 管理ReplicaSet,实现滚动更新和回滚 |
| Namespace | 逻辑隔离单元 | 将集群资源划分为多个虚拟集群 |
| Node | 集群中的工作节点 | 物理机或虚拟机,运行Pod |
| Cluster | 完整的Kubernetes环境 | 包含控制平面和多个工作节点 |
Pod详解:
- Pause容器:每个Pod都有一个根容器,负责共享网络命名空间
- 应用容器:实际运行业务逻辑的容器
- 共享资源:同一Pod内容器共享IP地址、端口、存储卷
- 生命周期:Pending → Running → Succeeded/Failed
- 调度单元:Kubernetes调度器以Pod为单位进行调度
控制器模式:
- 期望状态:用户通过YAML定义应用的期望状态
- 当前状态:系统持续监控实际运行状态
- 调谐循环:控制器不断比较两者差异并执行协调动作

控制平面组件 (Control Plane)
| 组件 | 核心职责 | 关键特性 | 实现细节 |
|---|---|---|---|
| API Server | 集群统一入口,认证/授权/准入 | • RESTful API • 声明式操作 • Watch机制 • 高可用无状态 | • 认证:Token/Certificate/OIDC • 授权:RBAC/ABAC/Node • 准入:ValidatingWebhook/MutatingWebhook • 版本化API:api/v1, apps/v1 |
| etcd | 分布式KV存储,集群唯一数据源 | • 强一致性(CP) • Raft共识算法 • 事务支持 • Watch事件通知 | • 数据模型:键值对+版本 • 压缩机制:历史版本清理 • 备份恢复:snapshot save/load • 安全:TLS加密+客户端证书 |
| Scheduler | Pod调度决策,资源最优分配 | • 两阶段调度 • 插件化架构 • 多维度评分 • 预调度/绑定 | • 过滤阶段:Predicates硬约束 • 评分阶段:Priorities软约束 • 调度算法:LeastRequested/BalancedResourceAllocation • 扩展:自定义调度器 |
| Controller Manager | 运行控制器,维护期望状态 | • 控制循环模式 • 事件驱动 • Leader选举 • 多控制器并发 | • 核心控制器:Deployment/StatefulSet/DaemonSet • 云控制器:CloudProvider集成 • 节点控制器:Node状态监控/驱逐 • 命名空间控制器:资源清理 |
工作节点组件 (Worker Node)
| 组件 | 核心职责 | 关键特性 | 实现细节 |
|---|---|---|---|
| Kubelet | Pod生命周期管理,节点代理 | • Pod状态同步 • 健康检查 • 资源监控 • CRI接口 | • Pod管理:Static/Dynamic Pod • 容器运行时:CRI gRPC接口 • 资源隔离:cgroup v1/v2 • 状态上报:Node/Pod Status |
| Kube-proxy | Service网络代理,负载均衡 | • 服务发现 • 负载均衡 • 网络规则管理 • 多模式支持 | • iptables模式:NAT/Filter规则 • IPVS模式:内核级LVS • eBPF模式:Cilium高性能 • Endpoints同步:Watch机制 |
| Container Runtime | 容器运行环境,镜像管理 | • OCI标准兼容 • 镜像分层 • 安全隔离 • 资源限制 | • containerd:CNCF标准 • CRI-O:轻量级运行时 • 镜像存储:overlay2/aufs • 安全:seccomp/AppArmor/SELinux |
核心工作流程
| 流程 | 涉及组件 | 关键步骤 | 数据流向 |
|---|---|---|---|
| Pod创建 | API Server → Scheduler → Kubelet → Container Runtime | 1. 提交Pod YAML 2. 调度决策 3. 节点拉取镜像 4. 启动容器 | 用户 → API Server → etcd → Scheduler → Kubelet |
| 服务发现 | Service → Kube-proxy → Endpoints | 1. 创建Service 2. 标签选择器匹配Pod 3. 生成网络规则 4. 负载均衡转发 | Service → Endpoints → Kube-proxy → iptables/IPVS |
| 状态同步 | Controller Manager → API Server → Kubelet | 1. 控制器Watch资源变化 2. 计算期望状态 3. 执行调谐动作 4. 更新实际状态 | etcd → Controller Manager → API Server → Kubelet |
Kubernetes 采用主从(Master-Worker)架构:Control Plane 管理全局状态,Worker Node 执行实际 workload。
核心概念与架构组件的关系:
- Pod生命周期:API Server接收Pod创建请求 → Scheduler调度到Node → Kubelet管理Pod运行
- 服务发现:Service通过标签选择器关联Pod → Kube-proxy实现网络代理 → 提供稳定访问入口
- 应用部署:Deployment控制器管理Pod副本数 → 通过RollingUpdate策略实现零停机更新
- 资源隔离:Namespace提供逻辑边界 → RBAC控制访问权限 → ResourceQuota限制资源使用
架构图如上所示。
控制平面组件深入
1. API Server
服务:kube-apiserver
核心作用:集群控制平面入口,所有 CRUD 操作经由此处
底层实现:
- RESTful API:支持 List/Watch/Patch 等
- 处理流程:
- Authentication(令牌、证书)
- Authorization(RBAC/ABAC)
- Admission Control(ValidatingWebhook、MutatingWebhook)
- 持久化到 etcd
- 事件广播(Watchers)
- 高可用:多实例 + LoadBalancer,无状态
- 聚合层:扩展自定义资源(CRD)
2. etcd
作用:集群唯一数据源,存储所有对象状态
底层:
- Raft 共识:Leader-Follower,日志复制确保强一致(CP)
- Watch 机制:事件流通知(PUT/DELETE/MODIFY)
- Compaction:定期压缩历史版本
- 备份:
etcdctl snapshot save
3. Scheduler
服务:kube-scheduler
作用:将 Pod 绑定到合适节点
算法:
过滤(Predicates):节点满足条件?
过滤条件 说明 规则 资源充足 节点剩余可分配资源满足 Pod 请求的资源量 节点 AllocatableCPU/Memory ≥ Podrequests/limitsNodeSelector 节点标签精确匹配 Pod 指定的节点选择器 节点 labels 必须包含 Pod .spec.nodeSelector中所有键值对Affinity/AntiAffinity Pod 亲和/反亲和、节点亲和性规则 - PodAffinity:与指定 Pod 同 zone/节点等
- NodeAffinity:节点标签匹配偏好(软/硬要求)Taints/Tolerations 节点污点与 Pod 容忍匹配 节点 Taint(如NoSchedule)必须有对应的Toleration才能调度评分(Priorities):最佳节点
- LeastRequested、BalancedResourceAllocation
绑定:原子 Update Pod .spec.nodeName
- 可扩展:Scheduler Framework(插件:Filter/Score/Bind)
4. Controller Manager
服务:kube-controller-manager
作用:多控制器维护期望状态。
调谐循环:
while true {
desired = GetDesiredState()
current = GetCurrentState()
if diff != 0 {
ActionToReconcile()
}
Sleep(ReconciliationInterval)
}- 核心控制器:ReplicationController、Deployment、NodeController(驱逐不健康节点)。
- Leader Election:Lease 锁。
节点组件深入
1. Kubelet
作用:Pod 生命周期管理
流程:
- Static Pod:从 manifest 目录
- 动态 Pod:从 API Server Watch
- 同步循环:每 10s 检查 Pod 状态
- Pull Image(ImageManager)
- Create Containers(CRI)
- Probes:Liveness/Readiness/Startup(HTTP/TCP/Exec)
- Cgroup:资源隔离(CPUShares、MemoryLimit)
- 报告:Node/Pod 状态上报
CRI (Container Runtime Interface):gRPC 接口,抽象 containerd/CRI-O
2. Kube-proxy
作用:Service 网络代理
模式:
- Userspace:代理模式(旧)
- iptables:规则链(默认)
- IPVS:内核 LVS(高性能)
- 实现:Watch Endpoints,动态更新规则
3. Container Runtime
- containerd:OCI 兼容,runc 执行
- 镜像管理:layers 分层缓存
核心资源对象与实现
Pod & Controller
Pod:Pause 容器 + App 容器,共享 Network/IPC
Deployment:RS + Strategy(RollingUpdate/Recreate)
StatefulSet:Headless Service + Ordinal Names
Service & Ingress
Service:ClusterIP + Endpoints(选择器匹配 Pod)
IPVS:virtual server + real server
Ingress:L7 路由,ANNOTATION 配置
ConfigMap/Secret
Mount 作为 Volume 或 Env
Secret:加密可选(EncryptionProvider)
网络模型底层
CNI:插件生命周期(ADD/DEL),配置 /etc/cni/net.d
- Flannel:VXLAN Overlay
- Calico:BGP / IPIP
- Cilium:eBPF 零拷贝
Service 发现:CoreDNS
存储底层
CSI:gRPC VolumePlugin
Dynamic Provisioning:StorageClass -> Provisioner
RBAC 实现
Subject -> Role/ClusterRole -> Resource/Verb
Admission:SubjectAccessReview
使用 kubeadm 快速安装(参考)
# 初始化 Master
kubeadm init --pod-network-cidr=192.168.0.0/16 --control-plane-endpoint=MASTER_IP
# 安装 CNI
kubectl apply -f calico.yaml
# Worker Join
kubeadm join ...高级特性
- Custom Resource Definitions (CRD):Operator 模式
- Horizontal Pod Autoscaler (HPA):Metrics Server
- Gateway API:下一代 Ingress
故障诊断
kubectl get events --sort-by=.metadata.creationTimestamp- CRI 日志:
crictl logs - etcd:
etcdctl endpoint health
Kubernetes 的强大源于其分布式系统设计:一致性存储 + 事件驱动 + 控制器模式 + 插件生态
掌握源码(Go),深入 pkg/controller、pkg/scheduler 等目录


