【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 "上层编排调度+下层标准化运行时"的架构设计核心。
相关推荐
凤山老林15 小时前
SpringBoot 使用 H2 文本数据库构建轻量级应用
java·数据库·spring boot·后端
小夏卷编程16 小时前
Ubuntu 20.04.4 宝塔 docker showdoc v3.2 更新到v3.7.3
运维·docker·容器
JEECG低代码平台16 小时前
JeecgBoot低代码平台 Docker 部署 OnlyOffice 文档服务完整指南
低代码·docker·容器
赶路人儿16 小时前
UTC时间和时间戳介绍
java·开发语言
dreamread16 小时前
【SpringBoot整合系列】SpringBoot3.x整合Swagger
java·spring boot·后端
6+h16 小时前
【java】基本数据类型与包装类:拆箱装箱机制
java·开发语言·python
一直都在57217 小时前
Spring面经
java·后端·spring
xiaoye370817 小时前
如何在Spring中使用注解配置Bean的生命周期回调方法?
java·spring
生活爱好者!17 小时前
NAS帮我找回童年的快乐!部署 小游戏
运维·服务器·docker·容器·娱乐
闻哥17 小时前
深入Redis的RDB和AOF两种持久化方式以及AOF重写机制的分析
java·数据库·spring boot·redis·spring·缓存·面试