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

【注意:此文章为博主原创文章!转载需注意,请带原文链接,至少也要是txt格式!】
下面我详细讲解 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。
三、整体运行流程总结
-
你提交一个 YAML 配置(通过 API Server)。
-
etcd 保存“期望状态”。
-
Controller 发现集群实际状态不符 → 创建 Pod。
-
Scheduler 选择合适的 Node。
-
Kubelet 在 Node 上启动 Pod。
-
Pod 内的主容器和 Sidecar 一起运行。
-
整个过程由 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 的管理关系。下面是详细说明:
一、整体层级结构
从上到下依次是:
-
Deployment(部署定义)
-
用户编写的 YAML 文件描述应用的“期望状态”。
-
包括副本数量、镜像版本、更新策略等信息。
-
由控制器管理,确保系统始终符合定义。
-
-
ReplicaSet(副本集)
-
由 Deployment 自动创建和管理。
-
负责维持指定数量的 Pod 副本存在。
-
如果 Pod 崩溃或被删除,会自动重建新的 Pod。
-
-
Pod(运行单元)
-
Kubernetes 最小调度单元。
-
由 ReplicaSet 生成和维护。
-
每个 Pod 可包含一个或多个容器(Container)。
-
-
Sidecar(辅助容器)
-
属于 Pod 内部的辅助容器。
-
与主容器共享网络与存储,用于日志、代理、安全等扩展功能。
-
⚙️ 二、关系说明
| 层级 | 管理对象 | 作用说明 |
|---|---|---|
| Deployment | ReplicaSet | 定义应用的整体部署策略 |
| ReplicaSet | Pod | 确保固定数量的 Pod 存在 |
| Pod | Container & Sidecar | 运行应用逻辑与辅助功能 |
| Sidecar | 无(从属容器) | 辅助主容器完成日志、监控、流量控制等 |
三、运行逻辑示例
-
你提交一个 Deployment,期望运行 3 个副本。
-
Deployment 创建一个 ReplicaSet。
-
ReplicaSet 创建并维持 3 个 Pod。
-
每个 Pod 内运行主容器 + Sidecar 容器。
-
当其中一个 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 动态创建、销毁和管理。
三、管理与交互流程
-
Controller Manager 监控 Deployment 状态;
-
Deployment 定义目标副本数;
-
ReplicaSet 根据定义创建或删除 Pod;
-
Kubelet(在 Node 上)接收指令并启动 Pod;
-
Pod 内的 主容器与 Sidecar 一起运行,完成应用和辅助任务;
-
如果某个 Pod 出现故障,ReplicaSet 会自动在其他 Node 上重建。
四、总结
| 层级 | 运行位置 | 职责 |
|---|---|---|
| Control Plane | 主控节点 | 负责调度、监控、维持集群状态 |
| Node | 工作节点 | 运行实际应用容器 |
| Pod | Node 内 | 容纳应用容器与 Sidecar |
| Sidecar | Pod 内 | 提供辅助功能(监控、代理、安全) |
动画版结构图(流程图风格),展示从用户提交 YAML → 控制平面调度 → Pod 运行的全过程,更容易理解 Kubernetes 的动态管理原理。
这张图展示了 Kubernetes 从用户提交 YAML 到 Pod 启动运行的完整流程。下面为你详细讲解每一步。
一、总体流程概览
图中展示了三大部分:
-
YAML(用户定义层)
-
Control Plane(控制平面)
-
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)架构 的详细关系,下面为你分步骤解释:
一、总体架构概览
图中分为三大区域:
-
Control Plane(控制平面):集群的中枢神经系统。
-
Node(工作节点):实际运行 Pod 的地方。
-
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






布施恩德可便相知重
微信扫一扫打赏
支付宝扫一扫打赏