K8s 架构简析

0 阅读5分钟

Cluster Architecture 集群架构

kubernetes.io/docs/concep…

整个集群架构分为Control Plane和Node Components两大部分。

Control Plane

控制面共有5个组件,4个核心组件+1个可选组件

kube-apiserver

Kube-apiserver 是Kubernetes control plane控制面的front end,对外暴露Kubernetes API;

kube-controller-manager

Kueb-controller-manager 是Kubernetes 的"通用大脑",处理所有云无关的核心逻辑;

cloud-controller-manaer

Cloud-ctrontroller-manger 是"云接口适配器",专门负责与云厂商 API 交互。两者通过职责分离实现云中立架构,使 Kubernetes 能在任意环境运行,同时无缝对接主流云平台;

etcd

Etcd K-V数据库,是分布式系统的"协调大脑",用强一致性保障关键元数据安全(如 Kubernetes 集群状态);

同是K-V数据库,对比Redis

一致性与可靠性

image.png

  • etcd:写入需经 Raft 多数派共识,保证所有节点数据严格一致(线性一致性)

→ 适合不能容忍数据不一致的场景(如分布式锁、集群元数据)

  • Redis:主节点写入即返回,异步复制到从节点

→ 可能存在短暂数据不一致,但延迟极低(微秒级)

数据模型对比

基础类型仅 key → byte[](二进制安全)String、Hash、List、Set、Sorted Set、Bitmap 等 redis.io
目录结构支持 / 分隔的层级键(如 /services/web/instances)无原生目录,需自行设计 key 命名
TTL✅ 支持(lease 机制)✅ 支持(EXPIRE 命令)
事务✅ 支持(Compare-And-Swap)✅ 支持(MULTI/EXEC)
Watch 机制✅ 原生可靠事件通知(基于 Raft 日志)www.lixueduan.com⚠️ 需 Pub/Sub(不保证可靠,可能丢消息)

💡 关键差异: etcd 的 Watch 机制 是其核心优势——客户端可订阅 key 变化,etcd 通过 Raft 日志顺序 保证事件不丢失、不重复

知乎

,而 Redis Pub/Sub 是"尽力而为"的发布订阅,不保证可靠性。

性能特性

指标etcdRedis
写入延迟毫秒级(需网络往返 + Raft 共识)微秒级(内存操作 + 异步持久化)
读取延迟毫秒级(线性一致性读需多数派确认)微秒级(直接内存访问)
吞吐量中等(~10k ops/s,3 节点集群)极高(~100k+ ops/s)
持久化默认开启(WAL + Snapshot)可选(RDB 快照 / AOF 日志)

⚠️ 实测对比:

  • Redis 读写速度相近(均 ~7μs)
  • itnext.io
  • etcd 写入较慢(需共识),但读取可优化(通过 quorum=false 启用本地读)
  • itnext.io

高可用架构

组件etcdRedis
集群模式原生 Raft 集群(3/5/7 节点)Sentinel(哨兵)或 Cluster(分片)
故障恢复自动选主(Raft Leader Election)Sentinel 手动/自动故障转移
脑裂处理Raft 天然防脑裂(需多数派)可能脑裂(需配置 min-slaves-to-write)
数据安全写入即持久化(WAL)可能丢失(取决于 AOF/RDB 配置)

Node Components

Node components run on every node, maintaining running pods and providing the Kubernetes runtime environment.

kubelet

kubelet 是 Kubernetes 节点(Node)上的核心代理(Agent),直接运行在每个工作节点上,负责:

将 PodSpec(Pod 定义)转化为实际运行的容器,并持续保障容器状态与期望状态一致 —— 它是 Kubernetes 控制平面与容器运行时之间的唯一桥梁,也是节点上唯一直接与容器打交道的组件。

image.png

1.Pod 生命周期管理创建/启动/停止/删除容器通过 CRI(Container Runtime Interface) 调用 containerd/docker
2. 状态同步持续上报 Node/Pod 状态到 API Server定期 NodeStatus 更新 + PodStatus 上报
3. 卷管理挂载/卸载存储卷(PV/PVC)调用 Volume Plugins(in-tree/out-of-tree CSI)
4. 网络配置为 Pod 配置网络(IP/路由)调用 CNI 插件(Calico/Flannel 等)
5. 健康检查执行 Liveness/Readiness/Startup ProbeHTTP/TCP/Exec 探针 + 重启策略
6. 资源管理保障 QoS(Guaranteed/Burstable/BestEffort)cgroups 限制 + OOM Killer 优先级

Container runtime

Container-runtime 是 Kubernetes 节点上负责“创建、运行、管理容器进程”的底层引擎,它是 kubelet 与操作系统之间的桥梁,将 PodSpec 转化为真实的容器进程。

image.png

镜像管理拉取/存储/删除容器镜像(ImageService)
容器生命周期创建/启动/停止/删除容器(RuntimeService)
资源隔离通过 cgroups + namespaces 实现进程隔离与资源限制

kube-proxy

kube-proxy 是 Kubernetes 节点上的网络代理,负责将 ClusterIP 类型的 Service 流量转发到后端 Pod,实现服务发现与负载均衡。

image.png

Addons

Addons(附加组件)是运行在 Kubernetes 集群内部、提供核心功能之外增强能力的 Pod/Service 组合。

它们不是 Kubernetes 核心组件(如 kube-apiserver/etcd),但对生产环境至关重要。

部署位置运行在集群内部(kube-system 或专用 namespace)
依赖关系依赖 Kubernetes API,但不参与集群控制平面
可选性理论上可不安装,但生产环境几乎必需
部署方式通过 Deployment/DaemonSet + Service + RBAC 部署
生命周期由 Kubernetes 自身管理(自托管)

常见 Addons 分类与示例

类别典型 Addons作用是否必需
集群 DNSCoreDNS / kube-dns为 Service/Pod 提供域名解析(*.svc.cluster.local)✅ 必需(无 DNS 服务发现失效)
网络插件Cilium / Calico / Flannel实现 Pod 网络通信(CNI)✅ 必需(无 CNI Pod 无法启动)
MetricsMetrics Server提供资源指标(kubectl top / HPA 依赖)⚠️ 推荐(HPA/监控必需)
Ingress ControllerNginx Ingress / Istio Gateway7 层 HTTP 路由(替代 NodePort/LoadBalancer)⚠️ 推荐(生产环境暴露服务必需)
DashboardKubernetes DashboardWeb UI 管理界面❌ 可选(运维便利性)
存储驱动CSI Drivers(AWS EBS / Azure Disk)挂载云存储卷⚠️ 按需(有状态应用必需)
监控Prometheus Operator / Grafana集群监控与告警⚠️ 推荐(生产环境必需)
服务网格Istio / Linkerd流量管理、安全、可观测性⚠️ 按需(微服务架构推荐)

💡 关键区分:

  • 核心组件:kube-apiserver/kube-controller-manager/kube-scheduler/etcd/kubelet —— 集群启动必需
  • Addons:CoreDNS/Cilium/Metrics Server —— 集群启动后部署,但生产环境必需