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

Kubernetes资源调度策略及实现机制

目录

一、资源调度策略

1.默认调度器(Default Scheduler)

2.自定义调度器(Custom Scheduler)

3.亲和性与反亲和性(Affinity and Anti-Affinity)

4.污点与容忍(Taint and Tolerations)

5.资源配额和限制(Resource Quotas and Limits)

6.优先级和抢占(Priority and Preemption)

7.多调度器(Multiple Schedulers)

二、资源调度机制实现原理

1.调度器组件(Scheduler Component)

2.调度队列(Scheduling Queue)

3.调度循环(Scheduling Cycle)

4.过滤阶段(Filtering Phase)

5.打分阶段(Scoring Phase)

6.节点绑定(Node Binding)

7.Pod条件(Pod Conditions)

8.抢占(Preemption)

9.扩展性(Extensibility)

10.事件和日志(Events and Logging)

11.回退机制(Fallback Mechanism)


Kubernetes(K8s)的资源调度策略是高度可配置和可扩展的,以适应不同类型的工作负载和集群配置。以下是Kubernetes中的关键资源调度策略和它们的实现机制

一、资源调度策略

1.默认调度器(Default Scheduler)

  • 预选阶段(Predicates):这一阶段会过滤掉无法满足Pod需求的节点。例如,如果节点的CPU或内存资源不足,或者不满足Pod的节点选择器(Node Selector)要求,那么该节点会被排除。
  • 优选阶段(Priorities):在预选阶段后,调度器会对剩余的节点进行评分,评分标准可能包括节点的资源空闲程度、Pod与节点的亲和性、节点上的Pod密度等。
  • 绑定阶段(Binding):选择得分最高的节点,并将Pod绑定到该节点上。

2.自定义调度器(Custom Scheduler)

用户可以编写自己的调度器,以实现特定的调度策略。自定义调度器可以与默认调度器并行运行,或者通过配置替换默认调度器。

3.亲和性与反亲和性(Affinity and Anti-Affinity)

  • 节点亲和性(Node Affinity):允许Pod指定对节点的偏好,例如,可以指定Pod只调度到具有特定标签的节点上。
  • Pod亲和性与反亲和性(Pod Affinity and Anti-Affinity):这些规则允许Pod根据其他Pod的运行位置来选择调度位置,或者避免与某些Pod运行在同一个节点上。

4.污点与容忍(Taint and Tolerations)

  • 污点(Taints):节点可以设置污点,以防止Pod调度到该节点上。例如,如果一个节点需要维护,可以给它添加一个污点。
  • 容忍(Tolerations):Pod可以定义容忍,以允许它们被调度到有相应污点的节点上。

5.资源配额和限制(Resource Quotas and Limits)

  • 资源配额(Resource Quotas):用于管理计算资源在命名空间级别的使用,可以限制Pod可以使用的资源总量。
  • 资源限制(Resource Limits):Pod可以设置资源请求(requests)和限制(limits),以确保它们在运行时得到足够的资源,并且不会超过某个最大值。

6.优先级和抢占(Priority and Preemption)

  • 优先级(Priority):Pod可以设置优先级,用于在资源不足时决定哪个Pod可以被抢占。
  • 抢占(Preemption):当高优先级的Pod无法调度时,调度器可能会终止低优先级的Pod以释放资源。

7.多调度器(Multiple Schedulers)

在大型集群中,可能需要多个调度器来处理不同类型的工作负载。例如,一个调度器可能专门用于在线服务,而另一个可能用于批处理作业。

总之,Kubernetes的资源调度是集群管理中的关键组成部分,它们确保了Pod可以有效地利用集群资源,同时满足特定的业务需求和约束。通过提供丰富的调度选项,Kubernetes能够适应各种复杂的应用场景。

二、资源调度机制实现原理

Kubernetes的资源调度内部实现机制涉及到多个组件和步骤。以下是一些关键的内部实现机制:

1.调度器组件(Scheduler Component)

Kubernetes调度器是一个独立的组件,它负责将Pods分配到集群中的节点上。调度器不断 watch API server,一旦有新的Pod被创建并且尚未被调度,调度器就会尝试为它找到一个合适的节点。

2.调度队列(Scheduling Queue)

调度器维护了一个待调度Pod的队列。这个队列中的Pod按照一定的优先级排序,确保高优先级的Pod先被调度。

3.调度循环(Scheduling Cycle)

调度器为每个待调度的Pod执行一个调度循环,这个循环包括两个主要步骤:过滤(Filtering)和打分(Scoring)。

4.过滤阶段(Filtering Phase)

在这个阶段,调度器会运行一系列预选规则(Predicates)来过滤出不能运行该Pod的节点。这些规则包括但不限于:节点是否有足够的资源、节点是否满足Pod的亲和性要求、节点是否有Pod所容忍的污点等。

5.打分阶段(Scoring Phase)

过滤阶段完成后,调度器会对剩余的节点进行打分。打分基于一系列优先级函数(Priorities),这些函数考虑了各种因素,如节点的资源空闲程度、Pod与节点的亲和性、节点上的Pod密度等。

6.节点绑定(Node Binding)

一旦调度器选出了最佳节点,它就会将该Pod绑定到该节点上。这个过程是通过更新Pod的API对象来完成的,将Pod的`spec.nodeName`字段设置为选中的节点名。

7.Pod条件(Pod Conditions)

调度器会检查Pod的状态和条件,以确保Pod可以正常运行。例如,如果Pod依赖于一个ConfigMap或Secret,调度器会确保这些资源已经准备好。

8.抢占(Preemption)

如果一个高优先级的Pod无法调度,调度器可能会启动抢占逻辑,尝试删除一些低优先级的Pod来为高优先级的Pod腾出空间。

9.扩展性(Extensibility)

Kubernetes调度器允许通过插件(Plugins)来扩展其功能。这些插件可以在过滤阶段和打分阶段被调用,以实现自定义的调度逻辑。

10.事件和日志(Events and Logging)

调度器会生成事件和日志,这些信息对于调试和理解调度决策非常有用。

11.回退机制(Fallback Mechanism)

如果调度器在给定的时间内无法找到一个合适的节点,Pod可能会被放入一个待定状态,等待重新调度。

总之,上述Kubernetes调度器的内部实现机制是高度优化的,以确保能够快速、有效地将Pods调度到集群中的节点上。通过不断地迭代和改进,Kubernetes调度器能够适应不断变化的集群状态和复杂的用户需求。

相关文章:

Kubernetes资源调度策略及实现机制

目录 一、资源调度策略 1.默认调度器(Default Scheduler) 2.自定义调度器(Custom Scheduler) 3.亲和性与反亲和性(Affinity and Anti-Affinity) 4.污点与容忍(Taint and Tolerations&#…...

finetuning大模型准备(基于Mac环境)

为finetuning进行的热身准备,涉及周边的软件工具,方法。 问题1:finetuning过程较长,采用系统自带命令行没有后台,前台被杀后,容易造成训练失败。 解决方法: tmux可以开启后台训练 问题2&…...

js检验一个字符串是否是正确时间格式的工具方法

js检验一个字符串是否是正确时间格式的工具方法 (()> {/*** 检验字符串是否为时间格式* param {String} date 需要检验的时间格式* returns true 为时间格式,false 为非时间格式*/const isTimaFormat (date) > {if(!date) return false;try{const tempTime …...

大型制造业集团IT信息化总体规划方案(65页PPT)

方案介绍: 本大型制造业集团IT信息化总体规划方案旨在通过构建先进、高效、稳定的IT信息化系统,支撑集团各业务领域的运营和管理需求,促进集团整体运营效率和竞争力的提升。通过实施本项目,集团将能够更好地应对市场变化和客户需…...

【LIN】STM32新能源汽车LIN通信实现过程

【LIN】STM32新能源汽车LIN通信实现过程 文章目录 前言一、软件二、接线图三、硬件原理图四、上位机五、PICO示波器串行解码1.软件中的LIN波特率设置-192002.PIC设置3.PIC串行解码 六.引用总结 前言 【电机控制】直流有刷电机、无刷电机汇总——持续更新 使用工具:…...

【LeetCode:575. 分糖果+ 哈希表】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…...

全文检索-ElasticSearch

1.基本概念 1.Index索引 动词:相当于MySQL中的insert; 名词:相当于MySQL中的DataBase; 2.Type(类型) 在Index(索引)中,可以定义一个或多个类型 类似于MySQL中的Tab…...

C编程惯用法:深入剖析与实战指南

C编程惯用法:深入剖析与实战指南 在C语言编程的浩瀚海洋中,掌握一些惯用法对于提升代码质量、增强可读性以及降低出错率至关重要。本文将从四个方面、五个方面、六个方面和七个方面,详细剖析C编程中的惯用法,帮助您更好地理解和应…...

MySQL数据表的设计

实际工程中, 对于数据表的设计和创建, 我们遵循以下步骤: 首先确定实体, 找到关键名词, 提取关键信息, 设计表有哪些列, 每一列是什么. (有几个实体, 一般就创建几个表, 一般一个表对应一个实体) 实体之间的关系: 1. 一对一关系 例如: 一个学生, 只能有一个账号; 一个账号只…...

Flutter开发效率提升1000%,Flutter Quick教程之对写好的Widget进行嵌套

通常写代码的时候,我们是先写好外面的Widget,再写里面的Widget。但是,也有的时候,我们写好了一个Widget,但是我们觉得有必要再在外面嵌套一个Widget,这时候应该怎么做呢?(还有其他方…...

2020编程语言排序:探索编程界的热门与趋势

2020编程语言排序:探索编程界的热门与趋势 在数字时代的浪潮中,编程语言作为构建数字世界的基石,其流行度和影响力不容忽视。2020年,各大编程语言在各自的领域里展现出独特的魅力和实力。本文将从四个方面、五个方面、六个方面和…...

提高工作效率的招数

自己的工作效率为啥比别人低,因为不会使用工具,这就是一个大冤种。 1.血泪教训,写代码调用第三方接口的时候已经要打印调用日志,不然扯皮真的难搞。 2.pg 上测试或的时候由于schema 错误mybatis会给你报空指针一样,还…...

css特殊效果和页面布局

特殊效果 圆角边框:div{border-radius: 20px 10px 50px 30px;} 四个属性值按顺时针排列,左上的1/4圆半径为20px,右上10,右下50,左下30。 div{border-radius: 20px;} 四角都为20px。 div{border-radius: 20px 10…...

JavaScript中对象的增删改查

1. 增(添加属性) let obj {}; // 添加一个属性 obj.name John Doe; // 或者使用方括号语法添加属性(这对于动态属性名很有用) let propName age; obj[propName] 30; console.log(obj); // 输出: { name: John Doe, …...

技术周总结 2024.05.27~06.02(java bean冲突 软件工程)

文章目录 一、05.28 周二1.1)问题01:java 引用的jar包中bean名称冲突了,怎么解决?1.2)问题02:使用SparkSession将json字符串转成 DataFrame 二、06.01 周六2.1)问题01:系统架构师考试…...

「前端+鸿蒙」核心技术HTML5+CSS3(八)

1、网站布局详解 网站布局是前端开发中的核心概念之一,它决定了网页的视觉结构和用户浏览的逻辑顺序。以下是几种常见的布局方式及其代码示例: 固定布局: 固定布局通常具有固定的宽度和高度,适用于传统的桌面视图。 <!DOCTYPE html> <html> <head><…...

15届蓝桥杯决赛,java b组,蒟蒻赛时所写的题思路

这次题的数量是10题&#xff0c;初赛是8题&#xff0c;还多了两题&#xff0c;个人感觉java b组的题意还是比较清晰的&#xff08;不存在读不懂题的情况&#xff09;&#xff0c;但是时间感觉还是不够用&#xff0c;第4题一开始不会写&#xff0c;后面记起来写到结束也没调出来…...

2024蓝桥杯国赛C++研究生组游记+个人题解

Day0 开始复习&#xff0c;过了一遍大部分板子 本来打算再学一遍SAM&#xff0c;但是想到去年考了字符串大题今年应该不会再考了吧。。 过了一遍数据结构和图论&#xff0c;就1点了 两点的时候还没睡着&#xff0c;舍友打游戏好像打到2点过。。 Day1 相当困 第一题&…...

C#WPF数字大屏项目实战07--当日产量

1、第2列布局 第2列分三行&#xff0c;第一行分6列 2、当日产量布局 3、产量数据布局 运行效果 4、计划产量和完成度 运行效果 5、良品率布局 1、添加用户控件 2、用户控件绘制圆 2、使用用户控件 3、运行效果 4、注意点 这三个数值目前是静态的&#xff0c;可以由后台程序项…...

MyBatis源码分析--02:SqlSession建立过程

我们再来看看MyBatis使用流程&#xff1a; InputStream inputStream Resources.getResourceAsStream("myBatis_config.xml"); SqlSessionFactory sqlSessionFactory new SqlSessionFactoryBuilder().build(inputStream); SqlSession session sqlSessionFactory.op…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序

一、开发环境准备 ​​工具安装​​&#xff1a; 下载安装DevEco Studio 4.0&#xff08;支持HarmonyOS 5&#xff09;配置HarmonyOS SDK 5.0确保Node.js版本≥14 ​​项目初始化​​&#xff1a; ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...