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(选择资源分配最均衡的节点)等。
调度流程
默认调度器的调度流程包括以下步骤:
- 接收调度请求:当新Pod创建时,调度器接收调度请求,并将Pod加入调度队列。
- 节点筛选:使用Predicate算法筛选出符合Pod资源需求的节点。
- 节点打分:使用Priority算法对筛选出的节点进行打分,并选择得分最高的节点。
- 绑定节点:将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)领域,事件抽取是一项关键任…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
Spring Boot 实现流式响应(兼容 2.7.x)
在实际开发中,我们可能会遇到一些流式数据处理的场景,比如接收来自上游接口的 Server-Sent Events(SSE) 或 流式 JSON 内容,并将其原样中转给前端页面或客户端。这种情况下,传统的 RestTemplate 缓存机制会…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
鱼香ros docker配置镜像报错:https://registry-1.docker.io/v2/
使用鱼香ros一件安装docker时的https://registry-1.docker.io/v2/问题 一键安装指令 wget http://fishros.com/install -O fishros && . fishros出现问题:docker pull 失败 网络不同,需要使用镜像源 按照如下步骤操作 sudo vi /etc/docker/dae…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...
GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
