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

kubernetes-Pod基于污点、容忍度、亲和性的多种调度策略(一)

Pod调度策略

  • 一.标签
    • 1.什么是标签
    • 2.给Pod资源打标签
    • 3.给Node节点打标签
    • 4.查看标签资源
  • 二.Node选择器
    • 1.nodeName(指定Pod调度到指定Node节点)
    • 2.nodeSelector(指定Pod调度到具有指定标签的Node节点)
  • 三.亲和性
    • 1.Node亲和性-nodeAffinity
    • 2.Pod亲和性-pod-Affinity
    • 3.Pod反亲和性-podAntiAffinity

一.标签

1.什么是标签

标签其实就一对 key/value ,被关联到对象上,比如Pod,标签的使用我们倾向于能够表示对象的特殊特点,就是一眼就看出了这个Pod是干什么的,标签可以用来划分特定的对象(比如版本,服务类型等),标签可以在创建一个对象的时候直接定义,也可以在后期随时修改,每一个对象可以拥有多个标签,但是,key值必须是唯一的。创建标签之后也可以方便我们对资源进行分组管理。如果对pod打标签,之后就可以使用标签来查看、删除指定的pod。
在k8s中,大部分资源都可以打标签。

2.给Pod资源打标签

创建一个Pod资源,定义标签 app:nginxenv:dev

vim test.podapiversion: v1
kind: Pod
metadata:name: testlabels:app: nginxenv: dev
spec: containers:- name: nginximage: nginxports:- containerPort: 80

执行YAML文件创建Pod

kubectl apply -f test.pod

给Pod打标签

kubectl label pod test release=v1

查看Pod标签内容

kubectl  get pod test --show-labels

3.给Node节点打标签

1.添加env标签针对node1节点

kubectl label nodes node1 env=dev

2.查看标签

kubectl get nodes node1 --show-labels

3.删除env节点标签针对node1节点

kubectl label nodes node1 env-

4.查看标签资源

1.查看默认空间下所有Pod资源标签内容

kubectl get pods --show-labels

2.查看kube-system命名空间下所有Pod资源标签内容:

kubectl get pods -n kube-system --show-labels

3.查看默认默认命名空间下,标签Key=app的Pod资源,不显示标签内容:

kubectl get pods -l app

4.查看默认默认命名空间下,标签Key=app的Pod资源,并显示标签内容:

kubectl get pods -L app

5.查看所有命名空间下,所有Pod资源的标签内容

kubectl get pods --all-namespaces --show-labels

6.查看所有Node节点标签

kubectl get nodes --show-labels

二.Node选择器

Node选择器是指,我们在创建Pod资源时指定该Pod资源运行在哪台Node节点上,默认schedule会根据资源随机调度到一个工作节点,但是我们可以通过nodeName、nodeSelector在指定运行到那台Node节点。

1.nodeName(指定Pod调度到指定Node节点)

指定Pod资源调度到指定的Node节点

vim nn-pod.yaml apiVersion: v1
kind: Pod
metadata:name: mypodlabels:app: nginxenv: dev
spec:nodeName: node1  # 运行在node1节点containers:- name: nginximage: nginximagePullPolicy: IfNotPresentports:- containerPort: 80

执行资源文件

kubectl apply -f nn-pod.yaml

可以看到Pod调度到了node1节点上

kubectl get pod -owide

2.nodeSelector(指定Pod调度到具有指定标签的Node节点)

指定Pod资源调度到具有哪些标签的节点上,需要注意 当使用nodeSelector 选择了多个标签,会调度到都满足此标签的节点上,并非满足其中一个标签!
如下配置,该Pod资源调度到具有 test=test节点上

vim ns-pod.yaml
apiVersion: v1
kind: Pod
metadata:name: mypodlabels:app: nginxenv: dev
spec:nodeSelector:test: testcontainers:- name: nginximage: nginximagePullPolicy: IfNotPresentports:- containerPort: 80

执行资源文件,我们查看Pod信息时会发现 当前Pod状态处于Pending 状态,就是带决策调度到那台节点上,因为我们并没有具有 test=test 的节点,下面我们给节点打标签

kubectl label  nodes node1 test=test

再次查看,Pod处于Running状态,并调度到了指定节点

kubectl get pods -o wide

三.亲和性

1.Node亲和性-nodeAffinity

K8S中的Node亲和性是指将Pod调度到特定的节点上的能力,通过使用Node亲和性,可以将Pod调度到具有特定硬件、软件或其他特定属性的节点上,以满足应用程序的需求。

我们可以使用 explain 帮助命令查看:

kubectl explain pod.spec.affinity.nodeAffinity
  • prefered软亲和性:表示有节点尽量满足这个位置定义的亲和性,并不是一个必须的条件。

  • require硬亲和性:表示必须有节点满足这个配置定义的亲和性,这是个硬性条件。

1.定义Node硬亲和性示例如下:

cat pod-require-affinity.yaml 
---
apiVersion: v1
kind: Pod
metadata:name: pod-nginxnamespace: defaultlabels:app: nginxenv: dev
spec:affinity:nodeAffinity:                                     # 定义Node亲和性requiredDuringSchedulingIgnoredDuringExecution: # 定义硬亲和性nodeSelectorTerms:                           - matchExpressions:                 # 根据标签选择Node- key: env                        # 定义标签key operator: In                    # IN:等于values:                         # 定义标签values(或者关系)- dev                           # 调度到具有env=dev 或者 env=test 的标签Node节点- testcontainers:- name: nginximage: nginximagePullPolicy: IfNotPresentports: - containerPort: 80 

执行后并不会创建Pod,因为没有满足标签的Node节点;给节点打标签 env=test后则会调度到此Node节点上

kubectl label node master1  env=test
kubectl get pods

2.定义Node软亲和性

cat pod-prefered-affinity.yaml 
---
apiVersion: v1
kind: Pod
metadata:name: pod-nginx-preferednamespace: defaultlabels:env: uatapp: nginx
spec:affinity:nodeAffinity:preferredDuringSchedulingIgnoredDuringExecution:   # 软亲和性- preference:matchExpressions:                           # 根据标签选择Node- key: zone                  operator: Invalues:- foo- barweight: 10                                    # 权重值containers:- name: pod-nginx-preferedimage: nginximagePullPolicy: IfNotPresentports:- containerPort: 80

执行后 会看到创建的Pod资源,即使没有满足标签的Node节点,也会找一台Node创建Pod资源

kubectl apply -f pod-prefered-affinity.yaml
kubectl get pods

权重值表示:weight 是相对权重,权重值越高,pod被调度到指定的node节点几率就越大

2.Pod亲和性-pod-Affinity

Pod亲和性是指将一组Pod调度到同一台物理主机或逻辑分区中的能力。这种亲和性可以用于确保相关的Pod在同一台主机上运行,以便它们可以更快地进行通信,或者为了提高可靠性,以便它们可以共享相同的存储或网络资源。
我们可以使用 explain 帮助命令查看:

kubectl explain pod.spec.affinity.podAffinity
  • prefered软亲和性:表示有节点尽量满足这个位置定义的亲和性,并不是一个必须的条件。

  • require硬亲和性:表示必须有节点满足这个配置定义的亲和性,这是个硬性条件。

1、定义两个Pod,第二个Pod调度到第一个Pod所在节点上。
第一个Pod资源清单如下:

cat pod-podaffinity-1.yaml 
---
apiVersion: v1
kind: Pod
metadata:name: pod-affinity-1namespace: defaultlabels:app: nginxenv: devspec:containers:- name: nginximage: nginx

第二个Pod资源清单如下

cat pod-podaffinity-2.yaml 
---
apiVersion: v1
kind: Pod
metadata:name: pod-affinity-2namespace: defaultlabels:app: nginxenv: dev
spec:affinity:podAffinity:requiredDuringSchedulingIgnoredDuringExecution:  # 硬亲和性- labelSelector: matchExpressions:- key: app             # 定义 Pod的keyoperator: In         # In = =values: - nginx              # 定义Pod的value,意思指调度到具有app=nginx标签的Pod所在节点topologyKey: kubernetes.io/hostname # 定义Node节点key,用于匹配节点判断是否在同一台服务器containers:- name: busyboximage: busybox:latestimagePullPolicy: IfNotPresentcommand: ["sh","-c","sleep 3600"]

按照顺序执行,第二个Pod会调度到第一个Pod所在Node节点上。

kubectl apply -f pod-podaffinity-1.yaml
kubectl apply -f pod-podaffinity-2.yaml

3.Pod反亲和性-podAntiAffinity

和上面Pod亲和性相反,两组Pod不会调度到同一台物理服务器上。

1、定义两个Pod,第二个Pod,禁止调度到第一个Pod所在节点。

第一个Pod资源清单:

cat pod-1.yaml 
---
apiVersion: v1
kind: Pod
metadata:name: pod-1namespace: defaultlabels:app: nginxenv: devspec:containers:- name: nginximage: nginx

第二个Pod资源清单:

cat pod-2.yaml 
---
apiVersion: v1
kind: Pod
metadata:name: pod-2namespace: defaultspec:affinity:podAntiAffinity:   # Pod反亲和性requiredDuringSchedulingIgnoredDuringExecution:- topologyKey: kubernetes.io/hostnamelabelSelector: # 标签匹配 app=nginxmatchExpressions:- key: appoperator: Invalues: - nginxcontainers:- name: nginximage: nginx

执行文件,两个Pod不会调度到同一个节点

kubectl apply -f pod-1.yaml
kubectl apply -f pod-2.yaml

相关文章:

kubernetes-Pod基于污点、容忍度、亲和性的多种调度策略(一)

Pod调度策略 一.标签1.什么是标签2.给Pod资源打标签3.给Node节点打标签4.查看标签资源 二.Node选择器1.nodeName(指定Pod调度到指定Node节点)2.nodeSelector(指定Pod调度到具有指定标签的Node节点) 三.亲和性1.Node亲和性-nodeAffinity2.Pod亲和性-pod-Affinity3.Pod反亲和性-p…...

Jenkins磁盘空间批量清理脚本

一、简介 Jenkins如果没有设置保留构建历史数,磁盘会随着使用次数增加而越来越满,于是需要批量清理一下。 二、清理脚本 找到Script Console 输入脚本,并点击执行,需要注意期望删除的构建历史编号(可以查看下面的效果…...

FFmpeg拉取RTSP流并定时生成10秒短视频

生成效果: 视频时长为10秒 生成格式为FLV 输出日志: 完整实现代码如下: 需要在Mac和终端先安装FFmpeg brew install ffmpeg CMake文件配置: cmake_minimum_required(VERSION 3.27) project(ffmpeg_open_stream) set(CMAKE_CXX_STANDARD 17)#头文件包目录 include_director…...

【boost_search搜索引擎】2.正排索引和倒排索引

首先,要制作搜索引擎,我们首先要了解,什么是正排索引,什么是倒排索引,这是一个搜索引擎的关键。 1.正排索引 正排索引,其实就是我们的每一个文档,对应一个文档id。 正如vector容器一样&#xf…...

Java与Go:字符串转IP

在本文中,我们将了解如何将简单的对比Java和Go是如何将字符串解析为IP地址。 Java 在Java中,将字符串转换为IP地址最无脑的一个方法: import java.net.InetAddress; import java.net.UnknownHostException;public class Main {public stat…...

SlerfTools:简化操作,激发Solana生态创新潜能

在区块链世界的快速演变中,Solana生态系统以其独特的高性能吸引了全球的目光。然而,随着生态系统的蓬勃发展,用户和开发者面临的挑战也日渐增多。正是在这样的背景下,一个名为SlerfTools的新星项目应运而生,它承诺将为Solana带来一场革命性的变革。 项目的诞生 SlerfTools并非…...

AI视频风格转换动漫风:Stable Diffusion+TemporalKit

话不多说,直接开干。 基本方法 首先通过 Temporal-Kit 这个插件提取视频中的关键帧图片,然后使用 Stable Diffusion WebUI 重绘关键帧图片,然后再使用 Temporal-Kit 处理转换后的关键帧图片,它会自动补充关键帧之间的图片&#…...

MongoDB 7.x 绑定多个IP(bindIp)和IP范围段(IP/24)

早上安装了最新版的MOngoDB7.0,仅仅是想测试一些功能,暂无复杂操作的想法。 于是在远程的机器上,安装启动,一切正常。 网上找了教程,绑定IP的做法基本是修改mongod.cfg文件中的bindIp属性: Windows系统的…...

ERP系统帮助芯片公司成本如何计算 ?

在高度信息化的今天,企业运营管理逐渐趋向数字化、精准化,ERP系统作为集成一体化的企业管理软件,正在越来越多地被应用于企业的成本管理中。对于芯片公司而言,ERP系统不仅能够帮助其实现物料、人力、财务等资源的全面管理&#xf…...

计算机实体安全

计算机实体安全定义: 对场地环境、设施、设备和载体、人员采取的安全对策和措施。 一、计算机可靠性与故障分析 1.1 计算机的可靠性 可靠性 (狭义) ■计算机在规定时间与条件下完成规定功能的 概率 ■规定条件:环境条件,使用条件&#xff0…...

吴恩达深度学习笔记:神经网络的编程基础2.5-2.8

目录 第一门课:神经网络和深度学习 (Neural Networks and Deep Learning)第二周:神经网络的编程基础 (Basics of Neural Network programming)2.5 导数(Derivatives)2.6 更多的导数例子(More Derivative Examples&…...

iphoneX系统的参数

1. 2. 3. 4. 5.相关的网址信息 Apple iPhone X 規格、价格和评论 | Kalvo Apple iPhone X 規格、价格和评论 | Kalvo...

基于云计算的前端资源管理系统的设计与实现

hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 随着互联网的快速发展,前端资源管理成为了一个重要的课题。本文旨在设计并实…...

区块链技术与大数据结合的商业模式探索

hello宝子们...我们是艾斯视觉擅长ui设计和前端开发10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩! 随着区块链技术和大数据技术的不断发展,两者的结合为企业带来了新的商业模式…...

基于JavaSpringboot+Vue实现前后端分离房屋租赁系统

基于JavaSpringbootVue实现前后端分离房屋租赁系统 博主介绍:多年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言 文末获取…...

Yarn: 安装与使用教程

Yarn是Facebook开发的一款高效、可靠的包管理器,用于JavaScript项目中依赖项的管理和版本控制。它作为npm(Node.js包管理器)的一个替代品,提供了更快的安装速度、更安全的依赖管理以及更好的协作体验。以下是Yarn的安装步骤以及基…...

数据库是怎么做到事务回滚的呢?

数据库实现事务回滚的原理涉及到数据库管理系统(DBMS)如何维护事务的一致性和持久性。 基本原理: ACID属性:事务的原子性(Atomicity)、一致性(Consistency)、隔离性(Iso…...

海思 Hi3519DV500 简介

海思 Hi3519DV500 简介 Hi3519DV500是一颗面向视觉行业推出的超高清智能 SoC。最高支持四路sensor输入,支持最高4K30fps的ISP图像处理能力。支持 2F WDR、多级降噪、六轴防抖、全景拼接、多光谱融合等多种传统图像增强和处理算法。支持越影AI ISP全天候卓越影像&am…...

盘点全球十大FPGA制造商

1. 赛灵思(Xilinx) 赛灵思是全球领先的FPGA供应商,市场份额超过50%。公司成立于1984年,总部位于加利福尼亚州圣何塞。关于赛灵思的一些重要事实: 提供业界最广泛的 FPGA 产品组合,包括 UltraScale、UltraS…...

【MySQL】14. 全文索引(选学)

全文索引的创建 当对文章字段或有大量文字的字段进行检索时,会使用到全文索引。 MySQL提供全文索引机制,但是有要求,要求表的存储引擎必须是MyISAM,而且默认的全文索引支持英文,不支持中文。 (为啥一定要用MyISAM呢&am…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法:原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件,如包含恶意代码、敏感数据或欺诈内容的文档,在企业协同办公环境中(如Teams、Google Workspace)尤为重要。结合大模型技术&…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...

C++ 求圆面积的程序(Program to find area of a circle)

给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:

根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

Typeerror: cannot read properties of undefined (reading ‘XXX‘)

最近需要在离线机器上运行软件,所以得把软件用docker打包起来,大部分功能都没问题,出了一个奇怪的事情。同样的代码,在本机上用vscode可以运行起来,但是打包之后在docker里出现了问题。使用的是dialog组件,…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

未授权访问事件频发,我们应当如何应对?

在当下,数据已成为企业和组织的核心资产,是推动业务发展、决策制定以及创新的关键驱动力。然而,未授权访问这一隐匿的安全威胁,正如同高悬的达摩克利斯之剑,时刻威胁着数据的安全,一旦触发,便可…...