k8s 自身原理 2
前面我们说到 K8S 的基本原理和涉及的四大组件,分享了前两个组件 etcd 和 ApiServer
这一次我们接着分享一波:
- 调度器 scheduler
- 控制器管理器 controller manager
调度器 scheduler
调度器,见名知意,用于调度 k8s 资源的,那么这个调度器具体主要是调度啥资源呢?
实际上看我们 k8s 中运行的一个一个的 pod,这些 pod 在我们创建的时候,还记得我们有分享过是可以指定即将要生成的 pod 默认被调度了指定节点吗?
一般情况下,我们也没有去刻意指定 pod 要调度到哪个节点,但是最终 pod 一定会被调度到集群中的某一个节点
实际上,这就是调度器在起作用了,没错,调度器就是调度 pod 资源到对应的节点上
咱们的调度器也是利用了 API 服务器的监听机制来新创建 pod 资源的,创建好的 pod 资源,会将其调度到资源充足,甚至没有 pod 的节点上
那么你是否会认为是调度器直接控制节点来运行指定的 pod?

nonono,并不是这样的,前面我们有说到过基本上很多的组件都是通过 ApiServer 来进行处理的
调度器在这里也不例外,
这里的是调度器是通过 ApiServer 来更新 pod 的定义,然后 ApiServer 再去通知 Kubelet 这个 pod 已经被调度器调度过了,这个时候,实际对应节点上的 Kubelet 发现自己节点上有 pod 被调度过来,那么 kubelet 就会创建并且运行 pod 中的容器
那么 k8s 默认是如何调度 pod 的?总有一个优先级吧
是的没错,总会有一定的规则,咱们画个图来感受一下:

例如一开始集群中有 4 个节点,在运行过程中,节点 2 和 节点 3 变为不可用了,接下来,若有新的 pod 需要调度,那么调度器会从可用的 2 个节点里面选择一个最优的节点,
例如磁盘,内存空间较大,或者 pod 资源个数较少的,会按照综合优先级递减排序,
例如就会生成 pod 调度到节点 4
那么问题就来了,k8s 是如何找到满足需求的可用节点呢?
当然 k8s 找到可用节点的条件也是不少了,不是随便一个节点就可以接得住的,例如 k8s 会检查这些条件
- 节点的资源是否被耗尽了
- pod 是否设置了一定要 / 一定不要 调度到某一个节点上
- 如果这个 pod 需要绑定主机的端口,那么该节点的端口是否被占用了
- 节点可以满足创建 pod 对应硬件资源的要求吗
- 该节点上有没有和我们即将要创建的 pod 参数和规格一致的标签呢
- pod 若需要特定的卷,该节点支持吗
- … 等等
以上的条件都必须要满足,才有机会将 pod 调度到这个节点上来
我们是否可以设置 pod 全部集中在一个节点,或者分散到多个节点中去呢?
实际上我们知道管理 pod 的资源是 RS / RC,一般情况下 他们会尽可能的将 pod 分散到不同的节点上面,但是也不能保证每一次都是这样的
如果我们自己有需求,可以在 pod 模板中设置 pod 的亲缘性 和 非亲缘性来设置定,pod 调度到哪些符合要求的节点上去
总的来说,pod 分散到不同的节点可以降低风险,增强健壮性,若其中一个节点挂掉,并不会应 pod 提供的服务
之前说到 etcd ,ApiServer 都可以是多个的,那么这里的调度器仍然可以是多个,若是真的只有一个调度器,服务多了之后他也扛不住嘞
我们也可以看到 kube-system 命名空间中

这些核心组件都是以 pod 的方式运行的,如果我们需要多个 scheduler,那么就多创建几个就好了
但是我们在创建 pod 的时候,如果没有指定使用哪一个调度器去调度的话,那么 k8s 中会使用默认的调度器,如果我们有需求,实际可以在 pod 模板中使用 shedulerName 关键字来指定调度器的名字
控制器管理器 controller manager
控制器管理器 controller manager 见名知意,他是一个管理器 manager,管理的对象是控制器 controller
Replication 管理器,我们可以理解为资源管理器,也就是我们之前学过的 RC ,ReplicationController
控制器的话就比较多了,之前我们学过的大部分资源,都有对应的控制器进行管控,例如:
- Node 控制器
- Service 控制器
- Endpoints 控制器
- Namespace 控制器
- ReplicaSet 控制器
- DaemonSet 控制器
- Job 控制器
- Deployment 控制器
- StatefulSet 控制器
- PersistentVolume 控制器
为啥需要控制器管理器?
之前分享的各个组件中,他们就好像只管好自己就可以独善其身了,总得有一个角色为大家负重前行吧?
比如说, ApiServer 只去和 etcd 交互,然后通知监听的客户端有变更 , 调度器 Scheduler 又仅仅是给 pod 分配节点
那么对于资源的扩缩容,以及资源的期望状态,又谁来进行监听和处理呢?
那就得 控制器管理器了
那么我们上述的控制器主要是干啥?
首先通过控制器的名字,我们应该是知道这些控制器主要是控制自己对应资源的状态的
然而不仅仅是这一点哦,控制器做的事情就稍微杂一点,综合能力比较强
例如:
- 控制器会监听 ApiServer 资源变更
- 执行相应的操作,例如创建,编辑,删除,查看等等
这里的控制器也是不会相互通信的,都是和 ApiServer 交互,可以理解为 控制器一直在做满足别人期望的事情,是一个调和的角色
例如,我们将期望的副本数,改变了,那么控制器便会去处理,直到满足期望后,将最新的状态写入资源的 status
那么 Replication 管理器又是何方神圣?
刚才有说到他是管理控制器的,控制器又那么多,可以把他看做控制器的管家吧
官方定义,启动 ReplicationController 资源的控制器叫做 Replication 管理器
那么对于 RC 的行为我们应该心里都有数吧,当修改了 RC 的副本数之后,RC 回去调和 pod 的数量
这个实际动作,其实是 Replication 管理器 这个幕后大佬做的
之前我们说到 RC 的时候,当我们修改这个副本数,大家是否会认为, k8s 中会有一个轮询机制,当获取到 RC 的副本变化的时候,会去满足期望?
实际上也是和 ApiServer 那一块分享的类似,此处也是用到了监听机制,控制器会通过监听机制订阅可能会影响期望副本数的变更事件
若有变更事情时,则会做出相应动作
RC 会实际去运行 pod 吗?
看到这里,是否还会有疑问,既然 RC 会去满足期望,那么是 RC 直接去运行的 pod 吗?
并不是的
当出现当前数量和期望副本数量不一致的时候, RC 回去创建新的 pod 清单,并发布到 APiServer 上,最终会让调度器和节点上的 Kubelet 来调度 pod 并运行 pod
管理器管理那么多的控制器,肯定有一个统一管理资源的管理流程的,具体的简单流程如下:

简单来说,就是 Replication 管理器会监听具体的资源,然后通过 ApiServer 来操作对应的资源对象,最终达到更新的目的
当然,其他控制器也是这样的,都是监听资源,通过 ApiServer 进行更新资源
每一种控制器,实际上我们在分享到其对应资源的时候,基本都有分享到他们的行为,这里就不再重复了
今天就到这里,学习所得,若有偏差,还请斧正
欢迎点赞,关注,收藏
朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

好了,本次就到这里
技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。
我是阿兵云原生,欢迎点赞关注收藏,下次见~
更多的可以查看 零声每晚八点直播:https://ke.qq.com/course/417774
相关文章:
k8s 自身原理 2
前面我们说到 K8S 的基本原理和涉及的四大组件,分享了前两个组件 etcd 和 ApiServer 这一次我们接着分享一波: 调度器 scheduler控制器管理器 controller manager 调度器 scheduler 调度器,见名知意,用于调度 k8s 资源的&…...
解决hbase节点已下线,但在status中显示为dead问题
工作中需要下线4台hbase小节点,下线完成后使用status 命令查看,有一台为dead状态: 使用status detailed 查看,发现“hd-03"这台节点是dead。 检查各节点配置文件无误,并使用 /opt/hbase/bin/hbase-daemon.sh restart master 重启两个…...
深入理解Python装饰器:解析高阶函数与代码美学
文章目录 🍀引言🍀什么是装饰器?🍀装饰器的基本用法🍀带参数的装饰器🍀类装饰器🍀总结 🍀引言 当谈到Python编程中的高级特性时,装饰器(decorators࿰…...
构建之法 - 软件工程实践教学:每天都向前推进一点点
作者:福州⼤学 汪璟玢⽼师 汪老师:每次都向前推进一点点,哪怕只有一点点,也好过什么都不做。 邹老师:对,几个学期下来,就已经超过那些“空想”的团队很远了。坚持下去! 汪老师&…...
CSS transform:rotate;无效问题
CSS设置旋转 transform:rotate无效。 今天遇到一个奇怪的问题,CSS给 icon图标设置一个hover 旋转180deg的效果,不生效。 一度任务样式被覆盖了,样式不生效没选中元素的class。但是设置hover改变大小是生效的。奇怪了? 为什么会无…...
华为新版ENSP PRO模拟器测评:性能表现与功能扩展一览
一、引言 在网络领域不断涌现的新技术和复杂的网络拓扑要求,推动了网络设备模拟器的持续发展和创新。华为作为一家领先的通信技术解决方案提供商,不断致力于为网络工程师和技术从业人员提供更优秀的仿真环境。最近,华为推出了ensp pro模拟器的…...
BBS-个人博客项目完整搭建、BBS多人博客项目基本功能和需求、项目程序设计、BBS数据库表结构设计、创建BBS表模型
一、BBS-个人博客项目完整搭建 项目开发流程 一、项目分类 现在互联网公司需要开发的主流web项目一般分为两类:面向互联网用户,和公司内部管理。面向互联网用户: C(consumer)端项目 公司内部管理:B(business)端项目还有一类web应用ÿ…...
智能设备管理系统对企业设备管理效果有作用吗?
智能设备管理系统对企业设备管理效果具有显著的作用和积极的影响。它可以提高设备管理的效率、准确性和可靠性,帮助企业降低运营成本、提高生产效率,并为企业提供更好的决策支持。以下是智能设备管理系统对企业设备管理效果的几个方面影响: …...
取证--实操
2022年美亚杯个人赛 运用软件DB Browser for SQLite (一款用于查看SQLlite数据库文件的浏览器工具) 火眼,盘古石手机取证系统等 案件详情 于2022年10月,有市民因接获伪冒快递公司的电邮,不慎地于匪徒架设的假网站提…...
react组件化开发详解
React是一个流行的JavaScript库,用于构建用户界面,并且以组件化的方式进行开发。下面将详解React组件化开发的概念和步骤: 组件化思维: 组件化开发是将复杂的用户界面划分为独立、可重用的小部件(组件)。…...
【JVM】对String::intern()方法深入详解(JDK7及以上)
文章目录 1、什么是intern?2、经典例题解释例1例2例3 1、什么是intern? String::intern()是一个本地方法,它的作用是如果字符串常量池中已经包含一个等于此String对象的字符串,则返回代表池中这个字符串的String对象的引用&#…...
7.1 C/C++ 实现动态数组
动态数组相比于静态数组具有更大的灵活性,因为其大小可以在运行时根据程序的需要动态地进行分配和调整,而不需要在编译时就确定数组的大小。这使得动态数组非常适合于需要动态添加或删除元素的情况,因为它们可以在不浪费空间的情况下根据需要…...
iOS问题记录 - Xcode 15安装低版本iOS模拟器(持续更新)
文章目录 前言开发环境问题描述问题分析1. 定位问题2. 逆向分析2.1. IDA Free2.2. Hopper Disassembler Demo 3. 模拟器日志4. supportedArchs 解决方案最后 前言 最近新需求很多,项目改动很大,开发完成后想测一遍在低版本iOS系统上的兼容性,…...
高端百度地图开发2:自定义水滴头像(鼠标事件、API封装对接)
高端百度地图开发系列 高端百度地图开发1:自定义水滴头像(自定义标注覆盖物、Overlay覆盖类) 自定义水滴头像之鼠标事件、API封装对接 高端百度地图开发系列一、添加自定义覆盖物的方法二、对接API数据1.获取API数据(模拟)2.遍历数据3.添加自…...
R语言生存分析(机器学习)(2)——Enet(弹性网络)
弹性网络(Elastic Net):是一种用于回归分析的统计方法,它是岭回归(Ridge Regression)和lasso回归(Lasso Regression)的结合,旨在克服它们各自的一些限制。弹性网络能够同时考虑L1正则…...
【Docker】使用 Docker Registry 搭建自己的 Docker 镜像仓库
使用 Docker Registry 搭建自己的 Docker 镜像仓库 在使用 Docker 进行应用程序的开发和部署时,使用 Docker 镜像仓库是一个很好的实践。它允许集中存储和管理 Docker 镜像,方便团队协作和版本控制。在本文中,将介绍如何使用 Docker Registr…...
Spring 是什么框架?
Spring 是 Java EE 编程领域的一款轻量级的开源框架,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,它的目标就是要简化 Java 企业级应用程序的开发难度和周期。 Spring 自诞生以来备受青睐,一直被广大开发人员作为 Java 企业…...
Azure添加网络接口
添加网络接口的意义 在 Azure 上,为虚拟机添加网络接口的意义包括以下几个方面: 扩展网络带宽:通过添加多个网络接口,可以增加虚拟机的网络带宽,提高网络传输速度和数据吞吐量。实现网络隔离:每个网络接口…...
Linux 内核第一版 (v0.01) 开源代码解读
探索Linux v0.01的内部结构,Linux内核经常被认为是一个庞大的开源软件。在撰写本文时,最新版本是v6.5-rc5,包含36M行代码。不用说,Linux是几十年来许多贡献者辛勤工作的成果。 Linux 内核首个开源版本 (v0.01) 的体积非常小&…...
tp6 v3微信退款
/*** Notes:退款* param $out_trade_no 支付时候订单号(order表 original_bn)两个参数选一个这个要选对* param $out_refund_no 退款订单号* param $total 订单金额* param $refund 退款金额* Time: 2023-08-10*/public function refundMoney($out_trade…...
2025届必备的六大降重复率助手横评
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 纵然人工智能辅助毕业论文写作现如今已然成为一种学术方面的新常态,可是却需要去…...
玉米脱粒机的毕业设计(论文+12张CAD图纸+开题报告+任务书……)
玉米脱粒机作为农业机械化的重要设备,其核心作用在于通过机械结构与动力系统的协同,实现玉米果穗与籽粒的高效分离。传统人工脱粒效率低、劳动强度大,而机械化脱粒通过旋转滚筒与筛网的配合,可显著提升处理速度,同时降…...
2026届学术党必备的六大AI写作方案横评
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek DeepSeek身为先进的大语言模型,能够为学术论文写作给予系统性辅助。研究者理应首…...
[具身智能-229]:OpenCV 的 DNN (Deep Neural Networks) 模块,可以直接加载和运行,通过PyTorch AI框架训练好的模型,而不需要安装PyTorch AI框架
OpenCV 的 DNN (Deep Neural Networks) 模块确实是工业界和边缘计算领域非常推崇的推理引擎。它的核心定位不是“训练模型”,而是“让训练好的模型跑得更快、更轻、更通用”。它允许开发者在不依赖庞大的 TensorFlow 或 PyTorch 库的情况下,直接在生产环…...
S7-200 MCGS 基于PLC的小型水厂恒压供水系统 带解释的梯形图接线图原理图图纸,io分配
S7-200 MCGS 基于PLC的小型水厂恒压供水系统 带解释的梯形图接线图原理图图纸,io分配,组态画面最近在搞一个小型水厂的恒压供水系统项目,用西门子S7-200 PLC搭配MCGS组态软件,效果挺有意思的。这个系统核心就仨字——稳如狗&#…...
C#并行编程进阶:除了Task和Parallel,你还需要学会用PerformanceCounter做资源熔断
C#并行编程中的资源熔断机制:用PerformanceCounter构建自适应系统 当你在深夜部署一个高负载数据处理服务时,最可怕的不是代码报错——而是系统在默默崩溃。我曾经历过这样的时刻:一个看似完美的并行处理管道,在凌晨三点突然吞噬了…...
Docker 入门到进阶:容器化部署 Nginx + MySQL + WordPress 实战(附 Dockerfile、docker-compose.yml 详解)
前言在云原生时代,Docker 已成为开发与运维人员的必备技能。本文将带你从零开始,系统学习 Docker 核心概念与实战技巧,最终使用 Docker Compose 一键部署一套高可用的 WordPress 站点,其中包含 Nginx 作为反向代理、MySQL 作为数据…...
当“过杀率”飙升时,现场工程师该如何向AI“施压”?
产线正在满负荷运转,AI智能体视觉检测系统(TVA)突然开始把大量合格的螺母件剔除。操作工抱怨连连,生产厂长在后面催。你打电话给供应商,对方说“回去调一下模型,明天发版”。这一等就是一天,产线…...
Magisk Alpha深度隐匿实战:从Momo检测到BL列表的终极配置
1. 为什么需要深度隐匿Root环境? 最近两年,银行类APP和游戏厂商的检测手段越来越严格。我去年用某银行APP时,明明Root已经隐藏得很好,结果转账时突然弹出"设备环境异常"的提示,直接中断交易。后来才知道是新…...
2026大模型训练全景,从底座到上线,决定AI体验的完整链路
在人工智能飞速发展的2026年,大众对大模型的认知早已不再停留在“参数越大越强”的简单层面。我们日常使用AI助手时感受到的流畅对话、精准指令响应、高效工具调用,甚至稳定可靠的输出风格,背后都不是单一的预训练环节在支撑,而是…...
