k8s的集群调度
1、scheduler:负责调度资源,把pod调度到指定的node节点
(1)预算策略
(2)优先策略
2、List-watch
(1)在k8s集群中,通过List-watch的机制进行每个组件的协作,保持数据同步,每个组件之间的解耦(减少每个组件之间的关联性)
(2)kubectl配置文件,向APIserver发送命令,apiserver把命令发送到各个组件
①kubectl run xx——apiserver——controller manager——scheduler——kubelet
②创建成功之后,kubectl get/describe/ pod——保存etcd的数据库中
(3)List-watch会在每一步把监听的消息(APIserver:6443),每个组件(controller manager、scheduler、kubelet、etcd)都会监听apiserver的6443端口
4、调度的过程和策略
(1)scheduler是k8s集群的调度器,把pod分配到集群的节点
①公平:每个节点都能分配到资源
②资源高效利用:集群中的资源可以被最大化使用
③效率:调度的性能要好,能够尽快的完成大批量的pod的调度工作
④灵活:允许用户根据自己的需求,控制和改变调度的逻辑
(2)scheduler是一个单独运行的程序,启动之后就会一直监听apiserver,获取报文中的字段:spec.node name,创建pod时,会为每一个pod创建一个binding(表示该往哪个节点上部署)
(3)创建pod到节点时,有两个策略,先执行预算策略,再执行优先策略,这两步的操作都必须成功,否则立即返回报错,也就是,部署的node必须满足这两个策略
预算策略:predicate自带一些算法,选择node节点(scheduler自带的算法策略,不需要人工干预) | ||
podfitsresources | pod的适应资源:检测节点上的剩余资源,是否满足pod请求的资源(主要是CPU和内存) | |
podfitshost | pod适应主机:如果pod指定了一个node的name,指定节点后,来检测主机名是否存在,存在要和pod指定的名称相匹配,这才能调度过去 | |
podselectormatches | pod选择器匹配:创建pod的时候可以根据node节点的标签来进行匹配,查找指定的node节点上标签是否存在,存在的标签是否匹配 | |
nodiskconflict | 无磁盘冲突:确保已挂载的卷和pod的卷不发生冲突。如发生冲突,会重新选择一个节点部署,除非目录是只读目录,只读目录会直接覆盖 | |
如果预算策略无法满足,pod将始终处于pending状态,不断的重试调度,直到有节点满足条件为止 | ||
优先策略: | ||
leastrequestedpriority | 最低请求优先级:通过算法计算节点上的CPU和内存使用率,确定节点的权重,使用率越低的节点相应的权重越高,调度时会更倾向于使用率低的节点,实现资源合理的利用 | |
balanceresourceallocation | 平衡资源分配:CPU和内存的使用率,给节点赋予去昂走动,权重是CPU和内存的使用率接近,权重越高,和上面的leastrequestedpriority最低请求优先级一起使用 | |
imagelocalitypriority | 节点上是否己经有了要部署的镜像:镜像的总数成正比,满足的镜像数越多,权重越好,调度时优先级就越高 | |
通过预算选择可以部署的节点,再通过优先选择出最好的节点,以上的策略都是自动的,scheduler自带的算法,k8s集群自己来选择 |
5、指定节点和标签
(1)指定节点(不经过scheduler调度算法、强制匹配)
①spec参数设置:nodeName:node2
②指定了节点,在参数中设置了nodeName,指定了节点的名称,会跳过scheduler的调度策略,这个规则是强制匹配
(2)指定标签(经过scheduler调度算法)
* 只要是走调度算法,在不满足预算策略的情况下,所有pod都是pending
①spec参数设置:nodeSelector:node2
②查看所有节点的标签:kubectl get nodes --show-labels
③创建节点标签:kubectl label nodes master test1=a
④查看已经部署的服务选择的标签:kubectl get deployments.apps -o wide
⑤根据指定标签部署pod:
⑥指定节点标签部署pod,要经过scheduler的调度算法,如果节点不满足条件,pod会进入pending状态,直到节点满足条件为止
⑦修改标签值:kubectl label nodes node1 test=3
⑧删除标签值:kubectl label nodes node1 test-
6、亲和性
(1)节点亲和性
(2)pod亲和性
①软策略和硬策略
②软策略:多个软策略看权重,权重高,执行指定的软策略
③软硬策略结合:先满足硬策略,再满足软策略
(3)node节点的亲和性
preferredDuringSchedulingIgnoredDuringExecution:软策略 选择node节点是,声明了最好能部署在node1,软策略会尽量满足这个条件,不一定会完全部署在node1节点上 |
requiredDuringSchedulingIgnoredDuringExecution:硬策略 选择pod时,声明了node1,选择硬策略,必须满足硬策略的条件,必须部署在node1,强制性要求,根据节点的标签匹配 |
(4)pod的亲和性
preferredDuringSchedulingIgnoredDuringExecution:软策略 要求调度器将pod调度到其他pod的亲和性匹配的节点上,可以是,也可以不是,尽量满足,不是一定满足 |
requiredDuringSchedulingIgnoredDuringExecution:硬策略 要求调度器将pod调度到其他pod的亲和性匹配的节点上,必须是 |
(5)键值的运算关系
标签,都是根据标签来选择亲和性 | |
In | 在,选择的标签值在node节点上存在 |
Notin | 不在,选择label的值不在node节点上的 |
Gt | 大于,大于选择的标签值(只能比较整数值) |
Lt | 小于,小于选择的标签值(只能比较整数值) |
Exists | 存在,选择标签对象,值不考虑(不能使用value字段) |
DoseNotExist | 不存在,选择不具有指定标签的对象,值不考虑(不能使用value字段) |
(6)node节点的亲和性之硬策略
①In策略
②Notin策略(不能有标签为test1的节点)
③Gt策略
④Lt策略
⑤Exists策略
⑥DoseNotExist策略
(7)node的亲和性之软策略
(8)node的亲和性之多个软策略、看权重
(9)node的亲和性之软策略和硬策略结合
①第一种
②第二种
③第三种
④第四种
⑤第五种
⑥第六种
⑦第七种
7、pod的亲和性和反亲和性
(1)pod和node的亲和性
①拓扑域:k8s集群节点当中的一个组织结构,可以根据节点的物理关系或者逻辑关系进行划分,可以用来表示节点之间的空间关系,网络关系或者其他类型的关系
pod和node的亲和性 | |||
调度策略 | node的亲和性 | pod的亲和性 | pod的反亲和性 |
匹配标签 | 主机标签 | pod的标签 | pod的标签 |
操作符 | In NotIn Exists DoesNotExsit Gt Lt | In NotIn Exists DoesNotExsit | In NotIn Exists DoesNotExsit |
拓扑域 | 不支持 | 支持 | 支持 |
调度目标 | 指定主机 | pod和指定标签的pod部署在同一拓扑域 | pod和指定标签的pod部署在不同拓扑域 |
(2)pod的亲和性
①创建pod标签
②创建节点标签
③配置deployment
④第二种
⑤第三种
* 基于deployment创建的pod修改标签,不可以直接apply -f,要把前一个标签的资源对象删除,再创建新的deployment
⑥软策略:preferredDuringSchedulingIgnoredDuringExecution
(3)pod的反亲和性(使用较少,类似于亲和性的NotIn)
(4)总结
①pod的亲和性策略,在配置时,必须要加上拓扑域的关键字topologykey(指向的是节点标签)
②pod亲和性的策略分为硬策略和软策略
③pod亲和性的notin可以替代反亲和性
④pod亲和性的作用主要是为了把相关联的pod部署在同一节点(类似lnmp)
8、污点
(1)在进行部署的时候,如何考虑node节点:软硬策略、污点和容忍
①污点和容忍可以配合node的亲和性一起使用,污点是node调用机制,不是pod
被设为污点的节点,不会部署pod
②污点和亲和性相反,亲和性是尽量选择和一定选择,污点的节点一定不被选择?
(2)污点(taint)的类型
NoSchedule | k8s不会把pod调度到这个节点上 |
PreferNoSchedule | 此类型的污点,尽量避免把pod部署在改节点上,不是一定(master节点的污点一般就是PerferNoSchedule) |
NoExecute | 此类型的污点,k8s将会把该节点上的pod全部驱逐,而且也不会调度到这个节点 |
①基于控制器创建的pod,虽然被驱逐,会在其他节点重新部署 ②自主创建的pod会被直接杀死 |
(3)查看污点:kubectl describe nodes master | grep -i taints
(4)设置污点:kubectl taint node master key=1:NoSchedule
(5)删除污点:
①kubectl taint node node2 key:PreferNoSchedule-
(6)NoExecute(驱逐、慎重)
①NoExecute的使用场景:资源回收或节点维护
* 节点服务器需要维护的,服务器关机,节点上pod将会失效。在工作中,主要部署pod的方式是控制器部署、deployment部署最多。一旦节点设置为驱逐,控制器创建的pod会在其他节点重新部署,NoExecute主要用于:资源回收或节点维护 |
* 使用NoExecute,所有的pod都会被驱逐,所有的一切都会被驱逐,kube-proxy属于组件pod,依旧存在 |
* 不论创建方式是什么,都会被驱逐,系统集群组件不会被驱逐 |
9、容忍机制:表示可以部署pod在有污点的节点上
(1)配置容忍机制
①设置污点
②配置容忍
(2)NoExecute的容忍机制:设置时间限制
①NoExecute依然可以部署pod,但是有生命周期,pod会被销毁,生命周期结束后会驱逐一部分pod到其他节点
②NoExecute的容忍机制:该节点维护完毕,测试一下该节点的工作是否正常
(3)污点的容忍机制
①不指定节点标签key,指定污点类型effect
②指定节点标签key,不指定污点类型effect:所有节点上只要有key,都容忍
(4)总结
①指定key的值、节点的标签值,但是不指定污点的类型,那么所有节点上只要包含这个指定的标签名,可以容忍所有的污点
②不指定key的值,不匹配节点的标签,但是指定污点类型,容忍所有指定类型的污点
(5)node的亲和性、pod的亲和性和反亲和性、污点和容忍:作用:如何选择node节点部署pod,选择一个期望的节点部署pod
①多个master节点:kubectl taint node master节点名称 : node-role.kubernetes.io/master=:PreferNoSchedule尽量不往master节点上部署pod,但是不是一定的,防止资源浪费,自定义一个标签。 |
②业务维护: node2需要维护2小时,但是这个节点还有业务pod在运行,就需要把这个节点的污点设置为:noexecute,部署pod一般都是使用deployment部署,会在其他的节点重新部署,并不是被杀死,自主式的pod会被杀死。一旦节点恢复,一定要把污点删除 |
10、cordon和drain
(1)cordon:可以直接把节点标记为不可用状态
①设置cordon:kubectl cordon master node1
②取消cordon:kubectl uncordon master node1
(2)drain:把该节点下的pod全部转移到其他的node节点上运行
①一旦指定drain,被执行的节点不会变成不可调度状态
②会驱逐该节点上的所有pod
③kubectl drain node1 --ignore-daemonsets --delete-local-data --force
drain | 驱逐,标记node节点为不可调度,然后驱逐pod |
--ignore-daemonsets | 无视daemonset部署的pod,此类pod还在节点上 daemonset部署的一般是重要的后台运行的、系统pod,所以不动 |
--delete-local-data | 有本地挂载卷的pod会被强制杀死 |
--force | 强制释放不是控制器管理的pod(不是控制器管理的pod会被杀死) |
④删除drain:kubectl uncordon node1
相关文章:

k8s的集群调度
1、scheduler:负责调度资源,把pod调度到指定的node节点 (1)预算策略 (2)优先策略 2、List-watch (1)在k8s集群中,通过List-watch的机制进行每个组件的协作࿰…...
简单易懂的理解 PyTorch 中 Transformer 组件
目录 torch.nn子模块transformer详解 nn.Transformer Transformer 类描述 Transformer 类的功能和作用 Transformer 类的参数 forward 方法 参数 输出 示例代码 注意事项 nn.TransformerEncoder TransformerEncoder 类描述 TransformerEncoder 类的功能和作用 Tr…...

搭建Eureka服务注册中心
一、前言 我们在别的章节中已经详细讲解过eureka注册中心的作用,本节会简单讲解eureka作用,侧重注册中心的搭建。 Eureka作为服务注册中心可以进行服务注册和服务发现,注册在上面的服务可以到Eureka上进行服务实例的拉取,主要作用…...
【React】react-router-dom中的HashRouter和BrowserRouter实现原理
1. 前言 在之前整理BOM的五个对象时,提到: location.hash发生改变后,会触发hashchange事件,且history栈中会增加一条记录,但页面不会重新加载——实现HashRouter的关键history.pushState(state, , URL)执行后…...

生物信息学中的可重复性研究
科学就其本质而言,是累积渐进的。无论你是使用基于网络的还是基于命令行的工具,在进行研究时都应保证该研究可被其他研究人员重复。这有利于你的工作的累积与进展。在生物信息学领域,这意味着如下内容。 工作流应该有据可查。这可能包括在电脑…...
css-img图像同比缩小
1. HTML 中使图像按比例缩小 CSS 来控制图像的大小,并保持其宽高比 <!DOCTYPE html> <html> <head><style>.image-container {width: 300px; /* 设置容器宽度 */height: auto; /* 让高度自适应 */}.image-container img {width: 100%; /* …...

SpringBoot+Prometheus+Grafana搭建应用监控系统
1.应用监控系统介绍 SpringBoot的应用监控方案比较多,SpringBootPrometheusGrafana是比较常用的一种解决方案,主要的监控数据的处理逻辑如下: SpringBoot 的 actuator 提供了应用监控端点,可以对外暴露监控数据信息。Prometheu…...

QT c++和qml交互实例
文章目录 一、demo效果图二、c和qml交互的基本方式1、qml 调用 C 类对象2、C 类对象调用 qml3、qml 给 C 发送信号4、C 给 qml 发送信号 三、关键代码1、工程结构图2、c代码MainWindow.cppMainQuickView.cppStudentInfoView.cppStudentInfoModel.cpp 3、qml代码main.qmlMainQui…...

mysql基础-数据操作之增删改
目录 1.新增数据 1.1单条数据新增 1.2多条数据新增 1.3查询数据新增 2.更新 2.1单值更新 2.2多值更新 2.3批量更新 2.3.1 批量-单条件更新 2.3.2批量-多条件更新 2.4 插入或更新 2.5 联表更新 3.删除 本次分享一下数据库的DML操作语言。 操作表的数据结构…...
写字母(文件)
请编写函数,将大写字母写入文件中。 函数原型 void WriteLetter(FILE *f, int n);说明:参数 f 为文件指针,n 为字母数目(1 ≤ n ≤ 26)。函数将前 n 个大写英文字母写入 f 所指示的文件中。 裁判程序 #include <stdio.h> #include &…...

基于Jackson自定义json数据的对象转换器
1、问题说明 后端数据表定义的id主键是Long类型,一共有20多位。 前端在接收到后端返回的json数据时,Long类型会默认当做数值类型进行处理。但前端处理20多位的数值会造成精度丢失,于是导致前端查询数据出现问题。 测试前端Long类型的代码 …...
【Java】缓存击穿解决方案
文章目录 什么是SingleFlight?优化缺点优化策略 什么是SingleFlight? SingleFlight是go语言中sync包中的一个东西。它用于确保在并发环境下某个操作(例如,函数调用)即使被多个goroutine同时请求,也只会被执…...

【HarmonyOS】掌握 Stage 模型的核心概念与应用
从今天开始,博主将开设一门新的专栏用来讲解市面上比较热门的技术 “鸿蒙开发”,对于刚接触这项技术的小伙伴在学习鸿蒙开发之前,有必要先了解一下鸿蒙,从你的角度来讲,你认为什么是鸿蒙呢?它出现的意义又是…...

2024年甘肃省职业院校技能大赛 “信息安全管理与评估”赛项样题卷①
2024年甘肃省职业院校技能大赛 高职学生组电子与信息大类信息安全管理与评估赛项样题 第一阶段:第二阶段:模块二 网络安全事件响应、数字取证调查、应用程序安全第二阶段 网络安全事件响应第一部分 网络安全事件响应第二部分 数字取证调查第三部分 应用程…...

我的AI之旅开始了
知道重要,但是就是不动。 今天告诉自己,必须开始学习了。 用这篇博文作为1月份AI学习之旅的起跑点吧。 从此,无惧AI,无惧编程。 AI之路就在脚下。 AI,在我理解,就是让机器变得更加智能&#…...
Day25 235二叉搜索树的公共祖先 701二叉搜索树插入 450二叉搜索树删除
235 二叉搜索树的最近公共祖先 如果利用普通二叉树的方法,就是利用后序遍历回溯从低向上搜索,遇到左子树有p,右子树有q,那么当前结点就是最近公共祖先。本题是二叉搜索树,所以说是有序的,一定能够简化上面…...
android系列-init 挂载文件系统
1.init 挂载文件系统 //android10\system\core\init\main.cppint main(int argc, char** argv) {return FirstStageMain(argc, argv); } //android10\system\core\init\first_stage_init.cppint FirstStageMain(int argc, char** argv) {CHECKCALL(mount("tmpfs",…...

Spring 七种事务传播性介绍
作者:vivo 互联网服务器团队 - Zhou Shaobin 本文主要介绍了Spring事务传播性的相关知识。 Spring中定义了7种事务传播性: PROPAGATION_REQUIRED PROPAGATION_SUPPORTS PROPAGATION_MANDATORY PROPAGATION_REQUIRES_NEW PROPAGATION_NOT_SUPPORTED…...
Count the Colors ZOJ - 1610
题目链接 题意: 给定n个区间[ l, r ]和颜色c, 每次给[l, r]涂上c这个颜色. 后面的涂色会覆盖之前的涂色. 最后要求输出区间[0, 8000]中每种颜色及其出现的次数, 如果该颜色没有出现过则不输出. 思路:典型的线段树区间染色问题,一般这种题…...
MATLAB点云处理总目录
一、点云滤波 原始点云包含过多噪点和冗余点,滤波和采样往往是点云预处理的必要步骤 1.滤波 重复点去除 NAN或INF无效点去除 自定义半径滤波 2.采样 基于空间格网的点云抽稀 随机下采样 均匀体素下采样 非均匀体素下采样 二、邻近搜索 如何组织点云快速获取当前…...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

【配置 YOLOX 用于按目录分类的图片数据集】
现在的图标点选越来越多,如何一步解决,采用 YOLOX 目标检测模式则可以轻松解决 要在 YOLOX 中使用按目录分类的图片数据集(每个目录代表一个类别,目录下是该类别的所有图片),你需要进行以下配置步骤&#x…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...

Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权
摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题:安全。文章将详细阐述认证(Authentication) 与授权(Authorization的核心概念,对比传统 Session-Cookie 与现代 JWT(JS…...

图解JavaScript原型:原型链及其分析 | JavaScript图解
忽略该图的细节(如内存地址值没有用二进制) 以下是对该图进一步的理解和总结 1. JS 对象概念的辨析 对象是什么:保存在堆中一块区域,同时在栈中有一块区域保存其在堆中的地址(也就是我们通常说的该变量指向谁&…...