Kubernetes(K8s)是容器编排的行业标准。本文重点剖析其架构和核心组件底层实现原理。

为什么 Kubernetes?

  • 声明式 API:定义期望状态,系统自动维护
  • 强一致性存储:etcd + Raft
  • 分布式调度与控制器模式
  • 插件化:CRI/CNI/CSI

整体架构

核心概念概览

在深入Kubernetes架构之前,我们需要理解几个核心概念:

概念定义作用
PodKubernetes中最小可部署单元包含一个或多个容器,共享网络和存储
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加密+客户端证书
SchedulerPod调度决策,资源最优分配• 两阶段调度
• 插件化架构
• 多维度评分
• 预调度/绑定
• 过滤阶段:Predicates硬约束
• 评分阶段:Priorities软约束
• 调度算法:LeastRequested/BalancedResourceAllocation
• 扩展:自定义调度器
Controller Manager运行控制器,维护期望状态• 控制循环模式
• 事件驱动
• Leader选举
• 多控制器并发
• 核心控制器:Deployment/StatefulSet/DaemonSet
• 云控制器:CloudProvider集成
• 节点控制器:Node状态监控/驱逐
• 命名空间控制器:资源清理

工作节点组件 (Worker Node)

组件核心职责关键特性实现细节
KubeletPod生命周期管理,节点代理• Pod状态同步
• 健康检查
• 资源监控
• CRI接口
• Pod管理:Static/Dynamic Pod
• 容器运行时:CRI gRPC接口
• 资源隔离:cgroup v1/v2
• 状态上报:Node/Pod Status
Kube-proxyService网络代理,负载均衡• 服务发现
• 负载均衡
• 网络规则管理
• 多模式支持
• 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 Runtime1. 提交Pod YAML
2. 调度决策
3. 节点拉取镜像
4. 启动容器
用户 → API Server → etcd → Scheduler → Kubelet
服务发现Service → Kube-proxy → Endpoints1. 创建Service
2. 标签选择器匹配Pod
3. 生成网络规则
4. 负载均衡转发
Service → Endpoints → Kube-proxy → iptables/IPVS
状态同步Controller Manager → API Server → Kubelet1. 控制器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 等
  • 处理流程
    1. Authentication(令牌、证书)
    2. Authorization(RBAC/ABAC)
    3. Admission Control(ValidatingWebhook、MutatingWebhook)
    4. 持久化到 etcd
    5. 事件广播(Watchers)
  • 高可用:多实例 + LoadBalancer,无状态
  • 聚合层:扩展自定义资源(CRD)

2. etcd

作用:集群唯一数据源,存储所有对象状态

底层

  • Raft 共识:Leader-Follower,日志复制确保强一致(CP)
  • Watch 机制:事件流通知(PUT/DELETE/MODIFY)
  • Compaction:定期压缩历史版本
  • 备份etcdctl snapshot save

3. Scheduler

服务:kube-scheduler
作用:将 Pod 绑定到合适节点

算法

  1. 过滤(Predicates):节点满足条件?

    过滤条件说明规则
    资源充足节点剩余可分配资源满足 Pod 请求的资源量节点 Allocatable CPU/Memory ≥ Pod requests/limits
    NodeSelector节点标签精确匹配 Pod 指定的节点选择器节点 labels 必须包含 Pod .spec.nodeSelector 中所有键值对
    Affinity/AntiAffinityPod 亲和/反亲和、节点亲和性规则- PodAffinity:与指定 Pod 同 zone/节点等
    - NodeAffinity:节点标签匹配偏好(软/硬要求)
    Taints/Tolerations节点污点与 Pod 容忍匹配节点 Taint(如 NoSchedule)必须有对应的 Toleration 才能调度
  2. 评分(Priorities):最佳节点

    • LeastRequested、BalancedResourceAllocation
  3. 绑定:原子 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 生命周期管理

流程

  1. Static Pod:从 manifest 目录
  2. 动态 Pod:从 API Server Watch
  3. 同步循环:每 10s 检查 Pod 状态
    • Pull Image(ImageManager)
    • Create Containers(CRI)
    • Probes:Liveness/Readiness/Startup(HTTP/TCP/Exec)
  4. Cgroup:资源隔离(CPUShares、MemoryLimit)
  5. 报告: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/controllerpkg/scheduler 等目录