A-A+

图解k8s的原理 – Pod、Sidecar、Controller 与 K8s 的关系

2025年10月21日 14:29 学习笔记 暂无评论 共5681字 (阅读40 views次)

【注意:此文章为博主原创文章!转载需注意,请带原文链接,至少也要是txt格式!】

images

下面我详细讲解 Kubernetes(K8s)的原理,并解释 Pod、Sidecar、Controller 之间与 K8s 的关系。


一、Kubernetes 基本原理图解

上面的图片展示了 K8s 的架构原理。主要分为两个部分:

1. 控制平面(Control Plane)

这是 K8s 的“大脑”,负责整个集群的调度与管理。主要组件包括:

  • API Server:集群入口,所有操作都通过它进行(kubectl、dashboard 等)。

  • Scheduler:调度器,决定 Pod 运行在哪个节点(Node)上。

  • Controller Manager:控制器集合,负责保持系统的“期望状态”,比如:

    • Pod 崩溃了会自动拉起新 Pod。

    • 节点宕机后重新分配任务。

  • etcd:键值数据库,保存整个集群状态。

2. 工作节点(Node)

这是实际运行容器的地方。每个 Node 上有:

  • Kubelet:负责与控制平面通信,接收 Pod 指令并监督容器运行。

  • Kube Proxy:负责集群内的网络转发。

  • Pod:K8s 中最小的部署单元,一个 Pod 内可以包含多个容器(Container),它们共享网络与存储。


二、Pod、Sidecar、Controller 与 K8s 的关系

Pod 与 K8s 的关系

  • Pod 是 K8s 中最基本的可调度单元

  • 每个 Pod 通常包含一个主容器(运行主应用)和若干辅助容器。

  • Pod 由控制器创建与管理,运行在 Node 上。

举例:

你部署一个 Nginx Web 服务时,K8s 实际是创建一个 Pod,其中包含一个 Nginx 容器。


Sidecar 与 K8s 的关系

  • Sidecar 是 Pod 内的一种 辅助容器模式(Sidecar Pattern)

  • 它和主容器共享网络与存储,用来增强功能,而不改动主应用。

  • 常见用途:日志收集、代理转发、安全认证、服务网格(如 Istio envoy)。

举例:

主容器运行业务逻辑,Sidecar 容器收集日志或负责 TLS 加密。


Controller 与 K8s 的关系

  • Controller 是 控制平面中的“自动驾驶系统”

  • 它通过不断比对“期望状态(YAML 配置)”和“实际状态”,自动修正偏差。

  • 常见的控制器类型:

    • Deployment Controller:管理 Pod 副本数和滚动更新。

    • ReplicaSet Controller:确保固定数量的 Pod 存在。

    • Node Controller:检测节点健康状况。

举例:

你定义了 Deployment 运行 3 个副本,当有 Pod 崩溃时,Controller 会自动拉起新的 Pod。


三、整体运行流程总结

  1. 你提交一个 YAML 配置(通过 API Server)。

  2. etcd 保存“期望状态”。

  3. Controller 发现集群实际状态不符 → 创建 Pod。

  4. Scheduler 选择合适的 Node。

  5. Kubelet 在 Node 上启动 Pod。

  6. Pod 内的主容器和 Sidecar 一起运行。

  7. 整个过程由 Controller 不断监控与修复。


专门讲解 Pod、Sidecar、Controller 三者关系的标注图,更直观地看到它们在 K8s 中的层级结构与职责。

这张图展示了 Kubernetes 中 Pod、Sidecar、Controller 的关系,下面是详细说明:


一、Pod 与 Sidecar 的关系

在图中你可以看到:

  • Pod 是 Kubernetes 中的基本运行单元。

  • 每个 Pod 内可以包含多个容器(Container)。

  • Sidecar 就是 Pod 内的一个“辅助容器”(Auxiliary container),它与主容器共享网络与存储空间。

示例:

主容器运行应用服务,Sidecar 运行日志收集或流量代理任务。


⚙️ 二、Controller 的作用

  • Controller(如 Deployment Controller)是 K8s 的控制器之一,负责“管理 Pod 的状态”。

  • 它不断监测系统状态,确保运行中的 Pod 数量和状态与用户定义(YAML 中的期望状态)一致。

  • 如果 Pod 异常退出,Controller 会自动拉起新的 Pod。

示例:

你设定希望运行 3 个 Pod,当其中 1 个挂掉后,Controller 会自动创建一个新的 Pod。


三、三者的层级关系总结

概念 所属层级 职责
Controller 控制层(Control Plane) 管理、调度、维持 Pod 期望状态
Pod 工作负载层(Workload) 应用的最小部署单元
Sidecar Pod 内部(容器层) 辅助主容器运行,扩展功能

(包含 Deployment、ReplicaSet、Pod、Sidecar 的完整管理链)能更完整地展示 Controller 的层级控制逻辑。

这张图展示了 Kubernetes 中 Deployment、ReplicaSet、Pod、Sidecar 的管理关系。下面是详细说明:


一、整体层级结构

从上到下依次是:

  1. Deployment(部署定义)

    • 用户编写的 YAML 文件描述应用的“期望状态”。

    • 包括副本数量、镜像版本、更新策略等信息。

    • 由控制器管理,确保系统始终符合定义。

  2. ReplicaSet(副本集)

    • 由 Deployment 自动创建和管理。

    • 负责维持指定数量的 Pod 副本存在。

    • 如果 Pod 崩溃或被删除,会自动重建新的 Pod。

  3. Pod(运行单元)

    • Kubernetes 最小调度单元。

    • 由 ReplicaSet 生成和维护。

    • 每个 Pod 可包含一个或多个容器(Container)。

  4. Sidecar(辅助容器)

    • 属于 Pod 内部的辅助容器。

    • 与主容器共享网络与存储,用于日志、代理、安全等扩展功能。


⚙️ 二、关系说明

层级 管理对象 作用说明
Deployment ReplicaSet 定义应用的整体部署策略
ReplicaSet Pod 确保固定数量的 Pod 存在
Pod Container & Sidecar 运行应用逻辑与辅助功能
Sidecar 无(从属容器) 辅助主容器完成日志、监控、流量控制等

三、运行逻辑示例

  1. 你提交一个 Deployment,期望运行 3 个副本。

  2. Deployment 创建一个 ReplicaSet。

  3. ReplicaSet 创建并维持 3 个 Pod。

  4. 每个 Pod 内运行主容器 + Sidecar 容器。

  5. 当其中一个 Pod 异常终止时,ReplicaSet 会立即启动一个新 Pod 来补齐。


展示这些组件在 控制平面(Control Plane)与节点(Node) 中的分布关系,更直观地显示它们在集群中的“物理位置”。

这张图展示了 Kubernetes 控制平面(Control Plane)与工作节点(Node)中组件的分布与管理关系。下面是详细解析:


一、控制平面(Control Plane)

控制平面是整个 K8s 集群的“大脑”,负责管理和协调所有节点(Node)上的工作。图中展示的核心组件包括:

  • Controller Manager(控制器管理器)
    负责运行各种控制器,例如 Deployment Controller、Node Controller 等,用于维持集群的期望状态。

  • Deployment(部署定义)
    用户通过 YAML 文件定义的部署对象,描述副本数量、镜像版本和策略。

  • ReplicaSet(副本集)
    由 Deployment 管理,用来维持特定数量的 Pod 副本,确保高可用。

这些组件在 控制平面服务器上运行,不直接运行应用容器,而是通过调度和控制逻辑来管理工作节点。


二、工作节点(Node)

工作节点是真正运行应用的地方,包含:

  • Pod:运行在 Node 上的最小调度单元。
    每个 Pod 通常包含一个主容器和一个或多个 Sidecar 容器

  • Container(主容器):运行核心业务逻辑的容器。

  • Sidecar(辅助容器):运行辅助任务,例如日志收集、监控、代理等。

这些 Pod 由控制平面中的 ReplicaSet 动态创建、销毁和管理。


三、管理与交互流程

  1. Controller Manager 监控 Deployment 状态;

  2. Deployment 定义目标副本数;

  3. ReplicaSet 根据定义创建或删除 Pod;

  4. Kubelet(在 Node 上)接收指令并启动 Pod;

  5. Pod 内的 主容器与 Sidecar 一起运行,完成应用和辅助任务;

  6. 如果某个 Pod 出现故障,ReplicaSet 会自动在其他 Node 上重建。


四、总结

层级 运行位置 职责
Control Plane 主控节点 负责调度、监控、维持集群状态
Node 工作节点 运行实际应用容器
Pod Node 内 容纳应用容器与 Sidecar
Sidecar Pod 内 提供辅助功能(监控、代理、安全)

动画版结构图(流程图风格),展示从用户提交 YAML → 控制平面调度 → Pod 运行的全过程,更容易理解 Kubernetes 的动态管理原理。

这张图展示了 Kubernetes 从用户提交 YAML 到 Pod 启动运行的完整流程。下面为你详细讲解每一步。


一、总体流程概览

图中展示了三大部分:

  1. YAML(用户定义层)

  2. Control Plane(控制平面)

  3. Node(工作节点)

这三部分构成了 K8s 的全生命周期管理路径。


二、详细流程解析

① 用户提交 YAML

用户通过命令:

kubectl apply -f deployment.yaml

将 YAML 文件提交给 Kubernetes API Server,其中定义了应用的期望状态(如副本数、镜像、端口等)。


② API Server 接收与验证

  • API Server 是整个集群的“入口”。

  • 它验证 YAML 文件格式、权限(RBAC)等信息。

  • 验证通过后,API Server 将配置信息存入 etcd(集群状态数据库)。


③ Controller Manager 检测差异

  • Controller Manager 会周期性检查 etcd 中的“期望状态”和“实际状态”。

  • 若发现某个 Pod 未创建或状态不符,就会触发创建任务。

  • 它通知 Scheduler 安排 Pod 到具体的 Node。


④ Scheduler 调度节点

  • Scheduler 根据资源情况(CPU、内存、节点标签等),选择合适的 Node 来运行该 Pod。

  • 调度决策通过 API Server 通知对应 Node 的 Kubelet


⑤ Node 启动 Pod

  • Node 上的 Kubelet 收到调度任务后:

    • 拉取镜像(Image Pull)

    • 创建 Pod

    • 启动主容器与 Sidecar 容器

  • Pod 内的容器共享网络命名空间,可以通过 localhost 通信。


⑥ 运行与反馈

  • Kubelet 向 API Server 汇报 Pod 状态(Running、Failed、Succeeded 等)。

  • 如果 Pod 异常退出,Controller Manager 会重新创建新的 Pod,维持期望状态。


三、核心概念联系总结

层级 组件 作用
用户层 YAML 文件 定义“期望状态”
控制平面 API Server / Controller / Scheduler 接收、调度与监督
节点层 Kubelet / Pod / Sidecar 执行与运行实际应用

etcd、Kube Proxy、Service、Ingress 等也加入进去,展示一个完整的 Kubernetes 网络与服务发现架构 图会更接近生产环境架构视角。

这张图完整展示了 Kubernetes 网络与服务发现(Service Discovery)架构 的详细关系,下面为你分步骤解释:


一、总体架构概览

图中分为三大区域:

  1. Control Plane(控制平面):集群的中枢神经系统。

  2. Node(工作节点):实际运行 Pod 的地方。

  3. Service 与 Ingress(流量入口与服务抽象层):提供网络访问和服务发现。


二、各组件详解

1️⃣ Control Plane

控制平面负责管理整个集群的状态和调度逻辑:

  • API Server:集群入口,处理 kubectl 或其他组件的请求。

  • Scheduler:决定 Pod 运行在哪个 Node。

  • Controller Manager:检测系统实际状态与期望状态是否一致(如副本数),必要时触发修正操作。

  • etcd(未在图中单独画出):存储整个集群状态的键值数据库。

数据流
用户执行 kubectl apply -f deployment.yaml → YAML 通过 API Server 提交 → 存入 etcd → Controller 触发 → Scheduler 分配节点。


2️⃣ Node(工作节点)

节点上运行应用容器,并包含核心组件:

  • Kubelet:节点代理,负责与控制平面通信并执行 Pod 启动命令。

  • Kube Proxy:管理网络转发和负载均衡,保证 Service 到 Pod 的流量转发。

  • Pod:实际运行的业务单元,包括:

    • Main Container:主容器,运行主要业务逻辑;

    • Sidecar Container:辅助容器,用于日志、监控、代理、安全等功能。

工作逻辑
Scheduler 指派任务 → Kubelet 拉取镜像(Image Pull)→ 启动 Pod → Pod 中容器运行 → Kube Proxy 建立网络连接。


3️⃣ Service 与 Ingress

Kubernetes 提供多层服务访问机制:

  • Service:在集群内部提供统一访问入口(ClusterIP、NodePort、LoadBalancer)。它将请求转发到后端 Pod。

  • Ingress:暴露 HTTP/HTTPS 服务到集群外部。
    例如用户访问 https://app.example.com 时,Ingress 将请求路由到相应的 Service。

流量路径
用户请求 → Ingress Controller → Service → Kube Proxy → Pod(Main + Sidecar)。


三、整体请求流程总结

步骤 动作 涉及组件
用户提交 YAML 定义 kubectl → API Server
存储期望状态 API Server → etcd
发现差异并创建 Pod Controller Manager
选择运行节点 Scheduler
节点启动容器 Kubelet + Container Runtime
配置网络路由 Kube Proxy
外部请求接入服务 Ingress + Service
请求转发到业务容器 Pod(Main + Sidecar)

四、补充说明:Service Discovery 内部机制

K8s 内部通过 CoreDNS 实现服务发现:

  • 每个 Service 会在 DNS 中注册,如 my-service.default.svc.cluster.local

  • Pod 通过该域名自动解析到对应的 ClusterIP;

  • ClusterIP 再由 Kube Proxy 转发到后端 Pod。

 

以上数据来源,OPENAI GPT5 PLUS

布施恩德可便相知重

微信扫一扫打赏

支付宝扫一扫打赏

×

给我留言