k8s的集群调度:

news2024/12/28 6:50:59

k8s的集群调度:

Scheduler:负责调度资源,把pod调度到node节点

预算策略

优先策略

  1. list-watch

k8s集群当中,通过list-watch的机制进行每个组件的协作,保持数据同步,每个组件之间的解耦

Kubectl配置文件,向apiserver发送命令-----通过apiserver把命令发送到各个组件

Kubectl run nginx --image=nginx:1.22-------apiserver-----controller manager------scheduler-------kubelet.

创建成功之后,kubectl get pod kubectl describe pod nginx---------->etcd的数据库当中

List-watch----会在每一步把监听的消息(apiserver:6443)-------每个组件controller manager,scheduler,kubelet,etcd都会监听apiserver:6443端口

List-watch机制:

调度的过程和策略:

如何来把pod分配到node:

Scheduler是集群的调度器,他的意义就是把pod分配到集群的节点

以下几个问题:

  1. 公平:每个节点都能够公平的分配资源
  2. 资源高效利用:集群当中的资源可以被最大化使用
  3. 效率:调度的性能要好,能够尽快的完成大批量的调度工作
  4. 灵活:允许用户根据自己的需求控制和改变调度的需求

Scheduler是一个单独的运行程序,启动之后就会一直监听apiserver,获取报文当中的字段:spec.nodeName

创建pod时候,为每个pod创建一个binding,表示该往哪个节点上部署

创建pod到节点时,有两个策略,先执行预算策略,在执行优先策略,这两步操作都必须成功,否则立即返回报错

也就是说,部署的node,必须满足这两个策略

预算策略predicate:自带一些算法,选择node节点(scheduler自带算法策略,不需要人工干预)

  1. podfitsresources:pod适应资源,检查节点上的剩余资源是否满足pod请求的资源,主要是CPU和内存
  2. Podfitshost:pod适应主机,如果pod指定了node的name,nginx1pod---->node1,检测主机名是否存在,存在要和pod指定的名称匹配,这才能调度过去
  3. Podselectormatches:pod选择器匹配,创建pod时可以根据node节点的标签来进行匹配,查找指定的node节点上标签是否存在,存在的标签是否匹配
  4. Nodiskconflict:无磁盘冲突,确保已挂载的卷,与pod的卷不发生冲突,除了只读模式。

如果预算策略都不满足,pod将始终处于pending状态,不断地重试调度,直到有节点满足条件为止

Node1 node2 node3

问:经过预算策略,上述三个节点都满足,那该怎么办?----》进入优先策略

优选策略:

Leastrequestedpriority:最低请求优先级,通过算法计算节点上的CPU和内存使用率,确定节点的权重,使用率越低的节点相应的权重越高,调度时会更倾向于使用率低的节点,为了实现资源的合理的利用

Balanceresourceallocation:平横资源分配,考虑CPU和内存的使用率,给节点赋予权重,权重算的是CPU和内存使用率接近,使用率越接近,权重越高,和上面的Leastrequestedpriority一起使用,

例如:

node1 CPU和内存使用率:20:60

Node2 CPU和内存使用率:50:50

Node2在被调度时会被优先选择

Imagelocalitypriority:节点上是否已经有了要部署的镜像,镜像的总数成正比,满足的镜像数越多,权重越高

例如:

Nginx:1.22

Node1:无

Node2:有

Node2的优先级比较高

以上这些策略都是scheduler自带的算法

通过预算选择出可以部署的节点,在通过优先选择出来最好的节点,以上都是自带的算法,k8s集群自己来选择

指定节点:

Spec参数设置

问:它走不走scheduler的调度策略

指定了节点,在参数中设置了nodeName,指定了节点的名称,会跳过scheduler的调度策略,这个规则是强制匹配

如何对标签进行指定

指定标签:

spec

nodeSelector:

指定节点标签部署pod,是要经过scheduler的算法的,如果节点不满足条件,pod会进入pending状态,直到节点满足条件为止

实现:查看节点的标签

手动添加自定义标签:

查看已经部署的服务的标签:

选择标签部署我们的pod:

标签选择要走scheduler调度算法的

亲和性:

节点亲和性:

Pod亲和性:

软策略和应策略:

Node节点的亲和性:

软策略:preferredDuringSchedulingIgnoredDuringExecution

选择node节点时,我声明了我需要最好能部署在node01,软策略会尽量满足这个条件,不一定会完全部署在node01节点上。

硬策略:

选择pod时,声明了硬策略,必须满足硬条件,必须部署在node01.可以理解成一个强制的要求

Pod的亲和性:

软策略

要求调度器将pod调度到其他pod的亲和性匹配的节点上,可以是,也可以不是,尽量满足

Pod nginx1 node1

Pod nginx2 nginx2希望和nginx1部署在一个节点,尽量满足

硬策略:requiredDuringSchedulingIgnoredDuringExecution

要求调度器将pod调度到其他pod的亲和性和匹配节点上,必须是

Pod nginx1 node1

Pod nginx nginx必须要和nginx的亲和性匹配,只能往node01

键值的运算关系:

标签,都是根据标签来选择亲和性

In:在

Notin:不在

选择的标签值,在node节点上存在

选择label的值不在node节点上

Gt:大于,大于选择的标签值

Lt:小于,小于选择的标签值

Exsts:存在,选择标签镜像,值不考虑

doesNoteExist:不存在,选择不具有指定标签的对象,值不考虑

Lt和gt只能比较整数值,亲和性策略根据标签来进行选择

硬策略:

还是要经过scheduler

修改键值对算法

删除标签:

强制覆盖标签:

演示:

Lt和gt只能比较整数值,亲和性策略根据标签来进行选择

小于612的部署

运行yml脚本报错:

指定键值对的算法为Exist或者DoesNotExist不能使用values字段

修正版

软策略的写法:

根据硬策略修改:

多个软策略:以权重高为标的

硬策略和软策略联合:

多个软策略看权重,权重高执行指定的软策略,硬策略,先满足硬策略,再满足软策略,硬策略无法满足,软策略一个都不执行

面试题:

你在部署pod的时候如何选择策略:

Node的亲和性:性能不一致,尽量把pod往性能高的多部署,软策略,节点故障,或者节点维护中,又要部署业务,只能选择硬策略,把故障节点剔除

举例说明:

如上图所示,如果性能有差别,可以使用软策略,部署在四核八G当中

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

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

相关文章

1.9 day7 IO进程线程

使用消息队列完成两个进程间的通信 进程1 #include <myhead.h> struct migbuf {long a;//消息类型char b[1024];//消息正文 }; #define SIZE (sizeof(struct migbuf)-sizeof(long)) int main(int argc, const char *argv[]) {//创建key值key_t key0;if((keyftok(".…

从文本(.txt)文件中读取数据时出现中文乱码

前言 当需要从记事本中读取数据时&#xff0c;发现读取的数据会出现中文乱码&#xff0c;我尝试了C和C读取文件&#xff0c;发现都是这样。 乱码原因 文本文件的保存默认使用UTF-8编码方式&#xff0c;而VS编译器的编码方式是GBK&#xff0c;所以不同的编码方式导致了乱码。…

6.1.2捕捉图像(内含5D博客长截图,你们都去哪儿了?)

6.1.2捕捉图像 利用HyperSnap6可以很方便地捕捉全屏、虚拟桌面、窗口、控件、整页、按钮、活动窗口和区域。除此之外&#xff0c;它还可以进行自由捕捉和特殊捕捉。 1&#xff0e;捕捉窗口或控件 利用传统的“PrintScreen”或“AltPrintScreen”键只能捕捉整个屏幕或当前活动…

numpy100练习题,包含相应使用函数解释

取自github开源项目&#xff1a;numpy100题 文章目录 1. 导入numpy库并简写为 np (★☆☆)2. 打印numpy的版本和配置说明 (★☆☆)3. 创建一个长度为10的空向量 (★☆☆)4. 如何找到任何一个数组的内存大小&#xff1f; (★☆☆)5. 如何从命令行得到numpy中add函数的说明文档?…

【Python学习】Python学习10-列表

目录 【Python学习】Python学习10-列表 前言创建语法访问列表中的值更新和删除列表元素操作列表列表截取Python列表函数&方法参考 文章所属专区 Python学习 前言 本章节主要说明Python的列表List。 创建语法 创建一个列表 通过方括号和逗号分割创建&#xff0c;列表数据…

springboot学生成绩管理系统源码和论文

随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#xff0c;各行各业相继进入信息管理时代&#xf…

书生大模型全链路开源体系

书生浦语大模型全链路开源体系开源了哪些东西 数据书生万卷&#xff1a;一个2TB的涵盖多种模态与任务的数据集预训练InternLM-Train&#xff1a;微调XTuner&#xff1a;可供你低成本微调模型的工具箱部署LMDeploy&#xff1a;一个服务端场景下、transformer 结构 LLM 部署工具…

使用开源通义千问模型(Qwen)搭建自己的大模型服务

目标 1、使用开源的大模型服务搭建属于自己的模型服务&#xff1b; 2、调优自己的大模型&#xff1b; 选型 采用通义千问模型&#xff0c;https://github.com/QwenLM/Qwen 步骤 1、下载模型文件 开源模型库&#xff1a;https://www.modelscope.cn/models mkdir -p /data/…

Camunda ServiceTask

一&#xff1a;Java class Java class实现JavaDelegate接口&#xff0c;只需要配置类的全限定名即可&#xff0c;不需要被Spring容器管理。 public class JavaClassServiceTask implements JavaDelegate {Overridepublic void execute(DelegateExecution execution) throws …

k8s的集群调度---下

前情回顾 预算策略&#xff1a;过滤出合适的节点 优选策略&#xff1a;选择部署的节点 nodeName&#xff1a;硬匹配&#xff0c;不走调度策略。node01. nodeSelector&#xff1a;根据节点的标签选择&#xff0c;会走调度算法。 只要是走调度算法&#xff0c;在不满足预算策…

荣誉 | 数说故事荣登2023粤港澳大湾区科创百强;上榜甲子光年2023中国数字经济榜

硬科技向前&#xff0c;加「数」战新年 2024新年伊始&#xff0c;数说故事就迎来了两大喜讯 上榜2023粤港澳大湾区科创榜 荣登【光年20】2023中国数字经济产品创新榜 ...... 以技术为笔&#xff0c;创新为墨 「数」写着数说故事在科技领域的强大实力与潜力 为新年注入更…

Selenium 学习(0.18)——软件测试之基本路径测试

1、基本路径法测试的概念 是一种白盒测试方法&#xff0c;它在程序控制流图的基础上&#xff0c;通过分析控制构造的环行复杂性&#xff0c;导出基本可执行路径集合&#xff0c;从而设计测试用例的方法。 要保证在测试中程序的每一个可执行语句至少执行一次 【这和语句…

基于pytorch的房价预测

简介 本文主要介绍的基于pytorch和房价预测深度学习网络构建。 该系统使用的是网络上的开源数据&#xff1a; 实现了对房价数据的处理&#xff0c;包括词频统计、情感分析等&#xff0c;并将分析结果以图表形式进行展示。通过这个系统&#xff0c;用户可以便捷地进行分析和可…

scVI与MultiVI

scVI&#xff1a;https://docs.scvi-tools.org/en/stable/user_guide/models/scvi.html MultiVI&#xff1a;https://docs.scvi-tools.org/en/stable/user_guide/models/multivi.html 目录 scVI生成推理任务 MultiVI生成推理 scVI single cell variational inference提出了一个…

JAVA实现文件上传至阿里云

注册阿里云账号后,开通好对象存储服务&#xff08;OSS&#xff09;&#xff0c;三个月试用 阿里云登录页 (aliyun.com) 目录 一.创建Bucket 二.获取AccessKey&#xff08;密钥&#xff09; 三.参考官方SDK文件&#xff0c;编写入门程序 1.复制阿里云OSS依赖&#xff0c;粘贴…

山东名岳轩印刷包装携专业包装袋盛装亮相2024济南生物发酵展

山东名岳轩印刷包装有限公司盛装亮相2024第12届国际生物发酵展&#xff0c;3月5-7日山东国际会展中心与您相约&#xff01; 展位号&#xff1a;1号馆F17 山东名岳轩印刷包装有限公司是一家拥有南北两个生产厂区&#xff0c;设计、制版、印刷&#xff0c;营销策划为一体的专业…

无法找到 WindowsKernelModeDriver10.0 的生成工具

无法找到 WindowsKernelModeDriver10.0 的生成工具(平台工具集 “WindowsKernelModeDriver10.0”)。若要使用 WindowsKernelModeDriver10.0 生成工具进行生成&#xff0c;请安装 WindowsKernelModeDriver10.0 生成工具。或者&#xff0c;可以升级到当前 Visual Studio 工具&…

ShardingSphere-JDBC初探

引言 为什么使用分库分表&#xff1f; 数据量太大单表放不下&#xff0c;并且公司不希望切换产品&#xff0c;可选的方案不多&#xff0c;ShardingSphere就是不错的选择。 切换产品指的是换成es、clickhouse、hbase这种支持大数据&#xff0c;试想一下切换产品对整个项目的改…

mysql进阶-视图

目录 1. 用途 2. 语法 2.1 创建或替换视图 2.2 修改视图 2.3 查看视图&#xff1a; 2.4 删除视图&#xff1a; 3. 其他 3.1 操作视图 3.2 迁移数据库 1. 用途 视图可以理解为一个复杂查询的简称&#xff0c;它可以帮助我们简化查询&#xff0c;主要用于报表查询:例如…

Halcon3D篇-3D预处理,滤波,点云筛选

前言 由于3D相机采集到的数据通常通过Tiff格式的深度图进行显示或者保存。 深度图与模型的互转可以访问另一篇博客&#xff1a;https://blog.csdn.net/m0_51559565/article/details/135362674 关于3D相机的数据采集&#xff0c;可以访问我们另一篇关于LMI3D相机SDK的二次开发…