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)领域,事件抽取是一项关键任…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...

Unity3D中Gfx.WaitForPresent优化方案
前言 在Unity中,Gfx.WaitForPresent占用CPU过高通常表示主线程在等待GPU完成渲染(即CPU被阻塞),这表明存在GPU瓶颈或垂直同步/帧率设置问题。以下是系统的优化方案: 对惹,这里有一个游戏开发交流小组&…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

关于nvm与node.js
1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...