【K8s思维导图及单节点容器启动流程】

K8s思维导图

K8s 单节点容器启动全流程

核心前提

K8s 集群中每个节点都需部署容器运行时相关组件,可通过 Ansible 实现所有节点的标准化批量安装配置,避免手动操作不一致。

容器启动核心流程(分层拆解)

整个流程遵循"上层编排→标准化接口→底层执行→内核支撑"的设计,核心链路分两条(根据容器运行时不同):

  • 链路1(CRI-O 运行时):Kubelet → CRI → CRI-O → runc → Linux 内核
  • 链路2(Containerd 运行时):Kubelet → CRI → Containerd → containerd-shim → runc → Linux 内核
组件层级 组件名称 核心角色与作用
节点核心代理 Kubelet(节点代理) 1. 节点"大管家",每个节点必部署,接收控制平面(API Server)的 Pod 调度指令; 2. 不直接操作容器,通过 CRI(容器运行时接口) 调用底层运行时; 3. 额外职责:监控 Pod/容器健康状态、上报节点资源、执行探针检查。
标准化接口层 CRI(Container Runtime Interface) 1. 本质:K8s 定义的接口规范 (非具体软件); 2. 核心作用:解耦 Kubelet 与容器运行时,只要运行时实现 CRI,即可与 Kubelet 无缝对接(支持 CRI-O、containerd 等)。
容器运行时层 CRI-O/Containerd 1. 本质:符合 CRI 标准的具体容器运行时软件 (CRI-O 专为 K8s 设计,Containerd 更通用); 2. 核心职责: - 调用 /container/image 库拉取/管理容器镜像; - 调用 /container/storage 库管理容器存储卷和文件系统; - 协调容器生命周期(创建/停止/删除),最终调用 runc 执行实际操作; 3. Containerd 额外通过 containerd-shim 守护进程管理容器,避免主进程挂掉导致容器退出。
容器执行层 runc 1. 本质:符合 OCI(开放容器倡议) 标准的轻量级工具,无常驻守护进程; 2. 核心角色:"最终执行者",直接对接 Linux 内核; 3. 工作逻辑:读取镜像/配置,向内核发起系统调用,利用 Namespaces(资源隔离)和 cgroups(资源限制)创建容器进程。
底层支撑层 Linux 内核 1. 核心能力:通过 Namespaces 实现容器的 PID/网络/挂载/用户等隔离;通过 cgroups 限制容器 CPU/内存/IO 等资源; 2. 最终结果:创建隔离的容器进程,提供独立运行环境。
镜像/容器实体 Container Image/Container 1. 容器镜像:只读模板,包含应用运行所需的所有文件、依赖、配置; 2. 容器:镜像的运行实例,拥有独立文件系统、网络、进程空间。
流程简化理解(通俗版)
  1. 控制平面告诉节点的 Kubelet:"启动这个 Pod";
  2. Kubelet 按 CRI 标准喊:"CRI-O/Containerd,帮我起容器";
  3. CRI-O/Containerd 先把镜像从仓库拉下来,准备好存储环境,然后喊:"runc,你来实际创建容器";
  4. runc 向 Linux 内核申请:"给这个进程开隔离空间、设资源限制";
  5. 内核完成隔离和限制,容器进程正式启动。
关键设计特点
  1. 解耦化:CRI 解耦 Kubelet 与运行时,OCI 解耦 runc 与镜像/运行时,底层内核能力解耦 runc 与操作系统(只要内核支持 Namespaces/cgroups 即可);
  2. 轻量化:runc 无守护进程,仅负责容器创建,资源占用极低;
  3. 标准化:全流程遵循 CRI/OCI 标准,兼容不同运行时和镜像格式;
  4. 可批量部署:所有节点的 Kubelet、CRI-O/Containerd、runc 等组件,可通过 Ansible 编写 Playbook 实现一键批量安装配置,保证集群节点环境一致。

总结

  1. K8s 单节点容器启动的核心逻辑是"上层编排指令→标准化接口转发→运行时资源准备→底层工具执行→内核提供隔离环境";
  2. 核心链路为 Kubelet → CRI → 容器运行时(CRI-O/Containerd) → runc → Linux 内核;
  3. 所有节点的组件可通过 Ansible 批量部署,保证集群环境统一,体现 K8s "上层编排调度+下层标准化运行时"的架构设计核心。
相关推荐
步行cgn1 小时前
Spring MVC + Thymeleaf 模板解析失败:从 500 错误到页面正常显示
java·spring·mvc
lgcgkCQ2 小时前
【AI 转型实战 1】SpringAI 入门:搭建基础大模型对话能力
java·ai·agent·rag·spring ai·mcp·langchain4j
Wang's Blog2 小时前
Java 项目实战:交友项目 - 用户体系集成总结
java·开发语言·交友
学到老活到老2 小时前
第 24 集:配置文件写了 80,Spring Boot 为什么读到 90?
java·后端·spring
tongyiixiaohuang2 小时前
供应商主数据同步实战:从易快报到金蝶云星空的单一策略落地
java·网络·数据库
鱼宵3 小时前
取集合第一个元素,Java 为什么要写三种写法?
java·windows·python·java21
学长毕设3 小时前
基于SpringBoot的餐厅管理系统-附源码
java·spring boot·后端
刚入门的大一新生4 小时前
Linux-线程互斥
java·开发语言
赵小哥要冲啦4 小时前
社区邻里互助小程序从 0 到 1 复盘:需求拆解与信任机制设计
java·小程序·需求分析
xiaogai_gai4 小时前
采购业务退款单同步实战:从钉钉审批流到金蝶云星空付款单
java·数据库·钉钉