Kubernetes 核心组件
官方文档:Kubernetes 组件
Kubernetes 核心组件功能介绍
- 控制平面组件(Control Plane)
- 节点组件(Node Components)
- 网络组件(CNI / DNS)
- 扩展组件(附常见)
主要职责
- 对外接口:提供统一的API访问入口(API Server)。
- 管理集群状态:接收用户操作(通过API Server),监控集群变化,确保实际状态符合期望状态(Controller Manager)。
- 资源调度:将 Pod(工作负载)智能地分配到合适的 Worker Node 上(Scheduler)。
- 数据存储:存储所有集群配置和状态数据(etcd)。
👉 整个 Kubernetes 的中心,中枢神经,所有组件交互都经过它。
功能
- 所有 kubectl / API 调用的入口
- 认证、鉴权、审计
- 所有对象的 读写、校验
- 数据存入 etcd
- Watch 机制:给控制器 & kubelet 等提供资源变更事件
特点
- 只有它可直接访问 etcd
- 无状态,可横向扩容(HA 模式)
- 提供 REST API
👉 运行所有控制循环(Control Loop),确保实际状态 -> 期望状态
包含的控制器(部分)
- Node Controller:节点上下线检测
- Deployment Controller:扩缩容、副本管理
- ReplicaSet Controller
- Job Controller
- EndpointSlice Controller
- Service Account Controller
- PVC / PV 绑定控制器
- Namespace 控制器
总结一句话
➡️ k8s 中所有 “自动修复 / 自动创建 / 自动更新” 的逻辑都来自它。
👉 负责 Pod 的调度决策(Pod 分配到哪个节点上)
核心能力
- 过滤(Filter):先筛掉不符合条件的节点(资源不足、污点不匹配等)
- 打分(Score):给剩余节点评分(利用率、拓扑、亲和性)
- 绑定(Bind):把 Pod 绑定到节点
特性
- 支持自定义调度策略、调度框架(plugins)
- 支持多调度器
👉 存储 Kubernetes 所有状态(配置、节点、Pod、Service)。
特点:
- 强一致性、分布式数据库(Raft 协议)
- 需要三节点或五节点集群保证可靠性
- 所有 control-plane 组件依赖它
👉 每个 node 的核心代理,负责 Pod 生命周期。
功能
- 接收来自 scheduler 分配的 Pod
- 通过容器运行时(containerd/cri-o)启动容器
- 健康检查(liveness / readiness / startup)
- 日志 & 指标上报
- 节点状态上报给 API server
特点
- 仅 管理被 API 分配到该节点的 Pod
- 能执行 CRI(容器运行时接口)
👉 负责 Service 负载均衡实现(clusterIP / nodePort)
模式
| 模式 | 描述 | 优点 | 缺点 |
|---|---|---|---|
| iptables | 利用 NAT 表实现转发 | 性能稳定 | 规则多时变慢 |
| IPVS | Linux IP Virtual Server | 性能更高 | 需要内核模块 |
功能
- 维护 Service -> EndpointSlice 的转发表
- 负责 nodePort 实现
- 提供 round-robin、最少连接等策略(IPVS 模式)
⚠️ 若启用 Calico eBPF -> 部分 iptables/Service 转发由 eBPF 接管,可关闭 kube-proxy。
管理容器生命周期 (创建、启动、停止、销毁) 和提供隔离环境 (资源、网络、文件系统) 的核心软件组件,是容器技术的基础引擎,常见如 Docker、containerd、CRI-O。它负责将镜像运行为实际的隔离进程。
容器运行时的主要功能
- 生命周期管理: 创建、启动、停止、删除容器实例。
- 资源隔离与管理: 利用操作系统内核特性 (如 namespace, cgroups) 实现 CPU、内存、磁盘等资源的限制和隔离。
- 文件系统管理: 将容器镜像挂载为容器的文件系统。
- 安全与隔离: 确保容器间、容器与宿主机间的安全隔离。
常见容器运行时类型
- 高级运行时 (High-Level): 管理整个生命周期和镜像,如 containerd、Docker Engine。
- 低级运行时 (Low-Level): 只负责启动和运行 OCI (Open Container Initiative) 标准的容器进程,如 runc。
- Kubernetes CRI: Kubernetes 定义的接口 (Container Runtime Interface),允许 K8s 使用不同的高级运行时(如 containerd, CRI-O)。
K8S 1.33 仅支持:
- containerd
- CRI-O
Docker 已长期不支持。
👉 Kubernetes 中的 DNS 服务,解析 Service 和 Pod 名称。
功能
- Service DNS -> ClusterIP
- Pod FQDN 解析
- 外部域名转发(forwarders)
- 可扩展插件(rewrite、cache、hosts 等)
特性
- 高可用(Deployment + autoscaler)
- 替代老旧的 kube-dns
👉 提供 Pod 网络、网络策略、安全、路由、BGP、eBPF 等能力。
常见模式
| 模式 | 技术 | 优点 | 缺点 |
|---|---|---|---|
| eBPF(推荐) | 完全取代 kube-proxy | 高性能 | 要求内核≥ 5.3 |
| IPIP | 简单易用 | 封包开销大 | |
| VXLAN | overlay 网络 | 较通用 | 效率略低 |
| BGP | 节点直连 | 性能最佳 | 配置复杂 |
功能
- CNI(分配 Pod IP)
- NetworkPolicy(允许/拒绝流量)
- Pod 路由(Linux 内核路由表)
- 也可提供服务负载均衡(eBPF)
🔹 kube-controller-manager 相关扩展
- cloud-controller-manager(云厂商)
- ingress-controller(Nginx、Traefik)
- metrics-server(HPA 依赖)
- cluster-autoscaler(自动扩容节点)
🔹 kubelet 相关扩展
- Device Plugin(GPU / FPGA)
- CSI 插件(存储)
🔹 网络相关
- Cilium(eBPF CNI)
- kube-router(BGP CNI)
| 组件 | 职责 |
|---|---|
| kube-apiserver | 整个系统的入口 & 状态变更中心 |
| etcd | 保存所有状态 |
| kube-controller-manager | “确保状态达成”的自动化大脑 |
| kube-scheduler | 决定 Pod 运行在哪 |
| kubelet | 管理节点上的 Pod |
| kube-proxy | Service 转发(或被 eBPF 替代) |
| CoreDNS | DNS 解析 |
| Calico | Pod 网络/路由/NetworkPolicy、eBPF 网络 |