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:nginx 、env: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容器一样…...

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系统不仅能够帮助其实现物料、人力、财务等资源的全面管理…...

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

吴恩达深度学习笔记:神经网络的编程基础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…...

C++初阶-list的底层
目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

2.Vue编写一个app
1.src中重要的组成 1.1main.ts // 引入createApp用于创建应用 import { createApp } from "vue"; // 引用App根组件 import App from ./App.vue;createApp(App).mount(#app)1.2 App.vue 其中要写三种标签 <template> <!--html--> </template>…...

springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...

基于Springboot+Vue的办公管理系统
角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...

代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
深入理解Optional:处理空指针异常
1. 使用Optional处理可能为空的集合 在Java开发中,集合判空是一个常见但容易出错的场景。传统方式虽然可行,但存在一些潜在问题: // 传统判空方式 if (!CollectionUtils.isEmpty(userInfoList)) {for (UserInfo userInfo : userInfoList) {…...

【Linux】自动化构建-Make/Makefile
前言 上文我们讲到了Linux中的编译器gcc/g 【Linux】编译器gcc/g及其库的详细介绍-CSDN博客 本来我们将一个对于编译来说很重要的工具:make/makfile 1.背景 在一个工程中源文件不计其数,其按类型、功能、模块分别放在若干个目录中,mak…...
【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统
Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...

内窥镜检查中基于提示的息肉分割|文献速递-深度学习医疗AI最新文献
Title 题目 Prompt-based polyp segmentation during endoscopy 内窥镜检查中基于提示的息肉分割 01 文献速递介绍 以下是对这段英文内容的中文翻译: ### 胃肠道癌症的发病率呈上升趋势,且有年轻化倾向(Bray等人,2018&#x…...
前端工具库lodash与lodash-es区别详解
lodash 和 lodash-es 是同一工具库的两个不同版本,核心功能完全一致,主要区别在于模块化格式和优化方式,适合不同的开发环境。以下是详细对比: 1. 模块化格式 lodash 使用 CommonJS 模块格式(require/module.exports&a…...