Kubernetes

K8s 组件详解

·18 分钟阅读·7129 字

Kubernetes 集群所有核心组件的深度解析,涵盖控制平面、工作节点、插件及架构灵活性

📋 目录

☸️ K8s 组件详解

关于本文档

Kubernetes 集群由控制平面(Control Plane)工作节点(Worker Node) 两大部分组成。本文档深度解析每个组件的职责、工作原理及面试考点。

本文档是 K8s 核心概念 的组件深化篇。

#k8s #kubernetes #architecture #components #reference


📋 组件全景图

flowchart TB
    subgraph CP["☸️ 控制平面(Control Plane)"]
        AP["kube-apiserver<br/>📡 API 入口"]
        ET["etcd<br/>💾 键值存储"]
        SC["kube-scheduler<br/>🎯 Pod 调度器"]
        CM["kube-controller-manager<br/>🔄 控制器管理器"]
        CCM["cloud-controller-manager<br/>☁️ 云控制器(可选)"]
    end

    subgraph WN["🖥️ 工作节点(Worker Node)"]
        KL["kubelet<br/>👷 节点代理"]
        KP["kube-proxy<br/>🌐 网络代理"]
        CR["容器运行时<br/>🐳 containerd / CRI-O"]
    end

    subgraph AD["🔌 插件(Addons)"]
        DNS["CoreDNS<br/>📖 集群 DNS"]
        DASH["Dashboard<br/>🖥️ Web 界面"]
        MON["监控<br/>📊 资源监控"]
        LOG["日志<br/>📝 集群日志"]
    end

    CP --> WN
    WN --> AD

    style CP fill:#E3F2FD,color:#000
    style WN fill:#FFF3E0,color:#000
    style AD fill:#E8F5E9,color:#000

📖 :控制平面组件 🧠

控制平面是集群的”大脑”,管理集群的全局状态和运行逻辑。

控制平面的核心职责

  • 提供 API 接口(kube-apiserver)
  • 存储集群状态(etcd)
  • 调度工作负载(kube-scheduler)
  • 运行控制器逻辑(kube-controller-manager)

1.1 kube-apiserver — 集群的”大门”

角色:Kubernetes HTTP API 的核心实现组件,所有组件通信的唯一入口。

flowchart LR
    subgraph "kube-apiserver 通信模式"
        A[kubectl] --> API
        B[Pod] --> API
        C[其他组件] --> API
        API --> ETCD[etcd]
    end

    style API fill:#1976D2,color:#fff
    style ETCD fill:#F57C00,color:#fff
特性说明面试价值
RESTful API所有操作通过 HTTP API 完成⭐⭐⭐
认证(Authentication)验证请求者身份(证书/Token/用户名密码)⭐⭐⭐⭐
授权(Authorization)判断请求者是否有权限操作(RBAC/ABAC)⭐⭐⭐⭐
准入控制(Admission Control)请求持久化前的拦截和修改⭐⭐⭐⭐⭐
聚合(Aggregation)支持扩展 API Server⭐⭐⭐

面试高频题

Q: API Server 是无状态还是有状态的?

A: 无状态(Stateless)。API Server 自身不持久化数据,所有数据存储在 etcd 中。这意味着 API Server 可以水平扩展。

Q: API Server 的处理流程是怎样的?

A: 认证 → 授权 → 准入控制(Mutating → Validating)→ 存储到 etcd → 返回响应

1.2 etcd — 集群的”数据库”

角色:具备一致性和高可用性的分布式键值存储,存储所有集群数据。

特性说明
存储引擎分布式键值存储(非关系型)
一致性协议Raft 共识算法
数据格式仅 API Server 可直接读写
备份机制快照备份(etcdctl snapshot save

生产环境注意事项

  • 奇数节点(3/5/7)保证 Raft 多数派
  • 定期备份 etcd 快照
  • 分离部署:生产环境建议 etcd 与 API Server 分离部署
  • 性能:etcd 对磁盘 IO 敏感,推荐 SSD

1.3 kube-scheduler — 集群的”调度官”

角色:监听未绑定节点的 Pod,将其分配到最合适的节点。

flowchart LR
    A[待调度 Pod] --> B[Predicates<br/>预选:筛选满足条件的节点]
    B --> C[Priorities<br/>优选:对节点打分排序]
    C --> D[Binding<br/>绑定:将 Pod 绑定到最优节点]
调度策略说明面试价值
NodeSelector基于 Label 的简单调度⭐⭐
NodeAffinity节点亲和性(硬/软约束)⭐⭐⭐
PodAffinity / AntiAffinityPod 亲和/反亲和⭐⭐⭐⭐
Taints & Tolerations污点与容忍度⭐⭐⭐⭐
资源请求与限制CPU/内存资源调度⭐⭐⭐

面试题:调度器如何保证公平性? 通过调度队列(Scheduling Queue)管理待调度 Pod,支持优先级抢占(Priority & Preemption)。

1.4 kube-controller-manager — 集群的”监管者”

角色:运行控制器进程,确保集群的当前状态不断趋近于期望状态

控制器的核心逻辑 控制器通过 API Server 监控集群的公共状态,并致力于将当前状态转变为期望的状态。

核心控制器列表:

控制器职责管理资源
Node Controller节点状态监控与驱逐Node
Replication Controller维持 Pod 的期望副本数Pod
Deployment Controller管理 Deployment 的滚动更新Deployment
StatefulSet Controller管理有状态应用的顺序启动StatefulSet
DaemonSet Controller确保每个节点运行一个 PodDaemonSet
Job Controller管理一次性/定时任务Job / CronJob
EndpointSlice Controller维护 Service 与 Pod 的映射EndpointSlice
Namespace Controller管理 Namespace 的生命周期Namespace
ServiceAccount Controller管理默认 ServiceAccountServiceAccount

1.5 cloud-controller-manager — 云驱动集成(可选)

角色:与底层云平台(AWS、GCP、Azure 等)集成,管理云资源。

控制器职责
Node Controller云 VM 健康检查与节点删除
Route Controller云网络路由配置
Service Controller云负载均衡器创建与维护

自建机房或裸金属部署通常不需要 cloud-controller-manager。


⚡ :工作节点组件 🖥️

2.1 kubelet — 节点的”守护者”

角色:每个节点上运行的主要代理进程,确保 Pod 中的容器正常运行。

flowchart TD
    A[API Server] -->|监控 Pod 变更| B(kubelet)
    B -->|创建/删除| C[容器运行时]
    C --> D[容器]
    B -->|上报状态| A
    B -->|健康检查| E[Readiness<br/>Liveness<br/>Startup]
功能说明
Pod 管理通过 API Server 监听 Pod 变更,确保容器按规范运行
健康检查执行 Readiness、Liveness、Startup 探针
资源监控采集节点和容器的资源使用情况
Volume 管理挂载和卸载存储卷
上报状态定期向 API Server 上报节点和 Pod 状态

2.2 kube-proxy — 网络的”交通警”(可选)

角色:维护节点上的网络规则,实现 Service 的网络代理和负载均衡。

代理模式实现方式性能复杂度
iptablesLinux iptables 规则中等
IPVSLinux IP Virtual Server
userspace用户态代理(已弃用)
kernelspaceWindows 内核态(仅 Windows)

推荐 生产环境推荐 IPVS 模式,性能优于 iptables,支持更丰富的负载均衡算法。

2.3 容器运行时 — 容器的”发动机”

角色:负责运行容器的软件。Kubernetes 通过 CRI(Container Runtime Interface) 与容器运行时交互。

flowchart LR
    A[kubelet] -->|CRI 接口| B{"容器运行时"}
    B --> C[containerd<br/>⭐ 推荐]
    B --> D[CRI-O]
    B --> E[Docker + cri-dockerd]
运行时特点适用场景
containerd轻量、稳定、K8s 默认✅ 生产环境首选
CRI-O专为 K8s 设计、极简⭐ 替代方案
Docker + cri-dockerd兼容 Docker 生态⚠️ 迁移过渡期

面试题:K8s 1.24 之后为什么移除了 dockershim? Dockershim 是 kubelet 中用于支持 Docker 的适配层。移除后,Docker 不再作为 K8s 的内置容器引擎。这是推动社区向 CRI 标准靠拢、减轻维护负担的举措。用户可通过安装 cri-dockerd 适配器继续使用 Docker。


🔧 :插件(Addons)🔌

插件扩展 Kubernetes 集群的功能。大多数插件是集群范围内的资源。

3.1 DNS(CoreDNS)

角色:集群范围内的 DNS 解析服务,为 Service 和 Pod 提供域名解析。

每个 Service 自动获得一个 DNS 记录:<service>.<namespace>.svc.cluster.local

3.2 Dashboard

角色:基于 Web 的 Kubernetes 集群管理界面。

3.3 容器资源监控

角色:在集群范围内收集和存储容器指标。

工具用途
Metrics Server基础资源指标(CPU/内存)
Prometheus多维指标采集与告警
Grafana指标可视化仪表盘

3.4 集群层面日志

角色:将容器日志收集到中央存储,支持检索和告警。

方案采集方式
EFK/ELKFluentd/Filebeat → Elasticsearch → Kibana
LokiPromtail → Loki → Grafana
PLGPromtail → Loki → Grafana(轻量)

⚙️ :架构灵活性 🧩

Kubernetes 允许灵活地部署和管理组件,适应从小型开发环境到大规模生产部署的各种需求。

4.1 组件部署模式

模式说明适用场景
Static Pod通过 kubelet 直接管理控制平面组件kubeadm 默认方式
系统服务通过 systemd 等系统服务管理器运行部分发行版(如 K3s)
二进制/容器直接运行二进制文件或容器自定义部署

4.2 etcd 部署架构

类型说明优点缺点
Stacked(堆叠)etcd 与控制平面同节点简单、少用机器控制平面故障节点同时丢失 etcd
External(外部)etcd 部署在独立节点高可用性强增加机器成本和网络延迟

生产建议 对于生产环境 HA 集群,推荐使用 External etcd 或奇数节点(3/5/7)的 Stacked 模式。

4.3 组件通信流程

sequenceDiagram
    participant U as kubectl/用户
    participant AP as kube-apiserver
    participant ET as etcd
    participant SC as kube-scheduler
    participant CM as controller-manager
    participant KL as kubelet

    U->>AP: kubectl apply -f deployment.yaml
    AP->>ET: 存储资源声明
    AP-->>CM: 控制器检测到变更
    CM->>AP: 创建 Pod 对象
    AP->>ET: 存储 Pod 状态
    AP-->>SC: 调度器检测到未调度的 Pod
    SC->>AP: 绑定 Pod 到节点
    AP->>ET: 存储绑定结果
    AP-->>KL: kubelet 监听到新 Pod
    KL->>CR: 调用容器运行时创建容器
    KL->>AP: 上报 Pod 运行状态

📊 面试速记

核心要点

组件一句话总结核心考点
API Server集群的唯一入口认证→授权→准入控制流程
etcd集群的数据库Raft 共识、奇数节点、快照备份
Scheduler把 Pod 分配到最佳节点预选→优选→绑定、亲和性策略
Controller Manager确保当前状态=期望状态控制器模式、Informer 机制
kubelet节点上的 Pod 管家Pod 生命周期管理、健康检查
kube-proxy网络规则守护者iptables vs IPVS 模式

面试脑图

mindmap
  root((K8s 组件))
    控制平面
      API Server
        认证/授权
        准入控制
        水平扩展
      etcd
        Raft 协议
        快照备份
        奇数节点
      Scheduler
        预选 Predicates
        优选 Priorities
        亲和性调度
      Controller
        Deployment
        StatefulSet
        DaemonSet
        Job/CronJob
    工作节点
      kubelet
        Pod 管理
        健康检查
        资源上报
      kube-proxy
        iptables
        IPVS
      Container Runtime
        containerd
        CRI-O
    插件
      CoreDNS
      Dashboard
      Metrics Server
      Prometheus/Grafana

关联文档

  • K8s 核心概念 — 概念速查手册
  • ../service/K8s Service 核心原理 — Service 底层原理与流量转发
  • ../network/kube-proxy 流量转发与代理模式详解 — kube-proxy 三种代理模式
  • ../../network/technology/eBPF 技术详解 — eBPF:下一代 kube-proxy 模式底层技术
  • ../../network/tools/firewalld 与 iptables 对比 — iptables 规则对比(kube-proxy iptables 模式涉及)
  • ../../network/technology/Calico CNI 网络插件详解 — CNI 网络插件实现
  • ../../container/容器技术 — 容器运行时(containerd / CRI-O)
  • ../../monitoring/监控与可观测性 — 集群监控体系
  • 使用 kubeadm 创建集群 — 动手搭建集群