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

管理器管理那么多的控制器,肯定有一个统一管理资源的管理流程的,具体的简单流程如下:

image-20220219122523501

简单来说,就是 Replication 管理器会监听具体的资源,然后通过 ApiServer 来操作对应的资源对象,最终达到更新的目的

当然,其他控制器也是这样的,都是监听资源,通过 ApiServer 进行更新资源

每一种控制器,实际上我们在分享到其对应资源的时候,基本都有分享到他们的行为,这里就不再重复了

今天就到这里,学习所得,若有偏差,还请斧正

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~

更多的可以查看 零声每晚八点直播:https://ke.qq.com/course/417774

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/89546.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cmake-ibmtpm1682编译

1、error Ossl library is using different radix 异常解决 RADIX_BITS由 64改成32 --whole-archive CMakeFiles\ibm-tpm-my.dir/objects.a -Wl, --no-whole-archive CMakeFiles\ibm-tpm-my.dir\linklibs.rsp CMake中的 --whole-archive以及–no-whole-archive两者都是编译器…

新能源汽车需要检测哪些项目

截至2022年底,中国新能源车保有量达1310万辆,其中纯电动汽车保有量1045万辆。为把好新能源汽车安全关,我国新能源汽车除了完善的强制性产品认证型式实验外,还建立了“车企-地方-国家”逐级上报的三级监管体系实行新能源汽车全生命…

opencv 基础54-利用形状场景算法比较轮廓-cv2.createShapeContextDistanceExtractor()

注意:新版本的opencv 4 已经没有这个函数 cv2.createShapeContextDistanceExtractor() 形状场景算法是一种用于比较轮廓或形状的方法。这种算法通常用于计算两个形状之间的相似性或差异性,以及找到最佳的匹配方式。 下面是一种基本的比较轮廓的流程&…

这所985非常难考,却无数人趋之若鹜!

一、学校及专业介绍 厦门大学(Xiamen University),简称厦大(XMU),位于福建省厦门市,位列国家“双一流”、“985工程”、“211工程”重点建设高校。 1.1 招生情况 厦门大学初试考847信号与系统…

LeetCode面向运气之Javascript—第27题-移除元素-98.93%

LeetCode第27题-移除元素 题目要求 一个数组nums和一个值val,你需要原地移除所有数值等于val的元素,并返回移除后数组的新长度 举例 输入:nums [3,2,2,3], val 3 输出:2, nums [2,2] 输入:nums [0,1,2,2,3,0,4,2…

Spring-2-深入理解Spring 注解依赖注入(DI):简化Java应用程序开发

今日目标 掌握纯注解开发依赖注入(DI)模式 学习使用纯注解进行第三方Bean注入 1 注解开发依赖注入(DI)【重点】 问题导入 思考:如何使用注解方式将Bean对象注入到类中 1.1 使用Autowired注解开启自动装配模式(按类型) Service public class StudentS…

vue3 使用@vue-office/excel预览本地excel文件 demo

vue3 使用vue-office/excel预览excel文件 demo 显示如下&#xff1a; npm地址&#xff1a;https://www.npmjs.com/package/vue-office/excel vue-office还有pdf和docx&#xff0c;按需下载对应插件 npm install vue-office/excel vue-demivue代码如下 app.vue <templ…

【Leetcode】79.单词搜索

一、题目 1、题目描述 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内…

小白如何轻松制作产品帮助中心页面?

产品帮助中心是每个网站/产品必不可少的页面&#xff0c;产品帮助中心页面成为了企业提供客户支持和解决方案的重要组成部分。对于初次接触建立帮助中心页面的小白来说&#xff0c;也许会感到一些困惑和无从下手。本文将为小白介绍如何轻松制作产品帮助中心页面&#xff0c;帮助…

JZ38 字符串的排列

题目地址&#xff1a;字符串的排列_牛客题霸_牛客网 题目回顾&#xff1a; 解题思路&#xff1a; 这里用到了全排列和剪枝。 首先我们来说全排列&#xff0c;设置一个vis数组来记录当期元素是否被使用过&#xff0c;然后dfs遍历整个数组&#xff0c;列出所有符合条件的路径就是…

你选的产品真的适合做独立站吗?用这5种方法测试一下吧!

跨境电商行业圈里流行一句话“七分靠选品&#xff0c;三分靠运营”&#xff0c;一个独立站新手卖家要想在跨境电商这个庞大的行业体系里分得一块蛋糕&#xff0c;不深入了解一些选品的技巧恐怕很难做出成绩来。 很多独立站赚不到钱的原因在于选品上的失败&#xff0c;如果你的…

汽车制造业上下游协作时 外发数据如何防泄露?

数据文件是制造业企业的核心竞争力&#xff0c;一旦发生数据外泄&#xff0c;就会给企业造成经济损失&#xff0c;严重的&#xff0c;可能会带来知识产权剽窃损害、名誉伤害等。汽车制造业&#xff0c;会涉及到重要的汽车设计图纸&#xff0c;像小米发送汽车设计图纸外泄事件并…

计算机组成原理-笔记-汇总

&#x1f4da; 前言 本人在备考408&#xff0c;王道讲得的确不错&#xff0c;本人之前也看过哈工大【刘宏伟老师】的课&#xff0c;两者对比下来。 王道——更加基础&#xff0c;对小白更加友好哈工大——偏实践偏硬件&#xff08;会将更多的代码硬件设计&#xff09; PS&#…

W6100-EVB-PICO 做TCP Server进行回环测试(六)

前言 上一章我们用W6100-EVB-PICO开发板做TCP 客户端连接服务器进行数据回环测试&#xff0c;那么本章将用开发板做TCP服务器来进行数据回环测试。 TCP是什么&#xff1f;什么是TCP Server&#xff1f;能干什么&#xff1f; TCP (Transmission Control Protocol) 是一种面向连…

海信聚好看将携新品DBdoctor,亮相中国数据库技术大会(DTCC2023)

海信聚好看将携新品DBdoctor&#xff0c;亮相中国数据库技术大会 8月16日—18日&#xff0c;第14届中国数据库技术大会&#xff08;DTCC-2023&#xff09;将在北京国际会议中心隆重召开。作为国内数据库领域规模最大的技术交流盛会&#xff0c;吸引了众多业内知名企业和数百名…

学会这一招,轻松玩转小程序自动化

jmeter 可以做性能测试&#xff0c;这个很多人都知道&#xff0c;那你知道&#xff0c;jmeter 可以在启动运行时&#xff0c;指定线程数和运行时间&#xff0c;自定义性能场景吗&#xff1f; jmeter 性能测试&#xff0c;动态设定性能场景 平时&#xff0c;我们使用 jmeter 进…

基于亚奈奎斯特采样和SOMP算法的平板脉冲响应空间插值matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ...................................................................... %fine regular gr…

springboot邮件任务

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency> 依赖 配置文件 spring.mail.username1393087444qq.com spring.mail.password************* spring.mail.hos…

C语言学习笔记---数据的存储详解

C语言程序设计笔记---015 C语言数据的存储1、数据类型的意义1.1、unsigned与signed数据类型例程11.2、补码与原码相互转换例程2 2、大小端的介绍2.1、大小端的例程12.2、大小端的例程2 --- 判断当前编译器环境属于大端或小端 3、综合练习题探究数据的存储3.1、练习题13.2、练习…

求Win11系统virtualbox+vagrant安装MacOS虚拟机

文章目录 一、背景二、素材2.1、virtualboxvagrant 三、问题3.1、安装失败3.2、第二个失败3.3、网络说 四、求助 一、背景 题主&#xff0c;主要是穷&#xff0c;没钱买mac笔记本或相关系统的苹果产品&#xff0c;哈哈&#xff0c;偶尔也有用过MacOS系统&#xff0c;只是还没有…