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

k8s 进阶实战笔记 | Scheduler 调度策略总结

文章目录

  • Scheduler 调度策略总结
    • 调度原理和过程
    • 调度策略
      • nodeSelect
      • 亲和性和反亲和性
      • NodeAffinify亲和验证
      • PodAffinity 亲和验证
      • PodAntiAffinity 反亲和验证
      • 污点与容忍
      • 跳过 Scheduler 调度策略
    • 调度策略场景总结

Scheduler 调度策略总结

调度原理和过程

Scheduler

一直监听着 api-server,如果获取到Pod.Spec.NodeName为空,会对每一个pod创建一个binding,表示放在哪一个节点上运行

把 pod 按照预设的调度策略分配到集群的节点上

  • 公平
  • 资源高效利用
  • 效率
  • 灵活

调度过程

  1. 预选(predicate

过滤步满足条件的节点

  • PodFitsResources :节点上剩余的资源是否大于pod 请求的资源

  • PodFitsHost :如果pod 指定了NodeName,检查节点名称是否和NodeName匹配

  • PodFitsHostPorts :节点上已经使用的port是否和pod申请的port冲突

  • PodselectorMatches :过滤掉和pod指定的 label 不匹配的节点

  • NoDiskConflict :已经mount的volume和pod指定的volume不冲突,除非它们都是只读

  1. 优选(priority

对节点按照优先级排序

  1. 选择出最优的节点
  2. 如果预选的时候没有合适的节点,pod 会一直处于 pending状态,并且会不断重试调度,直到有调度结果

调度策略

nodeSelect

  • 最简单的调度形式:节点选择约束,将 pod 调度在拥有你指定的标签的节点上

示例

一个简单的nginx编排文件如下

apiVersion: apps/v1
kind: Deployment
metadata:name: nginxnamespace: defaultlabels:app: nginx
spec:selector:matchLabels:app: nginxreplicas: 3template:metadata:labels:app: nginxspec:containers:- name: nginximage: docker.m.daocloud.io/nginximagePullPolicy: IfNotPresent

不进行特殊调度设置

kubectl apply -f nginx-demo.yaml

在这里插入图片描述

给节点设置一个独一无二的标签信息

# 查看节点标签信息
kubectl get node --show-labels
# 给节点新增标签信息(kubectl label nodes <NodeName> key=value)
kubectl label nodes k8s-node01 nginx=true
# 取消节点的标签信息
kubectl label nodes k8s-node01 nginx-

在这里插入图片描述

**加上调度策略nodeSelect **

apiVersion: apps/v1
kind: Deployment
metadata:name: nginxnamespace: defaultlabels:app: nginx
spec:selector:matchLabels:app: nginxreplicas: 3template:metadata:labels:app: nginxspec:nodeSelector:app: nginxcontainers:- name: nginximage: docker.m.daocloud.io/nginximagePullPolicy: IfNotPresent

查看效果

在这里插入图片描述

亲和性和反亲和性

  • 相比之下,亲和性和反亲和性的表达能力更强
  • nodeSelector 只能选择所有固定标签的节点

requiredDuringSchedulingIgnoredDuringExecution

调度器只有在规则被满足的时候才能执行调度

preferredDuringSchedulingIgnoredDuringExecution

调度器会尝试寻找满足对应规则的节点,如果找不到,调度会在其他节点调度这个 pod

节点亲和性

NodeAffinity

  • “软需求”:调度器在无法找到匹配节点时候仍然会调度 pod
  • “硬需求”:如果没有节点满足需求,则不会被调度,一直处于 pending 状态

Pod亲和性

PodAffinity

  • pod可以和哪些pod部署在同一个拓扑中

Pod互斥性

PodAntiAffinity

  • pod不和哪些pod部署在同一个拓扑中

调度策略

调度策略匹配标签操作符拓扑支持调度目标
nodeAffinitynode节点In, NotIn,Exists,DoesNotExist, Gt,Lt指定主机
podAffinitypodIn, NotIn,Exists,DoesNotExistpod与指定pod一个拓扑域
PodAntiAffinitypodIn, NotIn,Exists,DoesNotExistpod与指定pod不在一个拓扑域

操作符

  • In:label 的值在某个列表中
  • NotIn:label 的值不在某个列表中
  • Gt:label 的值大于某个值
  • Lt:label 的值小于某个值
  • Exists:某个 label 存在
  • DoesNotExist:某个 label 不存在

NodeAffinify亲和验证

标准yaml文件

###第一个
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx1namespace: defaultlabels:app: nginx1
spec:selector:matchLabels:app: nginx1replicas: 3template:metadata:labels:app: nginx1spec:containers:- name: nginx1image: docker.m.daocloud.io/nginximagePullPolicy: IfNotPresent###第二个
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx2namespace: defaultlabels:app: nginx2
spec:selector:matchLabels:app: nginx2replicas: 3template:metadata:labels:app: nginx2spec:containers:- name: nginx2image: docker.m.daocloud.io/nginximagePullPolicy: IfNotPresent

NodeAffinify验证

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx1namespace: defaultlabels:app: nginx1
spec:selector:matchLabels:app: nginx1replicas: 3template:metadata:labels:app: nginx1spec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- k8s-node03containers:- name: nginx1image: docker.m.daocloud.io/nginximagePullPolicy: IfNotPresent

在这里插入图片描述

调度结果

在这里插入图片描述

硬策略不符合要求的时候的调度结果

在这里插入图片描述

如果是软策略

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx1namespace: defaultlabels:app: nginx1
spec:selector:matchLabels:app: nginx1replicas: 3template:metadata:labels:app: nginx1spec:affinity:nodeAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 1preference:matchExpressions:- key: kubernetes.io/hostnameoperator: Invalues:- k8s-node04containers:- name: nginx1image: docker.m.daocloud.io/nginximagePullPolicy: IfNotPresent

在这里插入图片描述

PodAffinity 亲和验证

nginx2的运行情况
在这里插入图片描述

看下nginx1的硬策略

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx1namespace: defaultlabels:app: nginx1
spec:selector:matchLabels:app: nginx1replicas: 3template:metadata:labels:app: nginx1spec:affinity:podAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: appoperator: Invalues:- nginx2topologyKey: kubernetes.io/hostnamecontainers:- name: nginx1image: docker.m.daocloud.io/nginximagePullPolicy: IfNotPresent

调度结果

在这里插入图片描述

PodAntiAffinity 反亲和验证

nginx2的运行情况

在这里插入图片描述

nginx1

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx1namespace: defaultlabels:app: nginx1
spec:selector:matchLabels:app: nginx1replicas: 3template:metadata:labels:app: nginx1spec:affinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: appoperator: Invalues:- nginx2topologyKey: kubernetes.io/hostnamecontainers:- name: nginx1image: docker.m.daocloud.io/nginximagePullPolicy: IfNotPresent

调度结果

在这里插入图片描述

污点与容忍

  • 污点:taints

  • 容忍:tolerations

  • 如果一个节点标记的有污点,如果对pod不进行标识为可以容忍,否则该节点不可调度pod

  • 污点组成:key=value:effect

effect:污点的作用
- NoSchedule :表示 k8s 将不会将 Pod 调度到具有该污点的 Node 上
- PreferNoSchedule :表示 k8s 将 尽量避免 将 Pod 调度到具有该污点的 Node 上
- NoExecute :表示 k8s 将不会将 Pod 调度到具有该污点的 Node 上,同时会将 Node 上已经存在的 Pod 驱逐出去
  • 基本操作
### 查看节点污点
kubectl describe nodes | grep -P "Name:|Taints"
### 设置污点
kubectl taint nodes <NodeName> key=value:effect
### 删除污点
kubectl taint nodes <NodeName> key=value:effect-
  • 验证
### 设置一个污点,看是否符合预期,多开一个窗口观察
kubectl taint nodes k8s-node03  app=nginx:NoExecute

在这里插入图片描述

在这里插入图片描述

设置容忍度再看下调度结果

apiVersion: apps/v1
kind: Deployment
metadata:name: nginx1namespace: defaultlabels:app: nginx1
spec:selector:matchLabels:app: nginx1replicas: 3template:metadata:labels:app: nginx1spec:tolerations:- key: "app"operator: "Exists"effect: "NoExecute"containers:- name: nginx1image: docker.m.daocloud.io/nginximagePullPolicy: IfNotPresent

在这里插入图片描述

tolerations 属性的写法

  • key、value、effect 与 Node 的 Taint 设置需保持一致
  • operator=Exists,value可以省略
  • operator=Equal,key与value之间就是等于的关系,不能省略
  • 不指定operator,则默认就是Equal

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

跳过 Scheduler 调度策略

  • 将 pod 直接调度到指定的Node节点上
###第一个
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx1namespace: defaultlabels:app: nginx1
spec:selector:matchLabels:app: nginx1replicas: 3template:metadata:labels:app: nginx1spec:nodeName: k8s-node01containers:- name: nginx1image: docker.m.daocloud.io/nginximagePullPolicy: IfNotPresent

在这里插入图片描述

调度策略场景总结

调度策略场景说明
nodeName调度固定节点,用于验证特定节点数据、故障复现等
nodeSelect调度到拥有特定标签的节点,特殊部门、特殊业务线、测试等
podAffinity使pod处于同一个拓扑域,用于上下游应用存在大量数据交互的场景
podAntiAffinity使pod不处于同一个拓扑域,多个计算型应用是不适合调度同一台节点
nodeAffinity指定调度到指定的节点,核心应用必须调度到核心节点
nodeAntiAffinity指定不调度到指定的节点,核心节点不能被普通应用使用
taints污点节点不允许被调度pod,比如master节点,GPU高计算性能节点等
tolerations配置了才可以调度到taints节点

相关文章:

k8s 进阶实战笔记 | Scheduler 调度策略总结

文章目录 Scheduler 调度策略总结调度原理和过程调度策略nodeSelect亲和性和反亲和性NodeAffinify亲和验证PodAffinity 亲和验证PodAntiAffinity 反亲和验证污点与容忍跳过 Scheduler 调度策略 调度策略场景总结 Scheduler 调度策略总结 调度原理和过程 Scheduler 一直监听着…...

微服务-微服务Spring-cloud-open-feign

1. LoadBalancerRestTemplate的缺陷 LoadBalancerRestTemplate进行微服务调用 BeanLoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}//调用方式String url "http://mall-order/order/findOrderByUserId/"id;R result restTemplate.…...

分类预测 | Matlab实现DT决策树多特征分类预测

分类预测 | Matlab实现DT决策树多特征分类预测 目录 分类预测 | Matlab实现DT决策树多特征分类预测分类效果基本描述程序设计参考资料分类效果...

随机点名--好玩哦

大屏滚动&#xff0c;随机点名&#xff0c;可刺激哦 想屏幕名字滚动得快一点&#xff0c;sleep时间就小一点 效果图 代码 #!/bin/bash namefile"/opt/name.txt" linenum$(sed -n $ $namefile) while : docleartmp$(sed -n "$[RANDOM%linenum1]p" $namefi…...

Linux下的进程操作

进程概念 ps -elf&#xff1a;查看操作系统的所有进程&#xff08;Linux命令&#xff09; ctrl z&#xff1a;把进程切换到后台 crtl c&#xff1a;结束进程 fg&#xff1a;把进程切换到前台 获取进程进程号和父进程号 函数原型&#xff1a; pid_t getpid(void); //pid_t…...

uniapp scroll-view用法[下拉刷新,触底事件等等...](4)

前言:可滚动视图区域。用于区域滚动 话不多说 直接上官网属性 官网示例 讲一下常用的几个 scroll 滚动时触发 scrolltoupper 滚动到顶部或左边&#xff0c;会触发 scrolltoupper 事件 scrolltolower 滚动到底部或右边&#xff0c;会触发 scrolltolower 事件 1.纵向滚动…...

聊聊大模型 RAG 探索之路的血泪史,一周出Demo,半年用不好

大家好&#xff0c;今天我们来继续看看 RAG 落地的一些有趣的事儿&#xff0c;从技术社群早上的讨论开始&#xff0c;喜欢技术交流的可以文末加入我们 一、从一周出Demo、半年用不好说起 最近读了读2024-傅盛开年AI大课&#xff0c;其中有讲到RAG环节&#xff0c;三张片子比较…...

UniApp 生命周期详解

UniApp 是一个使用 Vue.js 开发所有前端应用的框架&#xff0c;它可以编译到 iOS、Android、H5、小程序等多个平台。在 UniApp 中&#xff0c;生命周期是指应用或页面从创建到销毁的过程中所经历的一系列阶段。了解生命周期可以帮助开发者更好地管理资源、优化性能和提升用户体…...

用大模型训练实体机器人,谷歌推出机器人代理模型

谷歌DeepMind的研究人员推出了一款&#xff0c;通过视觉语言模型进行场景理解&#xff0c;并使用大语言模型来发出指令控制实体机器人的模型——AutoRT AutoRT可有效地推理自主权和安全性&#xff0c;并扩大实体机器人学习的数据收集规模。在实验中&#xff0c;AutoRT指导超过…...

HCIA-HarmonyOS设备开发认证-2.设备开发入门

目录 HarmonyOS设备开发学习路径一、开发项目与工具介绍1.1、设备开发环境准备1.2、设备开发流程1.3、Huawei DevEco Device Tool 二、OpenHarmony介绍OpenHarmony目录结构详细介绍applications目录详解base目录详解foundation目录详解 OpenHarmony接口分层介绍CMSIS 和 POSIX …...

2. HarmonyOS 应用开发 DevEco Studio 准备-2

2. HarmonyOS 应用开发 DevEco Studio 准备-2 首选项设置 中文设置 主题 字体 插件安装和使用 保存时操作 编辑器 工程树管理 代码树管理 标记 字符串可视化编辑 参考文档 常用快捷键 编辑 查找或替换 编译与运行 调试 其他 预览 页面预览 自定义组件预览 预览…...

【K8S 云原生】K8S的图形化工具——Rancher

目录 一、rancher概述 1、rancher概念 2、rancher和K8S的区别&#xff1a; 二、实验 1、安装部署 2、给集群添加监控&#xff1a; 3、创建命名空间&#xff1a; 4、创建deployment&#xff1a; 5、创建service&#xff1a; 6、创建ingress&#xff1a; 7、创建hpa 8…...

3. SQL 语言

重点&#xff1a; MySQL 的 三种安装方式&#xff1a;包安装&#xff0c;二进制安装&#xff0c;源码编译安装。 MySQL 的 基本使用 MySQL 多实例 DDLcreate alter drop DML insert update delete DQL select 3&#xff09;SQL 语言 3.1&#xff09;关系型数据库的常见…...

Android音量调节修改

前言 今日公司&#xff0c;安卓设备的音量显示不正常&#xff0c;让我来修复这个bug&#xff0c;现在已修复&#xff0c;做个博客&#xff0c;记录一下&#xff0c;以后碰到类似一下子就好解决。 Android音量调节相关 路径 frameworks\base\services\core\java\com\android…...

九州金榜|为什么鼓励式家庭教育?

鼓励式教育是一种积极的教育方式&#xff0c;它强调通过鼓励和肯定来激发孩子的积极性和自信心&#xff0c;帮助孩子更好地成长和发展。在家庭教育中&#xff0c;鼓励式教育同样具有重要意义。九州金榜家庭教育和大家一起探讨关于鼓励式教育的好处以及意义&#xff1a; 一.有助…...

Java复习系列之阶段二:数据库

1. 基础语法 1.1 DQL&#xff08;数据查询语句&#xff09; 执行顺序&#xff1a; from、join 、on、where、group by、having、select、distinct、order by、limit 1.2 DML&#xff08;数据修改语言&#xff09; 对数据表的增删改 insert into update set delete form 1.…...

TCP 异常断开连接【重点】

参考链接 https://xiaolincoding.com/network/3_tcp/tcp_down_and_crash.html https://xiaolincoding.com/network/3_tcp/tcp_unplug_the_network_cable.html#%E6%8B%94%E6%8E%89%E7%BD%91%E7%BA%BF%E5%90%8E-%E6%9C%89%E6%95%B0%E6%8D%AE%E4%BC%A0%E8%BE%93 关键词&#xff1a…...

Biotin-PEG4-TSA,生物素-PEG4-酪胺,用于标记蛋白质、核酸等生物分子

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;Biotin-PEG4-Tyramide&#xff0c;Biotin-PEG4-TSA&#xff0c;生物素-PEG4-酪胺&#xff0c;Biotin PEG4 Tyramide&#xff0c;Biotin PEG4 TSA 一、基本信息 产品简介&#xff1a;Biotin PEG4 Tyramide is compos…...

Python环境下基于机器学习的NASA涡轮风扇发动机剩余使用寿命RUL预测

本例所用的数据集为C-MAPSS数据集&#xff0c;C-MAPSS数据集是美国NASA发布的涡轮风扇发动机数据集&#xff0c;其中包含不同工作条件和故障模式下涡轮风扇发动机多源性能的退化数据&#xff0c;共有 4 个子数据集&#xff0c;每个子集又可分为训练集、 测试集和RUL标签。其中&…...

Vite学习指南

那本课程都适合哪些人群呢&#xff1f; 想要学习前端工程化&#xff0c;在新项目中投入使用 Vite 构建工具的朋友 Webpack 转战到 Vite 的小伙伴 前端架构师们&#xff0c;可以充实自己的工具箱 当然如果你没有项目相关开发经验&#xff0c;也可以从本课程中受益&#xff0…...

OpenSSL实战:手把手教你创建自签名根证书

1. 为什么需要自签名根证书&#xff1f; 想象一下你正在搭建一个内部测试环境&#xff0c;或者为公司的内部系统建立一套专属的安全通信机制。这时候你会发现&#xff0c;所有涉及HTTPS的环节都需要SSL/TLS证书。如果直接购买商业CA颁发的证书&#xff0c;不仅成本高&#xff…...

毕业季求生指南:用百考通AI重塑你的论文写作全流程

深夜的电脑屏幕前&#xff0c;面对空白的文档和堆积如山的文献&#xff0c;你是否感到无从下手&#xff1f;当查重率居高不下、导师的修改意见密密麻麻时&#xff0c;是否渴望一种更智能的解决方案&#xff1f;本文将为你揭示一个学术写作的新可能。 01 开题之困&#xff1a;从…...

ArcGIS核密度分析实战:基于上海市餐饮POI的商业热点识别

1. 核密度分析能帮你做什么&#xff1f; 如果你正在考虑开一家餐厅&#xff0c;或者想了解上海哪些区域餐饮业最发达&#xff0c;核密度分析就是你的好帮手。简单来说&#xff0c;这个技术可以把一堆分散的餐饮店位置数据&#xff0c;变成一张直观的"热度地图"。我去…...

Vivado IP封装实战:从源码到GUI配置的完整避坑指南(含EDF/DCP对比)

Vivado IP封装实战&#xff1a;从源码到GUI配置的完整避坑指南&#xff08;含EDF/DCP对比&#xff09; 在FPGA开发中&#xff0c;团队协作和代码共享是常见需求&#xff0c;但如何平衡代码保护与功能灵活性一直是开发者面临的难题。Vivado提供了多种模块封装方案&#xff0c;每…...

别再手动调了!Meshlab模型对齐的两种高效工作流与常见误区盘点

Meshlab模型对齐的高效策略与深度避坑指南 Meshlab作为开源三维模型处理工具&#xff0c;在学术研究和工业应用中扮演着重要角色。模型对齐作为其核心功能之一&#xff0c;直接影响后续的编辑、分析和可视化效果。许多用户虽然掌握了基础操作&#xff0c;但在面对复杂场景时仍会…...

如何快速上手OneMore:OneNote插件的安装与基础设置教程

如何快速上手OneMore&#xff1a;OneNote插件的安装与基础设置教程 【免费下载链接】OneMore A OneNote add-in with simple, yet powerful and useful features 项目地址: https://gitcode.com/gh_mirrors/on/OneMore 想要提升OneNote的使用效率吗&#xff1f;OneMore插…...

3MF格式终极指南:如何在Blender中轻松导入导出3D打印文件

3MF格式终极指南&#xff1a;如何在Blender中轻松导入导出3D打印文件 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 想要在Blender中处理3D打印文件却苦于格式转换&…...

深求·墨鉴(DeepSeek-OCR-2)完整指南:从卷轴入画到经纬重现

深求墨鉴&#xff08;DeepSeek-OCR-2&#xff09;完整指南&#xff1a;从卷轴入画到经纬重现 1. 引言&#xff1a;当科技遇见水墨美学 在日常工作中&#xff0c;我们经常需要将纸质文档转换为可编辑的电子文本。传统的OCR工具往往界面复杂、操作繁琐&#xff0c;让人望而却步…...

Qwen3-VL-4B Pro开箱体验:基于4B进阶模型,视觉理解与推理能力实测

Qwen3-VL-4B Pro开箱体验&#xff1a;基于4B进阶模型&#xff0c;视觉理解与推理能力实测 1. 项目概览&#xff1a;从2B到4B的视觉理解跃迁 Qwen3-VL-4B Pro是基于阿里通义千问Qwen/Qwen3-VL-4B-Instruct模型构建的视觉语言交互服务。相比广为人知的2B轻量版&#xff0c;这个…...

MogFace-large项目GitHub Actions CI/CD流水线构建教程

MogFace-large项目GitHub Actions CI/CD流水线构建教程 最近在折腾一个基于MogFace-large的人脸检测项目&#xff0c;每次手动测试、打包、部署&#xff0c;流程繁琐不说&#xff0c;还容易出错。团队协作时&#xff0c;代码合并后谁去跑测试、谁去更新镜像&#xff0c;也是个…...