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

K8s 高级调度

文章目录

  • K8s 高级调度
    • CronJob
    • initContainer
    • Taint 和 Toleration
      • 污点(Taint)
      • 容忍(Toleration)
    • Affinity
      • NodeAffinity
      • PodAnffinity 和 PodAntiAffinity
    • 总结

K8s 高级调度

CronJob

在 k8s 中周期性运行计划任务,与 linux 中的 crontab 相同

注意点:CronJob 执行的时间是 controller-manager 的时间,所以一定要确保 controller-manager 时间是准确的,另外 cronjob

apiVersion: batch/v1
kind: CronJob
metadata:name: cron-job-test
spec:concurrencyPolicy: Allow # 并发调度策略:Allow 允许并发调度,Forbid:不允许并发执行,Replace:如果之前的任务还没执行完,就直接执行新的,放弃上一个任务failedJobsHistoryLimit: 1 # 保留多少个失败的任务successfulJobsHistoryLimit: 3 # 保留多少个成功的任务suspend: falsestartingDeadlineSeconds: 30 # 间隔多长时间检测失败的任务并重新执行,时间不能小于 10schedule: "* * * * *" # 调度策略jobTemplate:spec:template:spec:containers:- name: cron-jobimage: busybox:1.28imagePullPolicy: IfNotPresentcommand:- /bin/sh- -c- date; echo Hello from the Kubernetes clusterrestartPolicy: OnFailure

initContainer

在真正的容器启动之前,先启动 InitContainer,在初始化容器中完成真实容器所需的初始化操作,完成后再启动真实的容器。

相对于 postStart 来说,首先 InitController 能够保证一定在 EntryPoint 之前执行,而 postStart 不能,其次 postStart 更适合去执行一些命令操作,而 InitController 实际就是一个容器,可以在其他基础容器环境下执行更复杂的初始化功能。

# 在 pod 创建的模板中配置 initContainers 参数:
spec:initContainers:- image: nginximagePullPolicy: IfNotPresentcommand: ["sh", "-c", "echo 'inited;' >> ~/.init"]name: init-test

Taint 和 Toleration

k8s 集群中可能管理着非常庞大的服务器,这些服务器可能是各种各样不同类型的,比如机房、地理位置、配置等,有些是计算型节点,有些是存储型节点,此时我们希望能更好的将 pod 调度到与之需求更匹配的节点上。

此时就需要用到污点(Taint)和容忍(Toleration),这些配置都是 key: value 类型的。

官网地址

污点(Taint)

污点:是标注在节点上的,当我们在一个节点上打上污点以后,k8s 会认为尽量不要将 pod 调度到该节点上,除非该 pod 上面表示可以容忍该污点,且一个节点可以打多个污点,此时则需要 pod 容忍所有污点才会被调度该节点。

# 为节点打上污点
kubectl taint node k8s-master key=value:NoSchedule# 移除污点
kubectl taint node k8s-master key=value:NoSchedule-节点名称   污点的k,v  污点描述    - 删除# 查看污点
kubectl describe no k8s-master污点的描述:
NoSchedule:不能容忍的 pod 不能被调度到该节点,但是已经存在的节点不会被驱逐
NoExecute:不能容忍的节点会被立即清除,能容忍且没有配置 tolerationSeconds 属性,则可以一直运行,设置了 tolerationSeconds: 3600 属性,则该 pod 还能继续在该节点运行 3600 秒
PreferNoSchedule:尽量避免把Pod调度到具有该污点的Node上,除非没有其他节点可调度

容忍(Toleration)

容忍:是标注在 pod 上的,当 pod 被调度时,如果没有配置容忍,则该 pod 不会被调度到有污点的节点上,只有该 pod 上标注了满足某个节点的所有污点,则会被调度到这些节点

污点就是拒绝,容忍就是忽略,Node通过污点拒绝pod调度上去,Pod通过容忍忽略拒绝

# pod 的 spec 下面配置容忍
tolerations:
- key: "污点的 key"value: "污点的 value"offect: "NoSchedule" # 污点产生的影响operator: "Equal" # 表是 value 与污点的 value 要相等,也可以设置为 Exists 表示存在 key 即可,此时可以不用配置 value

Affinity

NodeAffinity

节点亲和力:进行 pod 调度时,优先调度到符合条件的亲和力节点上

  • requiredDuringSchedulingIgnoredDuringExecution: 调度器只有在规则被满足的时候才能执行调度。此功能类似于 nodeSelector, 但其语法表达能力更强。
  • preferredDuringSchedulingIgnoredDuringExecution: 调度器会尝试寻找满足对应规则的节点。如果找不到匹配的节点,调度器仍然会调度该 Pod。
apiVersion: v1
kind: Pod
metadata:name: with-node-affinity
spec:affinity: # 亲和力配置nodeAffinity: # 节点亲和力requiredDuringSchedulingIgnoredDuringExecution: # 节点必须匹配下方配置nodeSelectorTerms: # 选择器- matchExpressions: # 匹配表达式- key: topology.kubernetes.io/zone # 匹配 label 的 keyoperator: In # 匹配方式,只要匹配成功下方的一个 value 即可values:- antarctica-east1 # 匹配的 value- antarctica-west1 # 匹配的 valuepreferredDuringSchedulingIgnoredDuringExecution: # 节点尽量匹配下方配置- weight: 1 # 权重[1,100],按照匹配规则对所有节点累加权重,最终之和会加入优先级评分,优先级越高被调度的可能性越高preference:matchExpressions: # 匹配表达式- key: another-node-label-key # label 的 keyoperator: In # 匹配方式,满足一个即可values:- another-node-label-value # 匹配的 value
#      - weight: 20......containers:- name: with-node-affinityimage: pause:2.0

在这一示例中,所应用的规则如下:

  • 节点必须包含一个键名为 topology.kubernetes.io/zone 的标签, 并且该标签的取值必须antarctica-east1antarctica-west1
  • 节点最好具有一个键名为 another-node-label-key 且取值为 another-node-label-value 的标签。

你可以使用 operator 字段来为 Kubernetes 设置在解释规则时要使用的逻辑操作符。 你可以使用 InNotInExistsDoesNotExistGtLt 之一作为操作符。 详情可以参考官网

在这里插入图片描述

补充:如果你同时指定了 nodeSelectornodeAffinity两者必须都要满足, 才能将 Pod 调度到候选节点上。

如果你在与 nodeAffinity 类型关联的 nodeSelectorTerms 中指定多个条件, 只要其中一个 nodeSelectorTerms 满足(各个条件按逻辑或操作组合)的话,Pod 就可以被调度到节点上。

如果你在与 nodeSelectorTerms 中的条件相关联的单个 matchExpressions 字段中指定多个表达式, 则只有当所有表达式都满足(各表达式按逻辑与操作组合)时,Pod 才能被调度到节点上。

PodAnffinity 和 PodAntiAffinity

PodAnffinity :Pod 亲和力将与指定 pod 亲和力相匹配的 pod 部署在同一节点。

PodAntiAffinity: Pod 反亲和力 根据策略尽量部署或不部署到一块

Pod 的亲和性与反亲和性也有两种类型:

  • requiredDuringSchedulingIgnoredDuringExecution
  • preferredDuringSchedulingIgnoredDuringExecution
apiVersion: v1
kind: Pod
metadata:name: with-pod-affinity
spec:affinity: # 亲和力配置podAffinity: # pod 亲和力配置requiredDuringSchedulingIgnoredDuringExecution: # 当前 pod 必须匹配到对应条件 pod 所在的 node 上- labelSelector: # 标签选择器matchExpressions: # 匹配表达式- key: security # 匹配的 keyoperator: In # 匹配方式values: # 匹配其中的一个 value- S1topologyKey: topology.kubernetes.io/zonepodAntiAffinity: # pod 反亲和力配置preferredDuringSchedulingIgnoredDuringExecution: # 尽量不要将当前节点部署到匹配下列参数的 pod 所在的 node 上- weight: 100 # 权重podAffinityTerm: # pod 亲和力配置条件labelSelector: # 标签选择器matchExpressions: # 匹配表达式- key: security # 匹配的 keyoperator: In # 匹配的方式values:- S2 # 匹配的 valuetopologyKey: topology.kubernetes.io/zonecontainers:- name: with-pod-affinityimage: pause:2.0

总结

默认情况下,一个Pod在哪个Node节点上运行,是由Scheduler组件采用相应的算法计算出来的,这个过程是不受人工控制的。但是在实际使用中,这并不满足的需求,我们想控制某些Pod到达某些节点上,就要求了解kubernetes对Pod的调度规则,kubernetes提供了四大类调度方式:

**自动调度:**运行在哪个节点上完全由Scheduler经过一系列的算法计算得出
**定向调度:**NodeName、NodeSelector
**亲和性调度:**NodeAffinity、PodAffinity、PodAntiAffinity
**污点(容忍)调度:**Taints、Toleration

相关文章:

K8s 高级调度

文章目录 K8s 高级调度CronJobinitContainerTaint 和 Toleration污点(Taint)容忍(Toleration) AffinityNodeAffinityPodAnffinity 和 PodAntiAffinity 总结 K8s 高级调度 CronJob 在 k8s 中周期性运行计划任务,与 li…...

数据猿携手IDC Directions 2024:探索中国ICT市场新趋势

大数据产业创新服务媒体 ——聚焦数据 改变商业 近日,ICT业界人士、行业数字化专家,以及来自投资机构、协会、智库的近500位嘉宾聚首北京,参加了IDC Directions 2024:中国ICT市场趋势论坛(北京站)活动。活…...

前端开发工程师——ajax

express框架 终端输入 npm init --yes npm i express 请求报文/响应报文 // 1.引入express const express require(express);// 2.创建应用对象 const app express();// 3.创建路由规则 // request:是对请求报文的封装 // response:是对响应报文的封装 app.get(…...

uni-app项目在微信开发者工具打开时报错[ app.json 文件内容错误] app.json: 在项目根目录未找到 app.json

uni-app项目在微信开发者工具打开时报错[ app.json 文件内容错误] app.json: 在项目根目录未找到 app.json 出现这个问题是因为打开的文件地址不对,解决这个问题首先我们要查看是否有unpackage文件夹,如果有,项目直接指向unpackage\dist\dev\…...

最大连续1的个数(滑动窗口)

算法原理: 这道题大眼一看是关于翻转多少个0的问题,但是,如果你按照这种思维去做题,肯定不容易。所以我们要换一种思维去做,这种思维不是一下就能想到的,所以想不到也情有可原。 题目是:给定一…...

Spring Cloud 框架的应用详解

Spring Cloud 框架的应用详解 Spring Cloud 是一个基于 Spring Boot 的微服务架构开发工具,它提供了一系列工具用于快速构建分布式系统中的常见模式,如配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、选举、分布式会话和集群状态管理…...

C语言 数组——向函数传递数组

目录 把数组传给函数(Passing Arrays to Functions) 向函数传递一维数组 向函数传递二维数组 数组在学生成绩管理中的应用 例:计算每个学生的平均分 把数组传给函数(Passing Arrays to Functions) 向函数传递一维…...

数据链路层简单介绍

mac地址(物理地址) mac地址和ip地址,目的都是为了区分网络上的不同设备的,在最开始的时候,mac地址和ip地址是两伙人,独立各自提出的,ip地址是4个字节(早都不够用了)&…...

【软考】设计模式之装饰器模式

目录 1. 说明2. 应用场景3. 结构图4. 构成5. 适用性6. 优点7. 缺点8. java示例 1. 说明 1.动态地给一个对象添加一些额外的职责。2.Decorator Pattern。3.就增加功能而言,装饰器模式比生成子类更加灵活。4.一种在不改变现有对象结构的情况下,动态地给对…...

网络编程day6

IO多路复用的原理 IO多路复用是一种通过同时监视多个文件描述符(通常是套接字)来处理多个I/O操作的机制。它的原理可以简单概括为: 单线程处理多个I/O操作:传统的I/O模型中,每个I/O操作都需要一个线程或进程来处理。而…...

5.23总结

新增功能点 讨论 学生和老师均可发布话题,话题发布后,在该课程的用户可以在发布话题的课程中点击讨论参与课程的讨论,并可以进行评论,回复评论,点赞操作。每个话题发布时可添加多个图片文件,参加讨论的话…...

SQL Server基础学习笔记

一. 什么是SQL Server? SQL Server是由微软公司开发的关系型数据库管理系统(RDBMS),它提供了存储、检索、处理和分析数据的功能。作为一种强大的数据库解决方案,SQL Server被广泛应用于企业级应用程序、Web应用程序、…...

用Vuex存储可配置下载的ip地址(用XML进行ajax请求配置文件)

1.在public文件夹下创建一个名为Configuration的文件在创建一个Configuration.txt里面就放IP地址(这里的名字可以随便命名一定性的被人解读文件含义) 例如: http://172.171.208.1:80032.在store文件夹中创建一个名为 ajaxModule.js 的 Vuex …...

Spring: OncePerRequestFilter

文章目录 一、介绍二、使用 一、介绍 OncePerRequestFilter是Spring Boot中的一个过滤器抽象类,它在Spring Security中也得到了广泛的应用。这个过滤器抽象类的主要目的是确保在每次外部请求时只执行一次过滤操作,对于服务器内部之间的forward等请求&am…...

《Python编程从入门到实践》day37

# 昨日知识点回顾 制定规范、创建虚拟环境并激活,正在虚拟环境创建项目、数据库和应用程序 # 今日知识点学习 18.2.4 定义模型Entry # models.py from django.db import models# Create your models here. class Topic(models.Model):"""用户学习的…...

GBDT、XGBoost、LightGBM算法详解

文章目录 一、GBDT (Gradient Boosting Decision Tree) 梯度提升决策树1.1 回归树1.2 梯度提升树1.3 Shrinkage1.4 调参1.5 GBDT的适用范围1.6 优缺点 二、XGBoost (eXtreme Gradient Boosting)2.1 损失函数2.2 正则项2.3 打分函数计算2.4 分裂节点2.5 算法过程2.6 参数详解2.7…...

【考研数学】李林《880》是什么难度水平强化够用吗

880是公认的质量高,但要是刷的方法不对,心态直接炸裂!🙉 我24年二战就是用的 880660 的黄金搭档,143分逆袭上岸211!(为什么说逆袭呢,因为我23年一战数学83,妥妥的菜鸡&am…...

Flutter 中的 AnimatedAlign 小部件:全面指南

Flutter 中的 AnimatedAlign 小部件:全面指南 在 Flutter 中,动画是增强用户界面和提升用户体验的强大工具。AnimatedAlign 是 Flutter 提供的一个动画组件,它允许你动画化子组件的对齐方式。这在实现动态布局变化、响应式设计或交互式动画时…...

(Qt) 默认QtWidget应用包含什么?

文章目录 ⭐前言⭐创建🛠️选择一个模板🛠️Location🛠️构建系统🛠️Details🛠️Translation🛠️构建套件(Kit)🛠️汇总 ⭐项目⚒️概要⚒️构建步骤⚒️清除步骤 ⭐Code🔦untitled…...

测试环境KDE组件漏洞修复

yarn白名单方案 解决漏洞: 方案: 此方式主要使用iptables的功能,对yarn的resourceManager服务的8088端口进行访问ip限制,目的限制8088端口只允许集群内ip访问。 #分别在两台resourceManager节点执行以下步骤ssh kde-offline1 #安装iptables服务,并启动设置为开机自启 yum …...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

微信小程序云开发平台MySQL的连接方式

注:微信小程序云开发平台指的是腾讯云开发 先给结论:微信小程序云开发平台的MySQL,无法通过获取数据库连接信息的方式进行连接,连接只能通过云开发的SDK连接,具体要参考官方文档: 为什么? 因为…...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息,对客户进行统一管理,可以把所有客户信息录入系统,进行维护和统计功能。可通过文件的方式保存相关录入数据,对…...

【Linux手册】探秘系统世界:从用户交互到硬件底层的全链路工作之旅

目录 前言 操作系统与驱动程序 是什么,为什么 怎么做 system call 用户操作接口 总结 前言 日常生活中,我们在使用电子设备时,我们所输入执行的每一条指令最终大多都会作用到硬件上,比如下载一款软件最终会下载到硬盘上&am…...

沙箱虚拟化技术虚拟机容器之间的关系详解

问题 沙箱、虚拟化、容器三者分开一一介绍的话我知道他们各自都是什么东西,但是如果把三者放在一起,它们之间到底什么关系?又有什么联系呢?我不是很明白!!! 就比如说: 沙箱&#…...

xmind转换为markdown

文章目录 解锁思维导图新姿势:将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件(ZIP处理)2.解析JSON数据结构3:递归转换树形结构4:Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...

QT开发技术【ffmpeg + QAudioOutput】音乐播放器

一、 介绍 使用ffmpeg 4.2.2 在数字化浪潮席卷全球的当下,音视频内容犹如璀璨繁星,点亮了人们的生活与工作。从短视频平台上令人捧腹的搞笑视频,到在线课堂中知识渊博的专家授课,再到影视平台上扣人心弦的高清大片,音…...