k8s 高级调度

news/2024/9/18 14:45:27/ 标签: kubernetes, 容器, 云原生

搞懂Kubernetes调度

K8S调度器Kube-schduler的主要作用是将新创建的Pod调度到集群中的合适节点上运行。kube-scheduler的调度算法非常灵活,可以根据不同的需求进行自定义配置,比如资源限制、亲和性和反亲和性等。

  1. kube-scheduler的工作原理如下:
  • 监听API Server: kube-scheduler会监听API Server上的Pod对象,以获取需要被调度的Pod信息。它会通过API Server提供的REST API接口获取Pod的信息,例如Pod的标签、资源需求等信息。
  • 筛选可用节点: kube-scheduler会根据Pod的资源需求和约束条件(例如Pod需要的特定节点标签)筛选出可用的Node节点。它会从所有注册到集群中的Node节点中选择符合条件的节点。
  • 计算分值: kube-scheduler会为每个可用的节点计算一个分值,以决定哪个节点是最合适的。分值的计算方式可以通过调度算法来指定,例如默认的算法是将节点资源利用率和距离Pod的网络延迟等因素纳入考虑。
  • 选择节点: kube-scheduler会选择分值最高的节点作为最终的调度目标,并将Pod绑定到该节点上。如果有多个节点得分相等,kube-scheduler会随机选择一个节点。
  • 更新API Server: kube-scheduler会更新API Server上的Pod对象,将选定的Node节点信息写入Pod对象的spec字段中,然后通知Kubelet将Pod绑定到该节点上并启动容器
  1. kube-scheduler调度器内部流转过程

在这里插入图片描述

  1. Scheduler通过注册client-go的informer handler方法监听api-server的pod和node变更事件,获取pod和node信息缓存到Informer中
  2. 通过Informer的handler将事件更新到ActiveQ(ActiveQ、UnschedulableQ、PodBackoffQ为三个Scheduling队列,ActiveQ是一个维护着Pod优先级的堆结构,调度器在调度循环中每次从堆中取出优先级最高的Pod进行调度)
  3. 调度循环通过NextPod方法从ActiveQ中取出待调度队列
  4. 使用调度算法针对Node和Pod进行匹配和打分确定调度目标节点
  5. 如果调度器出错或失败,会调用shed.Error将Pod写入UnschedulableQ里
  6. 当不可调度时间超过backoff的时间,Pod会由Unschedulable转换到Podbackoff,也就是说Pod信息会写入到PodbackoffQ里
  7. Client-go向Api Server发送一个bind请求,实现异步绑定
  1. 为节点计算分值
    节点分值计算是通过调度器算法实现的,而不是固定的。默认情况下,kube-scheduler采用的是DefaultPreemption算法,其计算分值的方式包括以下几个方面:
  • 节点的资源利用率kube-scheduler会考虑每个节点的CPU和内存资源利用率,将其纳入节点分值的计算中。资源利用率越低的节点得分越高。
  • 节点上的Pod数目kube-scheduler会考虑每个节点上已经存在的Pod数目,将其纳入节点分值的计算中。如果节点上已经有大量的Pod,新的Pod可能会导致资源竞争和拥堵,因此节点得分会相应降低。
  • Pod与节点的亲和性和互斥性kube-scheduler会考虑Pod与节点的亲和性和互斥性,将其纳入节点分值的计算中。如果Pod与节点存在亲和性,例如Pod需要特定的节点标签或节点与Pod在同一区域,节点得分会相应提高。如果Pod与节点存在互斥性,例如Pod不能与其他特定的Pod共存于同一节点,节点得分会相应降低。
  • 节点之间的网络延迟kube-scheduler会考虑节点之间的网络延迟,将其纳入节点分值的计算中。如果节点之间的网络延迟较低,节点得分会相应提高。
  • Pod的优先级kube-scheduler会考虑Pod的优先级,将其纳入节点分值的计算中。如果Pod具有高优先级,例如是关键业务的部分,节点得分会相应提高。
    这些因素的相对权重可以通过kube-scheduler的命令行参数或者调度器配置文件进行调整。需要注意的是,kube-scheduler的算法是可扩展的,可以根据需要编写自定义的调度算法来计算节点分值。
  1. 调度策略
  • 默认调度策略(DefaultPreemption):默认调度策略是kube-scheduler的默认策略,其基本原则是为Pod选择一个未满足需求的最小代价节点。如果无法找到这样的节点,就会考虑使用预选,即将一些已经调度的Pod驱逐出去来为新的Pod腾出空间。
  • 带优先级的调度策略(Priority):带优先级的调度策略基于Pod的优先级对节点进行排序,优先选择优先级高的Pod。该策略可以通过设置Pod的PriorityClass来实现。
  • 节点亲和性调度策略(NodeAffinity):节点亲和性调度策略基于节点标签或其他条件,选择与Pod需要的条件相匹配的节点。这可以通过在Pod定义中使用NodeAffinity配置实现。
  • Pod 亲和性调度策略(PodAffinity):Pod亲和性调度策略根据Pod的标签和其他条件,选择与Pod相似的其他Pod所在的节点。这可以通过在Pod定义中使用PodAffinity配置实现。
  • Pod 互斥性调度策略(PodAntiAffinity):Pod互斥性调度策略选择与Pod不相似的其他Pod所在的节点,以避免同一节点上运行相似的Pod。这可以通过在Pod定义中使用PodAntiAffinity配置实现。
  • 资源限制调度策略(ResourceLimits):资源限制调度策略选择可用资源最多的节点,以满足Pod的资源需求。这可以通过在Pod定义中使用ResourceLimits配置实现。

http://www.ppmy.cn/news/1524797.html

相关文章

基于大数据爬虫的高校网络舆情管控可视化大屏分析系统 8ov8c

目录 技术栈和环境说明具体实现截图预期达到的目标系统设计详细视频演示技术路线解决的思路性能/安全/负载方面可行性分析论证python-flask核心代码部分展示python-django核心代码部分展示研究方法感恩大学老师和同学源码获取 技术栈和环境说明 本系统以Python开发语言开发&am…

Python计算机视觉编程——第8章 图像内容分类

1 K邻近分类法 该算法将要分类的对象与训练集中已知类标记的所有对象进行对比,并由k近邻对指派到哪个类进行投票。该方法的弊端是:与k-means聚类算法一样,需要预先设定k值,k值得选择会影响分类得性能,而且这种方法要求…

AI教你学Python 第1天:Python简介与环境配置

大家好,我是凡人。 为啥要推出这个专栏呢,是因为大模型开发肯定离不开代码,那python可以说是现在流传最广,也非常吃香的语言,所以学Python没错的,所有文章内容全部来自于训练后的大模型生成。 第1天&#…

2024/9/6黑马头条跟学笔记(四)

D4内容介绍 阿里三方安全审核 分布式主键 异步调用 feign 熔断降级 1.自媒体文章自动审核 1.1审核流程 查文章——调接口文本审核——minio下载图片图片审核——审核通过保存文章——发布 草稿1,失败2,人工3,发布9 1.2接口获取 注册阿…

【C++二分查找】2517. 礼盒的最大甜蜜度

本文涉及的基础知识点 C二分查找 贪心(决策包容性) LeetCode 2517. 礼盒的最大甜蜜度 给你一个正整数数组 price ,其中 price[i] 表示第 i 类糖果的价格,另给你一个正整数 k 。 商店组合 k 类 不同 糖果打包成礼盒出售。礼盒的 甜蜜度 是礼…

Leetcode面试经典150题-141.环形链表

题目比较简单,重点是理解思想 解法都在代码里,不懂就留言或者私信 /*** Definition for singly-linked list.* class ListNode {* int val;* ListNode next;* ListNode(int x) {* val x;* next null;* }* }*/ public…

克雷格·费德里吉谈Apple Intelligence保密技术背后的挑战

苹果必须实现克雷格-费德里吉所说的突破,这样 Apple Intelligence公司才能在云中使用大型语言模型,同时还能保护用户隐私,苹果是这样做的。在"It’s Glowtime"活动中,苹果公司谈到了私有云计算作为保护用户隐私的方式。…

高级算法设计与分析 学习笔记5 红黑树

定义: 根节点必黑,红节点孩子必黑,叶子节点(外部节点,null的那种)也是黑,每条路的黑节点数量一致。 首先看各个节点的平衡值,从根节点开始算,哪个最后超过1就是从这里开始…

【Unity新闻】Unity将取消Runtime费用

兜兜转转又回来了,一大早就看到Unity发布新闻,将取消Runtime费用,但同时也将提高各级付费账号的年费。这是新任CEO Matt上任后的价格调整策略。 非常不错的一点是: 当 Unity 6 在今年晚些时候发布时,使用 Unity Pers…

问:有一种Java语法叫注解,一起来扒一扒~

在Java编程语言中,注解(Annotation)和元注解(Meta-Annotation)为开发者提供了丰富的机制来嵌入元数据,从而增强代码的可读性、可维护性,并允许编译器或运行时环境进行特定的处理。 一、注解&am…

大型语言模型:通过代码生成、调试和 CI/CD 集成改变软件开发的游戏规则

借助 AI,软件开发领域正在经历一个突破性阶段,不断集成最先进的大型语言模型,如 GPT-4 和 Claude Opus。这些模型超越了传统开发人员工具的作用,直接帮助开发人员将口头指令转换为跨各种编程语言的可执行代码,从而加快…

深度学习的零碎知识点

显卡内存 什么是显卡内存 简单来说就是,Windows 会在物理显存/「专用 GPU 内存」不够用或只有集成显卡的情况下,将物理内存 RAM 当作 GPU 的虚拟显存/「共享 GPU 内存」来使用。 什么是 Windows「共享 GPU 内存」,它与 VRAM 有什么不同 (s…

【学习笔记】SSL密码套件之哈希

本篇将介绍TLS/SSL密码套件中常用的哈希算法,包括Poly1305、SHA384、SHA256、SHA、MD5 以上的哈希算法将作为 MAC 使用 MAC - Message Authentication Code 为批量数据提供了完整性(Integrity)以及真实性(Authentication&#xf…

yolo学习 (一) 安装yolov8及训练

随便搞个python环境,直接装或者anaconda都行,python版本最低3.8以上 一、安装yolov8 (cpu版本) pip install ultralytics yolov8安装版本比较省事,不过这里默认装的是CPU版本 import torch print(torch.__version_…

前端 + 接口请求实现 vue 动态路由

前端 接口请求实现 vue 动态路由 在 Vue 应用中,通过前端结合后端接口请求来实现动态路由是一种常见且有效的权限控制方案。这种方法允许前端根据用户的角色和权限,动态生成和加载路由,而不是在应用启动时就固定所有的路由配置。 实现原理…

【springboot】整合spring security 和 JWT

目录 1. 整合spring security 1. 导入依赖 2. 配置类 3. 实体类实现UserDetails接口 4. 业务逻辑实现类实现UserDetailsService接口 5. 控制类实现登录功能 6. 测试登录功能 2. 分析源码 1. UsernamePasswordAuthenticationToken 2. A…

windows JOB作业类的处理

windows JOB作业类的处理 windows JOB作业类的处理 文章目录 windows JOB作业类的处理 # windows JOB作业类的处理 /* moduel Job.h Notices: */#pragma once #include <malloc.h> //for _alloca; class CJob { private:HANDLE m_hJob; public:CJob(HANDLE hJob NULL);…

论文翻译:USENIX-2021 Extracting Training Data from Large Language Models

Extracting Training Data from Large Language Models 从大型语言模型中提取训练数据 https://www.usenix.org/system/files/sec21-carlini-extracting.pdf 文章目录 从大型语言模型中提取训练数据摘要1 引言 摘要 现在&#xff0c;发布在私有数据集上训练的大型&#xff…

828华为云征文|基于华为云Flexus云服务器X部署Minio服务

文章目录 ❀前言❀Minio简介❀部署环境准备❀yum环境配置❀安装docker❀获取镜像❀创建挂载目录❀启动容器❀查看容器状态❀安全组开放❀浏览器访问❀总结 ❀前言 大家好&#xff0c;我是早九晚十二。 近期华为云推出了最新的华为云Flexus云服务器X&#xff0c;这款云主机在算…

windows 显示进程地址空间

windows 显示进程地址空间 windows 显示进程地址空间 文章目录 windows 显示进程地址空间显示进程地址空间 显示进程地址空间 /* 3-ProcessInfo.cpp 显示进程地址空间 */#include "..\\CommonFiles\\CmnHdr.h" #include "..\\CommonFiles\\Toolhelp.h"#i…