当前位置: 首页 > news >正文

20250720-1-Kubernetes 调度-白话理解创建一个Pod的内部工作流_笔记

一、创建一个Pod的工作流程



1. 创建一个Pod的工作流程



1)Kubernetes架构与组件



  • list-watch机制: Kubernetes基于list-watch机制的控制器架构,实现组件间交互的解耦。各组件通过监控自己负责的资源变化实现协作。
  • 发布订阅模式: 当资源发生变化时,kube-apiserver会通知相关组件,这个过程类似于发布与订阅模式。
2)创建Pod的命令与响应



  • 命令执行: 使用kubectl run pod-test --image=nginx命令创建Pod,该命令会向API Server提交请求。
  • 状态变化: 执行命令后,通过kubectl get pods可以看到Pod状态从"ContainerCreating"变为"Running"。
3)API Server的作用



  • 集群入口: API Server是Kubernetes集群的访问入口,所有kubectl命令都会提交给它。
  • 请求处理: API Server接收创建Pod请求后,不会立即创建Pod,而是先处理配置信息。
4)etcd存储配置信息



  • 数据存储: API Server将创建Pod的配置信息存储到etcd中,etcd是Kubernetes的数据库。
  • 响应机制: API Server写入etcd后会收到响应,然后返回"pod/pod-test created"给客户端。
5)调度器选择节点



  • 节点发现: 调度器检测到未绑定节点的Pod后,根据自身调度算法选择合适的节点。
  • 节点绑定: 调度器会给Pod打标记(如nodeName=k8s-node1),并将绑定信息通过API Server写入etcd。
6)kubelet创建容器



  • 容器创建: kubelet通过API Server发现有分配到本节点的新Pod后,调用Docker API创建容器。
  • 状态上报: 容器创建完成后,kubelet将容器状态上报给API Server,API Server再写入etcd。
7)更新Pod状态与etcd



  • 状态同步: kubelet上报的Pod状态会通过API Server同步到etcd中存储。
  • 数据完整性: etcd中存储了Pod创建时的配置信息和运行时的状态信息。
8)kubectl get命令获取Pod列表



  • 数据来源: kubectl get pods命令请求API Server获取Pod列表,API Server从etcd中提取数据。
  • 显示格式: kubectl将获取的数据结构化显示为表格形式,展示Pod的NAME、READY、STATUS等信息。
2. 创建一个Pod的工作流程的组件分析



1)组件间交互的解耦与list-watch机制



  • 解耦原理: 通过list-watch机制实现组件间松耦合,各组件只需监控自己负责的资源
  • 通知机制: 资源变化时kube-apiserver会主动通知相关组件,类似发布-订阅模式
  • 核心流程: API Server作为中枢,etcd存储状态,Scheduler/Kubelet/Docker协同完成Pod生命周期管理
2)创建一个Pod的基本流程



  • 阶段1: kubectl提交Pod配置给API Server,写入etcd存储
  • 阶段2: Scheduler检测未绑定Pod,选择节点并打标(如nodename=k8s-node1),回写etcd
  • 阶段3: Kubelet调用Docker API创建容器,上报状态到API Server
  • 阶段4: kubectl get通过API Server从etcd获取最新状态
3)控制器(Controller Manager)的作用与位置



  • 缺失发现: 原始流程图中缺少Controller Manager组件(位于Scheduler之前)
  • 干预时机: 当创建Deployment等高级资源时才会介入,直接创建Pod时不参与
  • 类比决策: 与Scheduler类似都是决策系统,但管理对象不同(Deployment vs Pod)
4)Controller Manager的管理范围与功能



  • 管理对象: 负责Deployment/ReplicaSet等控制器的创建和维护
  • 工作流程: 创建Deployment → 生成ReplicaSet → 创建Pod → 触发Scheduler介入
  • 层级控制: 通过多级控制器实现声明式API的最终一致性
5)CoreDNS组件的作用与功能



  • 节点代理: 每个节点独立运行的网络组件(注意:字幕中误称为"酷跑"应为CoreDNS)
  • 核心功能:
    • 管理Pod网络规则
    • 维护Service的DNS解析
    • 实时监听Service变更并更新网络配置
  • 触发条件: 创建Service资源时自动介入工作
3. 创建Pod工作流程的场景比喻



1)场景介绍:学校小卖铺

  • 系统映射:
    • 小卖铺 → Kubernetes集群
    • 老板 → API Server
    • 仓库 → etcd
    • 学生 → 各组件(Scheduler/Kubelet等)
    • 商品 → 资源对象(Pod/Service等)
2)组件对应角色



  • 访问控制: 学生不能直接进仓库(组件不能直接操作etcd)
  • 中介作用: 所有交易通过老板完成(API Server是唯一入口)
  • 状态同步: 商品库存变化由老板通知(watch机制)
3)场景描述:李四同学买烟



  • 低效场景:
    • 学生主动轮询询问商品状态(类比轮询检查)
    • 老板被动响应(无事件通知机制)
  • 问题本质: 缺少watch机制导致资源浪费
4)流程优化思考



  • 优化方向:
    • 建立商品到货通知系统(实现watch机制)
    • 老板主动通知注册过的学生(事件驱动)
  • K8s实践: 通过list-watch避免组件轮询,降低系统负载
二、知识小结

知识点

核心内容

关键概念/易混淆点

技术要点

Kubernetes集群架构

将多台服务器组建为容器集群,通过调度算法分配Pod到节点

Service vs Pod直接访问

API Server作为统一入口,etcd存储集群状态

Pod调度机制

调度器根据算法选择合适节点,无需人工干预

节点分组 vs 全局调度

通过nodeName标记实现绑定

工作流程

1. kubectl run提交API Server

2. 写入etcd

3. 调度器绑定节点

4. kubelet创建容器

声明式API vs 命令式操作

List-Watch机制实现组件解耦

组件协作

- Controller Manager:管理Deployment等控制器

- kube-proxy:维护Service网络规则

控制循环 vs 事件驱动

各组件通过API Server交互

特殊调度场景

- 按团队/部门划分节点

- 特殊硬件节点专供特定Pod使用

节点亲和性 vs 污点容忍

需通过标签选择器实现

状态同步机制

kubelet定期上报容器状态到API Server并写入etcd

期望状态 vs 实际状态

kubectl get从etcd获取最新状态

类比说明

小卖部模型:

- 老板=API Server

- 仓库=etcd

- 学生=组件

主动查询 vs 事件通知

优化方案:采用Watch机制减少轮询

http://www.dtcms.com/a/289300.html

相关文章:

  • Qt的安装和环境配置
  • Ubuntu挂载和取消挂载
  • 【vue-7】Vue3 响应式数据声明:深入理解 reactive()
  • Matlab自学笔记六十四:求解自变量带有约束条件的方程
  • 相同问题的有奇点模型和无奇点模型有什么区别
  • 服务器上的文件复制到本地 Windows 系统
  • [学习] 深入理解傅里叶变换:从时域到频域的桥梁
  • 04训练windows电脑低算力显卡如何部署pytorch实现GPU加速
  • LINUX720 SWAP扩容;新增逻辑卷;逻辑卷扩容;数据库迁移;gdisk
  • 【超越VGGT】π3-利用置换等变方法去除3r系列的归纳偏置
  • 机器视觉---深度图像存储格式
  • 监督学习应用
  • 零基础学习性能测试第三章:执行性能测试
  • Spring Boot 订单超时自动取消的 3 种主流实现方案
  • 将SAC强化学习算法部署到ROS2的完整指南
  • 基于卷积傅里叶分析网络 (CFAN)的心电图分类的统一时频方法
  • 复杂度+包装类型+泛型
  • 全平台爬虫配置流程
  • Spark专栏开篇:它从何而来,为何而生,凭何而强?
  • Java 递归方法详解:从基础语法到实战应用,彻底掌握递归编程思想
  • XSS的介绍
  • 5G NR PDCCH之CRC处理
  • Java 创建线程的方式笔记
  • 【RK3576】【Android14】ADB工具说明与使用
  • 设计模式笔记(1)简单工厂模式
  • 《汇编语言:基于X86处理器》第8章 复习题和练习,编程练习
  • 深度相机的工作模式(以奥比中光深度相机为例)
  • AI开发 | 基于FastAPI+React的流式对话
  • ChatIM项目语音识别安装与使用
  • 论文笔记: Holistic Semantic Representation for Navigational Trajectory Generation