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

22、架构-资源与调度

1、资源与调度

调度是容器编排系统最核心的功能之一,“编排”一词本身便包 含“调度”的含义。调度是指为新创建的Pod找到一个最恰当的宿主机 节点来运行它,这个过程成功与否、结果恰当与否,关键取决于容器 编排系统是如何管理与分配集群节点的资源的。可以认为调度是必须 以容器编排系统的资源管控为前提,那我们就先从Kubernetes的资源 模型谈起。

2、资源

在Kubernetes中,资源是一个广义的概念,涵盖了系统中所有能够接触到的方方面面。广义上,Kubernetes系统中的资源包括工作负荷(如Pod、ReplicaSet、Service等)、存储(如Volume、PersistentVolume、Secret等)、策略(如SecurityContext、ResourceQuota、LimitRange等)、身份(如ServiceAccount、Role、ClusterRole等)。这种“一切皆为资源”的设计使得Kubernetes能够顺利实施声明式API,为系统建立了一套囊括抽象元素和物理元素的领域特定语言。通过不同层级间资源的使用

资源模型

资源模型是Kubernetes设计的核心之一。在Kubernetes中,资源被广泛抽象化,涵盖了系统中的所有组件。这些资源不仅包括物理资源(如处理器、内存、存储等),还包括逻辑资源(如工作负载、策略、身份等)。这种设计使得Kubernetes能够通过声明式API进行管理,实现了灵活的资源调度和管理。

物理资源

物理资源包括处理器、内存、磁盘存储等,这些资源直接与底层硬件相对应。

  • 计算资源:包括处理器(CPU)和内存。处理器资源被称为可压缩资源(Compressible Resource),当处理器资源不足时,Pod的运行速度会变慢,但不会被系统直接终止。内存资源则被称为不可压缩资源(Incompressible Resource),当内存资源不足时,Pod会因为内存溢出(Out-Of-Memory, OOM)而被系统直接终止。

  • 存储资源:包括各种类型的磁盘存储,如本地磁盘、NFS、云存储等。这些资源在Kubernetes中通过Volume进行管理和使用。

  • 网络资源:包括网络带宽和网络地址。这些资源通常用于确保Pod之间以及Pod与外部系统之间的网络通信。

资源供需关系

在Kubernetes的资源模型中,Node是资源的提供者,而Pod是资源的使用者。调度的核心任务就是将Pod与合适的Node进行匹配。

  • Node:每个Node提供一定数量的计算资源、存储资源和网络资源。这些资源通过Node对象进行描述和管理。

  • Pod:Pod是Kubernetes中最小的调度单元,一个Pod可以包含一个或多个容器。Pod通过声明其所需的资源(如CPU、内存)与Node的资源进行匹配。调度器根据Pod的资源需求和Node的资源状况,选择最合适的Node来运行Pod。

3、服务质量与优先级

Kubernetes中的服务质量(Quality of Service, QoS)和优先级机制,用于管理资源分配和使用,确保关键任务能够获得足够的资源。

服务质量分类

Kubernetes将Pod的服务质量分为三类:Guaranteed、Burstable和BestEffort。这三类服务质量对应不同的资源分配策略。

  • Guaranteed:当Pod的所有容器都指定了相同的CPU和内存请求值和限制值时,该Pod被分类为Guaranteed。这类Pod具有最高的优先级,能够确保获得其请求的所有资源。

  • Burstable:当Pod的容器指定了请求值,但没有指定限制值时,该Pod被分类为Burstable。这类Pod在资源充足时能够获得更多资源,但在资源紧张时,可能会被系统限制其资源使用。

  • BestEffort:当Pod的所有容器都没有指定CPU和内存请求值时,该Pod被分类为BestEffort。这类Pod具有最低的优先级,只能在资源充足时获得资源。

优先级与抢占

优先级和抢占机制用于确保高优先级的Pod能够获得必要的资源。

  • Pod优先级:每个Pod可以设置一个优先级,表示其相对重要性。调度器在选择节点时,会优先考虑高优先级的Pod。

  • 抢占机制:当高优先级Pod无法找到合适的节点时,调度器会尝试通过抢占低优先级Pod的资源来满足高优先级Pod的需求。被抢占的Pod会被终止,释放其占用的资源。

驱逐机制

驱逐机制是Kubernetes确保系统稳定性和性能的重要手段。当节点资源紧张或Pod运行状态异常时,系统会驱逐一些Pod,以释放资源和恢复正常运行。

4、 节点压力驱逐

当节点的资源(如CPU、内存)使用达到阈值时,Kubernetes会驱逐部分Pod,以缓解节点压力。

  • 内存压力驱逐:当节点内存不足时,系统会优先驱逐BestEffort和Burstable Pod,以释放内存资源。Guaranteed Pod通常不会被驱逐,除非所有其他Pod都被驱逐后,仍无法缓解内存压力。

  • 磁盘压力驱逐:当节点的磁盘使用达到阈值时,系统会驱逐Pod,以释放磁盘空间。被驱逐的Pod通常是那些使用大量临时存储的Pod。

Pod状态驱逐

当Pod运行状态异常时,Kubernetes也会驱逐这些Pod,以确保系统的整体健康。

  • 健康检查:Kubernetes通过liveness probe和readiness probe对Pod进行健康检查。当Pod的健康检查失败时,系统会将其标记为不健康,并可能将其驱逐。

 默认调度器

Kubernetes的默认调度器是Pod调度的核心组件,负责将新创建的Pod分配到合适的节点上运行。

调度算法

默认调度器使用一组算法来确定Pod的最佳运行节点。这些算法分为两类:Predicate算法和Priority算法。

  • Predicate算法:用于筛选符合Pod资源需求的节点。常见的Predicate算法包括检查节点的可用资源、节点端口冲突、节点亲和性等。

  • Priority算法:用于在符合条件的节点中选择最佳节点。常见的Priority算法包括LeastRequestedPriority(选择资源使用最少的节点)、BalancedResourceAllocation(选择资源分配最均衡的节点)等。

 调度流程

默认调度器的调度流程包括以下步骤:

  1. 接收调度请求:当新Pod创建时,调度器接收调度请求,并将Pod加入调度队列。
  2. 节点筛选:使用Predicate算法筛选出符合Pod资源需求的节点。
  3. 节点打分:使用Priority算法对筛选出的节点进行打分,并选择得分最高的节点。
  4. 绑定节点:将Pod绑定到选定的节点上,通知kubelet在该节点上创建Pod。

调度性能优化

在大规模集群中,调度性能是一个关键问题。Kubernetes通过以下机制来优化调度性能:

  • 调度缓存:调度器维护一个调度缓存,记录所有节点的资源使用情况,避免频繁的远程调用,提高调度效率。

  • 状态共享的双循环调度机制:Kubernetes采用Informer Loop和Scheduler Loop两个控制循环,分别负责监控资源变化和执行调度任务,确保调度器能够实时响应集群状态的变化。

总结

第十四章详细介绍了Kubernetes的资源模型、服务质量与优先级、驱逐机制和默认调度器。这些机制共同构成了Kubernetes高效、灵活的资源调度体系,确保了集群的稳定性和性能。通过对物理资源的精细管理和调度算法的优化,Kubernetes能够在大规模集群中高效运行,满足各种复杂应用的需求。

相关文章:

22、架构-资源与调度

1、资源与调度 调度是容器编排系统最核心的功能之一,“编排”一词本身便包 含“调度”的含义。调度是指为新创建的Pod找到一个最恰当的宿主机 节点来运行它,这个过程成功与否、结果恰当与否,关键取决于容器 编排系统是如何管理与分配集群节点…...

mac 常用工具命令集合

Iterm2 Command T:新建标签 Command W:关闭当前标签 Command ← →:在标签之间切换 Control U:清除当前行 Control A:跳转到行首 Control E:跳转到行尾 Command F:查找 Command …...

服务器雪崩的应对策略之----限流

限流是一种控制流量的技术,旨在防止系统在高并发请求下被压垮。通过限流,可以确保系统在负载高峰期依然能保持稳定运行。常见的限流策略包括令牌桶算法、漏桶算法、计数器算法和滑动窗口算法。 常见的限流方法 1. 令牌桶算法 (Token Bucket Algorithm)2…...

Python12 列表推导式

1.什么是列表推导式 Python的列表推导式(list comprehension)是一种简洁的构建列表(list)的方法,它可以从一个现有的列表中根据某种指定的规则快速创建一个新列表。这种方法不仅代码更加简洁,执行效率也很…...

threejs 光影投射-与场景进行交互(六)

效果 场景中有三个立方体,三种颜色.点击变成红色,再点恢复自身原有颜色 代码 import ./style.css import * as THREE from three import { OrbitControls } from three/examples/jsm/controls/OrbitControls.js import { log } from three/examples/jsm/nodes/Nodes.js//…...

Ubuntu 20.04安装显卡驱动、CUDA和cuDNN(2024.06最新)

一、安装显卡驱动 1.1 查看显卡型号 lspci | grep -i nvidia我们发现输出的信息中有Device 2230,可以根据这个信息查询显卡型号 查询网址:https://admin.pci-ids.ucw.cz/mods/PC/10de?actionhelp?helppci 输入后点击Jump查询 我们发现显卡型号为RTX …...

二叉树的这五种遍历方法你们都会了吗?

说在前面 🎈二叉树大家应该都很熟了吧,那二叉树的这五种遍历方式你们都会了吗? 以这一二叉树为例子,我们来看看不同遍历方式返回的结果都是怎样的。 前序遍历 前序遍历的顺序是:首先访问根节点,然后递归地…...

使用模数转换器的比例电阻测量基础知识

A/D 转换器是比率式的,也就是说,它们的结果与输入电压与参考电压的比值成正比。这可用于简化电阻测量。 测量电阻的标准方法是让电流通过电阻并测量其压降 (见图 1)。然后,欧姆定律(V I x R) 可用于计算电压和电流的…...

(C++语言的设计和演化) C++的设计理念

文章目录 前言📖C 语言设计规则📐规则和原理📐一般性规则📐设计支持规则📐语言的技术性规则📐低级程序设计支持规则 📖标准化(扩充评判准则)📐它精确吗&#…...

AI音乐:创新引擎还是创意终结者?

✨作者主页: Mr.Zwq✔️个人简介:一个正在努力学技术的Python领域创作者,擅长爬虫,逆向,全栈方向,专注基础和实战分享,欢迎咨询! 您的点赞、关注、收藏、评论,是对我最大…...

20240621每日后端---------如何优化项目中的10000个if-else 语句?

如何优化 10000 个 if-else 语句?有没有好的解决方案? 额,本身问题就很奇怪,怎么可能有这种代码。。。世界你让我陌生,但是我们还是假象着看看能不能解决一下。 解决方案1:策略模式 使用策略模式确实可以…...

【STM32】时钟树系统

1.时钟树简介 1.1五个时钟源 LSI是低速内部时钟,RC振荡器,频率为32kHz左右。供独立看门狗和自动唤醒单元使用。 LSE是低速外部时钟,接频率为32.768kHz的石英晶体。这个主要是RTC的时钟源。 HSE是高速外部时钟,可接石英*/陶瓷谐振…...

docker换源

文章目录 前言1. 查找可用的镜像源2. 配置 Docker 镜像源3. 重启 Docker 服务4. 查看dock info是否修改成功5. 验证镜像源是否更换成功注意事项 前言 在pull镜像时遇到如下报错: ┌──(root㉿kali)-[/home/longl] └─# docker pull hello-world Using default …...

百度在线分销商城小程序源码系统 分销+会员组+新用户福利 前后端分离 带完整的安装代码包以及搭建部署教程

系统概述 百度在线分销商城小程序源码系统是一款集分销、会员组管理和新用户福利于一体的前后端分离的系统。它采用先进的技术架构,确保系统的稳定性、高效性和安全性。该系统的前端基于小程序开发,为用户提供了便捷的购物体验和交互界面。用户可以通过…...

Flutter【组件】富文本组件

简介 flutter 富文本组件。 github地址: https://github.com/ThinkerJack/jac_uikit pub地址:https://pub.dev/packages/jac_uikit 使用方式 运行 flutter pub add jac_uikit组件文档 使用方式: HighlightedTextWidget.builder(text: &…...

中国恋爱交友相亲软件有哪些?大型婚恋相亲交友APP真实测评推荐

嘿嘿,当了29年的单身汪,这下总算不再单着啦!这两年把身边能找的人都找遍了,也没碰到合适的。没办法,就跑到网上去试试,坚持了有半年,可算有对象啦!下面给大家说说我用过的几个能脱单…...

快速欧氏聚类与普通欧氏聚类比较

1、前言 文献《FEC: Fast Euclidean Clustering for Point Cloud Segmentation》介绍了一种快速欧氏聚类方法,大概原理可以参考如下图,具体原理可以参考参考文献。 2、时间效率比较:快速欧氏聚类VS普通欧氏聚类 网上搜集的快速欧式聚类,与自己手写的普通欧式聚类进行对比,…...

如何让大语言模型在规格普通的硬件上运行 - 量化技术

近年来,大型语言模型(LLMs)的能力有了飞跃式的发展,使其在越来越多的应用场景中更加友好和适用。然而,随着LLMs的智能和复杂度的增加,其参数数量,即权重和激活值的数量也在增加,这意…...

shell printf详解

默认的 printf 不会像 echo 自动添加换行符,我们可以手动添加 \n。 1. printf命令语法组成: printg format-string [arguments] 第一部分为格式化字符串,该字符串最好用引号括起来 第二部分为参数列表,例如字符串或变量值的列表,该列表需…...

【数据分析】用Python做事件抽取任务-快速上手方案

目录 方法一:使用OmniEvent库安装OmniEvent使用OmniEvent进行事件抽取OmniEvent优点缺点 方法二:使用大模型使用GPT网页版进行事件抽取事件类型列表 大模型优点缺点 总结 在自然语言处理(NLP)领域,事件抽取是一项关键任…...

内存分配函数malloc kmalloc vmalloc

内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...

在 Spring Boot 中使用 JSP

jsp&#xff1f; 好多年没用了。重新整一下 还费了点时间&#xff0c;记录一下。 项目结构&#xff1a; pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理

在城市的某个角落&#xff0c;一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延&#xff0c;滚滚浓烟弥漫开来&#xff0c;周围群众的生命财产安全受到严重威胁。就在这千钧一发之际&#xff0c;消防救援队伍迅速行动&#xff0c;而豪越科技消防一体化安全管控平台构建的消防“…...

自然语言处理——文本分类

文本分类 传统机器学习方法文本表示向量空间模型 特征选择文档频率互信息信息增益&#xff08;IG&#xff09; 分类器设计贝叶斯理论&#xff1a;线性判别函数 文本分类性能评估P-R曲线ROC曲线 将文本文档或句子分类为预定义的类或类别&#xff0c; 有单标签多类别文本分类和多…...

Python训练营-Day26-函数专题1:函数定义与参数

题目1&#xff1a;计算圆的面积 任务&#xff1a; 编写一个名为 calculate_circle_area 的函数&#xff0c;该函数接收圆的半径 radius 作为参数&#xff0c;并返回圆的面积。圆的面积 π * radius (可以使用 math.pi 作为 π 的值)要求&#xff1a;函数接收一个位置参数 radi…...

ThreadLocal 源码

ThreadLocal 源码 此类提供线程局部变量。这些变量不同于它们的普通对应物&#xff0c;因为每个访问一个线程局部变量的线程&#xff08;通过其 get 或 set 方法&#xff09;都有自己独立初始化的变量副本。ThreadLocal 实例通常是类中的私有静态字段&#xff0c;这些类希望将…...

npm安装electron下载太慢,导致报错

npm安装electron下载太慢&#xff0c;导致报错 背景 想学习electron框架做个桌面应用&#xff0c;卡在了安装依赖&#xff08;无语了&#xff09;。。。一开始以为node版本或者npm版本太低问题&#xff0c;调整版本后还是报错。偶尔执行install命令后&#xff0c;可以开始下载…...

MLP实战二:MLP 实现图像数字多分类

任务 实战&#xff08;二&#xff09;&#xff1a;MLP 实现图像多分类 基于 mnist 数据集&#xff0c;建立 mlp 模型&#xff0c;实现 0-9 数字的十分类 task: 1、实现 mnist 数据载入&#xff0c;可视化图形数字&#xff1b; 2、完成数据预处理&#xff1a;图像数据维度转换与…...