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.采样 基于空间格网的点云抽稀 随机下采样 均匀体素下采样 非均匀体素下采样 二、邻近搜索 如何组织点云快速获取当前…...
C语言逗号表达式如何计算
在 C 语言中,逗号表达式是一种特殊的表达式形式,它由逗号分隔的多个表达式组成。 逗号表达式的计算过程如下:1、从左到右依次计算每个表达式的值。2、最终返回的值是最右边表达式的值。3、逗号表达式的求值过程是顺序执行的,不会…...
Ubuntu 本地部署 ChatGPT-Next-Web
Ubuntu 本地部署 ChatGPT-Next-Web 文章目录 Ubuntu 本地部署 ChatGPT-Next-Web ChatGPT-Next-Web 项目地址:https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web 本文主要演示如何在 Ubuntu 本地(默认是端口 3000)部署 ChatGPT-Next-Web&am…...
小程序商城搭建:快速入门指南
随着移动互联网的普及,小程序商城逐渐成为了商家们进行线上销售的重要渠道。如果你也想搭建一个小程序商城,那么本文将为你介绍如何使用乔拓云这一第三方小程序搭建平台来轻松搭建自己的小程序商城。 一、选择合适的第三方小程序搭建平台 在选择第三方小…...
c# windows10大小端试
测试代码: unsafe public void ceshi() {byte[] by BitConverter.GetBytes(0x12345678);Debug.WriteLine(" byte[0] 0x" by[0].ToString("x2"));Debug.WriteLine(" byte[1] 0x" by[1].ToString("x2"));Debug.WriteLi…...
【算法专题】动态规划之斐波那契数列模型
动态规划1.0 动态规划 - - - 斐波那契数列模型1. 第 N 个泰波那契数2. 三步问题3. 使用最小花费爬楼梯4. 解码方法 动态规划 - - - 斐波那契数列模型 1. 第 N 个泰波那契数 题目链接 -> Leetcode -1137. 第 N 个泰波那契数 Leetcode -1137. 第 N 个泰波那契数 题目&…...
K2P路由器刷OpenWrt官方最新版本固件OpenWrt 23.05.2方法 其他型号的智能路由器OpenWrt固件刷入方法也基本上适用
最近路由器在开机时总出问题,于是就那他来开刀,直接刷一个OpenWrt官方最新版本的固件, 刷其他第三方的固件总是觉得不安全, 而且很多第三方固件都带了些小工具,始终会有安全隐患, 而且占用内存空间太多,本来这个东西就没有多少内存,于是就干脆刷一个官方的原始固件(才6.3M, 相…...
AI大语言模型会带来了新一波人工智能浪潮?
以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮,可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…...
How to view the high-tech zone atmospheric project
How to view the high-tech zone atmospheric project 问题与建议登录界面没有验证码部分页面加载时间过长联动型下拉列表框点击反应迟钝页面缺乏导航没有采用https协议没有完成域名实名认证左侧菜单区不能收缩大屏区域功能图层不能完全隐藏部分页面表单控件没有文案提示其功能…...
sqlalchemy 中的缓存机制解释
SQLAlchemy 的缓存机制主要涉及两个层面:会话(Session)缓存和查询缓存。这两种缓存机制对于提升应用性能和数据一致性都非常重要。下面详细解释这两种缓存机制: 1. 会话(Session)缓存 会话缓存是 SQLAlch…...
网络安全B模块(笔记详解)- 漏洞扫描与利用
漏洞扫描与利用 1.通过Kali对服务器场景server2003以半开放式不进行ping的扫描方式并配合a,要求扫描信息输出格式为xml文件格式,从生成扫描结果获取局域网(例如172.16.101.0/24)中存活靶机,以xml格式向指定文件输出信息(使用工具Nmap,使用必须要使用的参数),并将该操…...
做网站上是外部连接怎么改/qq群排名优化
docker容器中的环境变量 docker可以为容器配置环境变量。配置的途径有两种: 在制作镜像时,通过ENV命令为镜像增加环境变量。在容器启动时使用该环境变量。在容器启动时候,通过参数配置环境变量,如果与镜像中有重复的环境变量&…...
给别人做网站收多少钱/惠州百度seo哪家好
Spring MVC属于SpringFrameWork的后续产品,它提供了构建 Web 应用程序的全功能 MVC 模块,与Struts2一样是一种优秀MVC框架,不同的是自Spring2.5引入了注解式controller及Spring 3以后的不断完善,使得采用Spring MVC框架开发结构清…...
男女做爰全过程的视频网站/网页制作软件手机版
Bert介绍 Bert模型是Google在2018年10月发布的语言表示模型,Bert在NLP领域横扫了11项任务的最优结果,可以说是现今最近NLP中最重要的突破。Bert模型的全称是Bidirectional Encoder Representations from Transformers,是通过训练Masked Lang…...
临淄网站建设/小程序怎么开发自己的小程序
格式化是很常见的数据恢复案例故障,如果被格式化的盘是有重要的文件,那么一定要注意马上停止往这个盘写入文件。然后用数据恢复软件扫描恢复里面的数据。具体的恢复方法可以看下文了解。 工具/软件:AuroraDataRecovery 步骤1:先百…...
政府网站制作方案/永久免费crm客户管理系统
一因为画图需要今天决定把一块带有集成显卡的技嘉主板装上一块七彩虹独立显卡。咋装上独立显卡之后发现无论显示器接哪一个显卡都无法显示。也就是显示器是黑屏状态,但电脑主机不报警。更换了一块全新显卡还是这个样子。解决办法。1、先拔了独显。2、显示器接集显&a…...
wordpress批量发布文章/百度指数查询官方下载
四 管理项目知识 1.Inputs 项目管理计划: 项目管理计划的任何组件都可用作本过程的输入 项目文件: 经验教训登记册 项目团队派工单 资源分解结构 相关方登记册 可交付成果: 可交付成果是在某一过程、阶段或项目完成时,必须产生的任何独特并可…...