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能够在大规模集群中高效运行,满足各种复杂应用的需求。

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

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

相关文章

Hadoop 面试题(一)

1. 简述Hadoop核心组件 ? Hadoop是一个开源的分布式计算平台,其核心组件主要包括以下几个方面: HDFS (Hadoop Distributed File System): 一个分布式文件系统,用于在廉价的硬件上存储和管理大量数据。 MapReduce&…

Elasticsearch**Elasticsearch自定义插件开发入门

Elasticsearch作为一个强大的搜索引擎和数据分析工具,其强大的扩展性是其受欢迎的重要原因之一。自定义插件开发入门** Elasticsearch作为一个强大的搜索引擎和数据分析工具,其强大的扩展性是其受欢迎的重要原因之一。通过自定义插件,用户可…

QT设计模式:备忘录模式

备忘录模式(Memento Pattern)是一种行为型设计模式,主要用于保存一个对象当前的状态,并在需要时恢复该状态。它常应用于以下场景: 撤销操作:如文本编辑器撤销、软件开发中的版本控制等,用户可以…

差分总结(一维+二维)

差分&#xff0c;可以视作前缀和的逆运算。 前缀和用于去求一个区间段的和 差分用于改变一个区间的值&#xff08;比如说某个区间都加上或者减去一个数&#xff09; P2367 语文成绩 #include<bits/stdc.h> using namespace std; #define int long long int n,p; int a…

RabbitMQ 学习笔记

RabbitMQ学习笔记 一些概念 Broker &#xff1a;RabbitMQ服务。 virtual host&#xff1a; 其实就是分组。 Connection&#xff1a;连接&#xff0c;生产者消费者与Broker之间的TCP连接。 Channel&#xff1a;网络信道&#xff0c;轻量级的Connection&#xff0c;使用Chann…

2024广东省职业技能大赛云计算赛项实战——Minio服务搭建

Minio服务搭建 前言 这道题是比赛时考到的&#xff0c;没找到具体题目&#xff0c;但在公布的样题中找到了&#xff0c;虽然很短~ 使用提供的 OpenStack 云平台&#xff0c;申请一台云主机&#xff0c;使用提供的软件包安装部署 MINIO 服务并使用 systemctl 管理 Minio是一个…

HTML静态网页成品作业(HTML+CSS)——手机电子商城网页(4个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有4个页面。 二、作品演示 三、代…

Vue 封装组件之Input框

封装Input组件:MyInput.vue <template><div class"base-input-wraper"><el-inputv-bind"$attrs"v-on"$listeners"class"e-input":style"inputStyle":value"value":size"size"input&quo…

深入解析微软Edge浏览器:探索其功能与应用

微软Edge浏览器是微软公司推出的一款现代化网页浏览器,旨在为用户提供快速、安全和高效的上网体验。本文将全面解析微软Edge浏览器,从其历史背景、核心功能、性能表现、安全特性到实际应用场景,带领读者深入了解这款浏览器的优势和使用技巧。 一、Edge浏览器的历史背景 1.…

python API自动化(Pytest+Excel+Allure完整框架集成+yaml入门+大量响应报文处理及加解密、签名处理)

1.pytest数据参数化 假设你需要测试一个登录功能&#xff0c;输入用户名和密码后验证登录结果。可以使用参数化实现多组输入数据的测试: 测试正确的用户名和密码登录成功 测试正确的用户名和错误的密码登录失败 测试错误的用户名和正确的密码登录失败 测试错误的用户名和密码登…

转换普通文件为Spring中的MultipartFile类型:处理不同文件格式

在Web开发中&#xff0c;处理文件上传是一个常见的需求。有时&#xff0c;我们需要将普通的文件对象&#xff08;如.txt或.xlsx文件&#xff09;转换为Spring框架中的MultipartFile类型&#xff0c;以便在Controller中处理文件上传和处理。本文将介绍如何在Java中进行这种转换&…

2024广东省职业技能大赛云计算赛项实战——chkrootkit安装与使用

chkrootkit安装与使用 前言 在今年比赛中有考到这样一道题&#xff0c;也是在公布的样卷中找到了它&#xff0c;今天就做做它并讲解一下&#xff1a; 公有云安全&#xff1a;入侵检测系统 使用提供的 makechk.tar.gz 包安装 chkrootkit 入侵检测工具&#xff0c;安装完毕后使…

音乐界的颠覆与挑战分析

最近的一个月&#xff0c;音乐界掀起了一场科技革命。一系列音乐大模型轮番上线&#xff0c;将素人生产音乐的门槛降到了最低。这一系列科技产品&#xff0c;不仅引发了大众对音乐产业未来发展的热烈讨论&#xff0c;也带来了新的挑战和问题。  一方面&#xff0c;这些AI音乐…

定时器-前端使用定时器3s轮询状态接口,2min为接口超时

背景 众所周知&#xff0c;后端是处理不了复杂的任务的&#xff0c;所以经过人家的技术讨论之后&#xff0c;把业务放在前端来实现。记录一下这次的离大谱需求吧。 如图所示&#xff0c;这个页面有5个列表&#xff0c;默认加载计划列表。但是由于后端的种种原因&#xff0c;这…

PHP XML: 解析、生成与操作指南

PHP XML: 解析、生成与操作指南 PHP,作为一种流行的服务器端脚本语言,提供了强大的功能来处理XML(可扩展标记语言)数据。XML是一种用于存储和传输数据的标记语言,它通过标签来标识数据。在Web开发中,XML常用于数据交换、配置文件和结构化文档。本文将详细介绍如何使用PH…

C++ | Leetcode C++题解之第171题Excel表列序号

题目&#xff1a; 题解&#xff1a; class Solution { public:int titleToNumber(string columnTitle) {int number 0;long multiple 1;for (int i columnTitle.size() - 1; i > 0; i--) {int k columnTitle[i] - A 1;number k * multiple;multiple * 26;}return num…

QT中利用QMovie实现动态加载效果

1、效果 2、代码 #include "widget.h" #include "ui_widget.h" #include <QLabel> #include <QMovie>

【Python Cookbook】S02E15 在文本中处理 HTML 和 XML 实体

目录 问题解决方案讨论 问题 我们如果想要将 HTML 实体以及 XML 实体内容替换成相对应的文本内容&#xff0c;怎么做&#xff1f; 解决方案 s "Elements are written as <tag>txt</tag>."import html print(html.escape(s)) print("-"*20,…

数据分析中如何理解透视表

透视表&#xff08;Pivot Table&#xff09;是数据分析中一种非常强大的工具&#xff0c;用于快速汇总、分析、探索和展示数据。透视表可以根据数据的不同维度和指标进行重组和计算&#xff0c;帮助用户从大量数据中提取有用的信息和发现数据中的模式和趋势。 透视表的基本概念…

在服务器上搭配大模型的运行环境详细版(docker+ollama+langchain等工具)

用到的工具 1.anaconda3环境安装 anaconda3导出环境 #导出环境 conda env export --name your_env_name > custom_environment.yaml #导入环境 conda env create -f environment.yaml2.前置的docker软件安装、docker镜像如何进行转移 sudo apt-get update #时期能访问阿…