谷德设计网站官网入口/百度app首页
Kubernetes之Pod调度策略
- Pod的4种调度策略
- 定向调度
- nodeName
- nodeSelector
- 亲和性调度
- node亲和性
- 硬限制
- 软限制
- 关系运算符
- pod亲和性
- pod反亲和性
- 污点和容忍
- 污点(taints)
- 容忍(tolerations)
默认情况下,Scheduler计算出一个Pod运行在哪个Node节点上,我们也可以直接指定该Pod运行在哪个Node节点上。
Pod的4种调度策略
- 自动调度:Pod运行在哪个节点完全由Scheduler经过一系列算法计算得出;
- 定向调度:采用nodeName、nodeSelector来实现Pod定向调度
- 亲和性调度:NodeAffinityinity、PodAffinity、PodAntiAffinity
- 污点、容忍调度:Taints、Toleration
定向调度
通过在定义Pod时,设置nodeName、nodeSelector等字段来实现Pod定向调度到指定的节点上。
nodeName
nodeName用于将Pod调度到指定(强制约束)的Node节点上,跳过Scheduler的调度逻辑,直接将Pod调度到指定的Node节点上,如果指定的Node不存在,也会继续往上调度,只不过Pod将会运行失败。
cat /etc/hosts
apiVersion: v1
kind: Pod
metadata:name: pod-schedulernamespace: bubble-dev
spec:containers:- name: nginx-containerimage: nginx:1.17.9nodeName: node2 # 指定该pod运行在node2节点
kubectl create ns bubble-dev
vi pod-scheduler.yaml
cat pod-scheduler.yaml
kubectl create -f pod-scheduler.yaml
kubectl describe pods -n bubble-dev
nodeSelector
nodeSelector用于将Pod调度到指定标签上的Node节点,它通过k8s的标签选择器实现,也就是说,Scheduler使用MathNodeSelector调度策略进行Label匹配,找出目标Node,然后将Pod调度到目标节点,该匹配规则也是强制约束,即如果没有匹配到满足条件的Node节点,也会继续往上调度,只不过Pod将会运行失败。
kubectl get nodes --show-labels
给Node节点创建标签
kubectl label nodes node1 nodev=v1
kubectl label nodes node2 nodev=v2
apiVersion: v1
kind: Pod
metadata:name: pod-schedulernamespace: bubble-dev
spec:containers:- name: nginximage: nginx:1.17.9nodeSelector:nodev: v2 # 指定该pod运行到标签为nodev=v2的node节点上
kubectl delete ns bubble-dev
kubectl create ns bubble-dev
vi pod-scheduler.yaml
cat pod-scheduler.yaml
kubectl create -f pod-scheduler.yaml
kubectl describe pods -n bubble-dev
亲和性调度
nodeName和nodeSelector都属于定向调度,都是强制性的,即如果没有Node匹配上,Pod就会运行失败,这显然太过于死板,不够圆滑,所以Kubernetes还提供了亲和性调度。
亲和性调度是在nodeSelector的基础上进行了扩展,通过配置的形式,实现优先选择满足条件的Node进行调度,如果没有,也可以调度到不满足条件的节点上,实现调度更加灵活。
nodeAffinity(node亲和性):以node为目标,解决pod可以调度到哪些node的问题;
podAffinity(pod亲和性):以某个pod为目标将pod调度到其附近,解决pod可以和哪些已存在的pod部署在同一个拓扑域中的问题;
podAntiAffinity(pod反亲和性):以pod为目标,解决pod不可以和哪些已存在的pod部署在同一个拓扑域中的问题;
node亲和性
硬限制
通过指定的规则,如果没有找到具体运行的Node节点,则会报错。
apiVersion: v1
kind: Pod
metadata:name: pod-requirednamespace: bubble-dev
spec:containers: - name: nginximage: nginx:1.17.9affinity: # 设置亲和性nodeAffinity: # node亲和性requiredDuringSchedulingIgnoredDuringExecution: # 硬限制nodeSelectorTerms:- matchExpressions: # 匹配标签中含有nodev=v3或nodev=v4的node节点- key: nodevoperator: Invalues: ["v3" , "v4"]
kubectl delete ns bubble-dev
kubectl create ns bubble-dev
vi pod-required.yaml
cat pod-required.yaml
kubectl create -f pod-required.yaml
kubectl describe pods -n bubble-dev
软限制
优先走指定的规则,如果没有找到具体运行的Node节点,则会采用随机分配的方式将Pod运行在Node节点上。
apiVersion: v1
kind: Pod
metadata:name: pod-preferrednamespace: bubble-dev
spec:containers: - name: nginximage: nginx:1.17.9affinity: # 设置亲和性nodeAffinity: # node亲和性preferredDuringSchedulingIgnoredDuringExecution: # 软限制- weight: 1preference:matchExpressions: # 匹配标签中含有nodev=v3或nodev=v4的node节点- key: nodevoperator: Invalues: ["v3" , "v4"]
kubectl delete ns bubble-dev
kubectl create ns bubble-dev
vi pod-preferred.yaml
cat pod-preferred.yaml
kubectl create -f pod-preferred.yaml
kubectl describe pods -n bubble-dev
关系运算符
1. In # 在,表示key的值在指定的列表其中一项即可匹配成功;
2. NotIn # 与In相反,表示key的值不在指定的列表,满足的话即表示匹配成功;
3. Exists # 存在,存在是对标签的key而言,表示存在指定的key则表示匹配成功,使用Exists的话不用写value,因为Exists是针对key而言;
4. Gt # greater than的简写,大于的意思,表示大于指定的值则匹配成功;
5. Lt # less than的简写,小于的意思,表示小于指定的值则匹配成功;
6. DoesNotExists # 不存在该标签的节点
pod亲和性
pod亲和性调度也可以分为硬亲和性调度和软亲和性调度,以下案例为硬亲和性调度
apiVersion: v1
kind: Pod
metadata:name: pod-v1namespace: bubble-devlabels:podv: v1 # 设置标签
spec:containers:- name: nginximage: nginx:1.17.9nodeName: node1---
apiVersion: v1
kind: Pod
metadata:name: pod-v2namespace: bubble-devlabels:podv: v2 # 设置标签
spec:containers:- name: nginximage: nginx:1.17.9nodeName: node2---apiVersion: v1
kind: Pod
metadata:name: pod-affinitynamespace: bubble-dev
spec:containers:- name: nginximage: nginx:1.17.9affinity: # 设置亲和性podAffinity: # pod亲和性requiredDuringSchedulingIgnoredDuringExecution: # 硬限制- labelSelector:matchExpressions: # 匹配标签中含有podv=v1的pod- key: podvoperator: Invalues: ["v1"] topologyKey: kubernetes.io/hostname
kubectl delete ns bubble-dev
kubectl create ns bubble-dev
vi pod-affinity.yaml
cat pod-affinity.yaml
kubectl create -f pod-affinity.yaml
kubectl describe pods -n bubble-dev
pod-v1运行在node1节点上,pod-v2运行在node2节点上,而pod-affinity会以标签中包含podv=v1的pod为目标调度到其附近,最终pod-affinity也会运行在node1节点上。
pod反亲和性
pod反亲和性调度也可以分为硬反亲和性调度和软反亲和性调度,以下案例为硬反亲和性调度
apiVersion: v1
kind: Pod
metadata:name: pod-antiaffinitynamespace: bubble-dev
spec:containers:- name: nginximage: nginx:1.17.9affinity: # 设置亲和性podAntiAffinity: # pod反亲和性requiredDuringSchedulingIgnoredDuringExecution: # 硬限制- labelSelector:matchExpressions: # 匹配标签中含有podv=v1的pod- key: podvoperator: Invalues: ["v1"] topologyKey: kubernetes.io/hostname
vi pod-antiaffinity.yaml
cat pod-antiaffinity.yaml
kubectl create -f pod-antiaffinity.yaml
kubectl describe pods -n bubble-dev
pod-antiaffinity会远离标签中包含podv=v1的pod,最终运行在node2节点上。
污点和容忍
污点(taints)
污点,taints是定义在Node节点之上的键值型属性数据,用于让Node节点拒绝将Pod调度运行于其上,除非该Pod对象具有接纳节点污点的容忍度。污点也是我们Pod调度中的一种调度策略,污点作用在Node节点上,当为某个Node节点打上污点,则表示该Node是否允许Pod调度过来,而我们的Master节点上就有一个污点,所以你能看到Pod是不允许调度到Master节点上的。
污点的格式:key=value:effect,key和value是污点的标签,可以自行拟定,effect描述污点的作用,effect支持如下三个选项:
PreferNoSchedul: kubernetes将尽量避免把pod调度到具有该污点的node上,除非没有其他节点可调度;
NoSchedule: kubernetes将不会把pod调度到具有该污点的node上,但不会影响当前node已存在的pod;
NoExecute: kubernetes将不会把pod调度到具有该污点的node上,同时还会驱逐node上已存在的pod;
# 设置污点,指定标签为dedicated=special-user,策略为NoSchedule,如果该标签已存在则更新策略
kubectl taint nodes node1 dedicated=special-user:NoSchedule# 移除key为dedicated的NoSchedule污点
kubectl taint nodes node1 dedicated:NoSchedule-# 移除key为dedicated的所有污点
kubectl taint nodes node1 dedicated-# 查看污点
kubectl describe nodes node1 | grep Taints
容忍(tolerations)
污点的作用是拒绝Pod调度,而容忍定义于Pod上,表示Pod允许Node节点上有污点,并且还会往含有对应污点的节点上调度。
apiVersion: v1
kind: Pod
metadata:name: pod-tolerationsnamespace: bubble-dev
spec:containers:- name: nginximage: nginx:1.17.9tolerations: # 设置容忍,与containers同级,容忍是针对pod而言的- key: "dedicated" # 对应node上要容忍污点的键,空则表示匹配所有键value: "special-user" # 对应要容忍污点的值operator: "Equal" # 运行符,有两个参数Equal和Exists(默认),如果设置为Exists时,不需要写valueeffect: "NoExecute" # 对应污点的effect,空也意味着匹配所有
# tolerationSeconds: 10 # 容忍时间,当且仅当effect为NoExecute时该参数生效,表示pod在node上的停留时间
kubectl taint nodes node1 dedicated=special-user:NoExecute
kubectl taint nodes node2 dedicated=special-user:NoSchedule
vi pod-tolerations.yaml
cat pod-tolerations.yaml
kubectl create -f pod-tolerations.yaml
kubectl describe pods -n bubble-dev
为了方便测试,我们在node1和node2节点上都加上了污点。由于设置的容忍与node1的污点相匹配,所以该pod最终调度到了node1节点上。
如果所有的node节点都不匹配的话,则pod会运行失败。
apiVersion: v1
kind: Pod
metadata:name: pod-testnamespace: bubble-dev
spec:containers:- name: nginximage: nginx:1.17.9tolerations: # 设置容忍,与containers同级,容忍是针对pod而言的- key: "dedicated" # 对应node上要容忍污点的键,空则表示匹配所有键value: "special-root" # 对应要容忍污点的值operator: "Equal" # 运行符,有两个参数Equal和Exists(默认),如果设置为Exists时,不需要写valueeffect: "NoExecute" # 对应污点的effect,空也意味着匹配所有
# tolerationSeconds: 10 # 容忍时间,当且仅当effect为NoExecute时该参数生效,表示pod在node上的停留时间
vi pod-test.yaml
cat pod-test.yaml
kubectl create -f pod-test.yaml
kubectl describe pods -n bubble-dev
相关文章:

Mr. Cappuccino的第41杯咖啡——Kubernetes之Pod调度策略
Kubernetes之Pod调度策略Pod的4种调度策略定向调度nodeNamenodeSelector亲和性调度node亲和性硬限制软限制关系运算符pod亲和性pod反亲和性污点和容忍污点(taints)容忍(tolerations)默认情况下,Scheduler计算出一个Pod…...

Linux 磁盘挂载
目录 Linux硬盘分区 硬盘设备的文件名 /dev/sd[a-z] 硬盘分区 识别硬盘的文件名 Linux文件系统 文件系统类型 Linux如何保存文件 VFS虚拟文件系统 磁盘挂载命令 lsblk 查看系统的磁盘使用情况 fdisk 硬盘分区 mkfs 格式化文件系统 mount 挂载命令 df 显示磁盘空间…...

命名冲突问题与命名空间
一、何为命名空间? 首先我们运行下面代码, #include <stdio.h> int rand 0; int main() {printf("%d", rand);return 0; } 我们会发现该代码能够正常运行,没有任何问题。 但是当我们再在上面代码的基础上包含stdlib.h头…...

Kafka漏洞修复之CVE-2023-25194修复措施验证
Kafka漏洞修复之CVE-2023-25194修复措施验证前言风险分析解决方案AdoptOpenJDK Zookeeper Kafka多版本OpenJDK安装切换Zookeeper安装Kafka安装与使用其他Kafka消息发送流程Linux配置加载顺序参考链接前言 场景介绍 Kafka最近爆出高危漏洞CNNVD-202302-515,导致Apa…...

中后序遍历构建二叉树与应用I
目录 题目描述 思路分析 AC代码 题目描述 按中序遍历和后序遍历给出一棵二叉树,求这棵二叉树中叶子节点权值的最小值。 输入保证叶子节点的权值各不相同。 输入 测试数据有多组 对于每组测试数据,首先输入一个整数N (1 < N < 10000)&#x…...

随机退化模型--基础篇(1)
随机退化模型--基础篇(1) 1. 随机退化建模1.1 瞬间失效1.2 存在缓慢退化过程的失效2. 通俗解释2.1 包引入2.2 参数定义2.3 基于递归函数的更新2.4 结果可视化1. 随机退化建模 随机模型亦称“非确定的、概率的模型”,是按随机变量建立的模型。其特点是; 模型参数、模拟对象发…...

2023.2.15工作学习记录 git Docker compose容器编排
关于Git错误提交了target目录 是因为在ignore目录中没有加入biz这个工程 以后提交代码时一定要检查好自己提交的代码 首先把所有的全部取消 然后再根据自己要提交的内容一个个来勾选 Docker网络 container模式:新建的容器和已经存在的一个容器共享一个网络…...

基于jeecgboot的flowable流程增加节点自动跳过功能
为了满足有时候需要在某个节点没有人员处理的时候需要自动跳过,所以增加了这个功能。 一、FlowComment意见里增加一个类型8,跳过流程 /** * 流程意见类型 * */ public enum FlowComment { /** * 说明 */ NORMAL("1", "…...

流程引擎之Activiti简介
背景Activiti 是一个开源架构的工作流引擎,基于 bpmn2.0 标准进行流程定义,其前身是 jBPM,Activiti 相对于 jBPM 更轻量,更易上手,且天然集成了 Spring。2010年 jBPM 创始人 Tom Baeyens 离开 JBoss,随之加…...

4.打包子应用 投票
接上回 最终得到这样的目录 mysite/manage.pymysite/__init__.pysettings.pyurls.pyasgi.pywsgi.pypolls/__init__.pyadmin.pyapps.pymigrations/__init__.py0001_initial.pymodels.pystatic/polls/images/background.gifstyle.csstemplates/polls/detail.htmlindex.htmlresult…...

华为OD机试 - 服务依赖(JavaScript) | 机试题算法思路 【2023】
服务依赖 题目 在某系统中有众多服务,每个服务用字符串(只包含字母和数字,长度<=10)唯一标识,服务间可能有依赖关系,如A依赖B,则当B故障时导致A也故障。 传递具有依赖性,如A依赖B,B依赖C,当C故障时导致B故障,也导致A故障。给出所有依赖关系以及当前已知故障服务…...

目标检测综述(一份全的自制PPT): 涵盖各种模型简介对比,适合入门和了解目标检测现状
[TOC](目标检测综述(一份全的自制PPT): 涵盖各种模型简介对比,适合入门和了解目标检测现状) 注:本文仅供学习,未经同意勿转。分享的PPT请勿二次传播,或者用于其他商用途径。若使用本文PPT请注明来源,感谢配合 前言&…...

Vulnhub-DC-2实战靶场
Vulnhub-DC-2实战靶场 https://blog.csdn.net/ierciyuan/article/details/127560871 这次试试DC-2,目标是找到官方设置的5个flag。 一. 环境搭建 1. 准备工具 虚拟机Kali: 自备,我的kali的IP为192.168.3.129 靶场机: https…...

从输入URL到渲染的过程中到底发生了什么?
CDN缓存DNSTCP三次握手、四次挥手浏览器渲染过程输入URL到页面渲染过程的一些优化 下面我将“从输入URL到渲染的全过程”大概的描述出来,再对其过程加以解释,了解过程中可以做哪些优化。文章内容有点长,需要有足够的耐心看完哟!&…...

旋转屏幕导致 Fragment 中的 onConfigurationChanged 被调用两次
环境 IDE Android Studio Dolphin 2021.3.1; 项目配置 Android Gradle plugin version: 7.1.3 Gradle Version: 7.2 Gradle JDK: 11 Compile Sdk Version: 32 问题描述 项目使用的 Bottom Navigation Activity 基本结构,在调试程序时发现,…...

23年校招DL/NLP/推荐系统/ML/算法基础面试必看300问及答案
2020年校招已经开始了,在疫情全球肆虐的背景下,全球就业情况异常艰难,加上美国对中国企业打压持续升级,对于马上开始秋招找工作的毕业生而言,更是难上加难。我们不能凭一己之力改变现状,但我们可以凭借自己…...

Python基础知识汇总(字符串二)
目录 检索字符串 count()方法 find()方法 in关键字 index()方法 rindex()方法 startswith()方法...

【FPGA】Verilog:实现十六进制七段数码管显示 | 7-Segment Display
写在前面:本章主要内容为理解七点数码管显示的概念,并使用 Verilog 实现。生成输入信号后通过仿真确认各门的动作,通过 FPGA 检查在 Verilog 中实现的电路的操作。 Ⅰ. 前置知识 七段数码管是利用多重输出功能的非常有用的元件。该元件用于字…...

Android开发:Activity启动模式
1.怎样设置Activity的启动模式 可以在清单文件中自己添加活动的启动模式, android : launchMode"standard", 不写的话系统默认就是标准模式. 2.启动模式 2.1.默认启动模式 标准启动模式就是栈, 打开一个活动就将活动压入栈中, 返回就将活动退出栈中. 不同的Activit…...

01_Docker 简介
01_Docker 简介 文章目录01_Docker 简介1.1 Docker 简介1.2 Docker 组件1.2.1 Docker 客户端和服务区1.2.2 Docker 镜像1.2.3 Registry1.2.4 Docker 容器参考资料https://www.runoob.com/docker/ubuntu-docker-install.html 1.1 Docker 简介 Docker 是一个能够把开发的应用程…...

一文精通MVCC机制
MVCC(Multi-Version Concurrency Control)多版本并发控制机制使用串行化隔离级别时,mysql会将所有的操作加锁互斥,来保证并发安全。这种方式必然降低并发性能。mysql在读已提交和可重复读隔离级别下,对一行数据的读和写两个操作默认是不会通过…...

商用ESP32协议采集器源码分享开篇
这是一个关于chatGPT帮助嵌入式程序员开发商业项目的故事. 在开发这个项目的过程中,chatGPT发布了,在它的帮助下,项目开发量减少了10%,所以这个专栏,既是一个关于Micropython开发ESP32的专栏,也是一个程序员在AI的帮助下,提升效率,加速挣钱的案例. 看完之后,你将知道如何用mic…...

代码随想录算法训练营第三十四天 | 860.柠檬水找零,406.根据身高重建队列,452. 用最少数量的箭引爆气球
一、参考资料柠檬水找零https://programmercarl.com/0860.%E6%9F%A0%E6%AA%AC%E6%B0%B4%E6%89%BE%E9%9B%B6.html 根据身高重建队列 https://programmercarl.com/0406.%E6%A0%B9%E6%8D%AE%E8%BA%AB%E9%AB%98%E9%87%8D%E5%BB%BA%E9%98%9F%E5%88%97.html 用最少数量的箭引爆气球ht…...

DDR4介绍01
DDR4(第四代双倍数据率同步动态随机存储器SDRAM) 关于内存方面知识,大部分人、包括我自己也不是很懂,希望此篇文章能起到点作用,做硬件的就得把相关专业知识学牢了,尤其是专业术语。 下面是DDR4知识做一次…...

扫地机器人行业投资逻辑:国内以价换量元年,海外需求企稳回升
1、国内以价换量元年,投资逻辑由产品迭代转向行业的渗透率提升 2019-2022 年国内扫地机行业主要的投资逻辑是产品迭代的价增带动销额增长。 2019-2022 年国内热销的扫地机产品从单机向自清洁扫地机、全能基站扫地机持续迭 代升级,产品功能日益完善、瞄准用户痛点更新,真正实…...

(考研湖科大教书匠计算机网络)第四章网络层-第七节:IPv4数据报首部格式
获取pdf:密码7281专栏目录首页:【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一:IP数据报首部格式概述二:各字段作用概述(1)版本(2)首部长度和可选字段(3&am…...

每天10个前端小知识 【Day 18】
前端面试基础知识题 1.如何实现单行/多行文本溢出的省略样式? 在日常开发展示页面,如果一段文本的数量过长,受制于元素宽度的因素,有可能不能完全显示,为了提高用户的使用体验,这个时候就需要…...

【Java集合类】ArrayList
内部结构 ArrayList内部核心是一个Object数组elementDataObject数组的长度(length)视为ArrayList当前的容量(capacity)size对象表示ArrayList当前的元素个数 类上的重要注释 内部是Object数组 允许put null值,会自动扩容 size、…...

页面置换算法
页面置换算法 在进程运行过程中,若需要访问的物理块不在内存中,就需要通过一定的方式来将页面载入内存,而此时内存很可能已无空闲空间,因此就需要一定的算法来选择内存中要被置换的页面,这种算法就被称为页面置换算法…...

算法导论【在线算法】—The Ski-Rental Problem、The Lost Cow Problem、The Secretary Problem
算法导论【在线算法】The Ski-Rental Problem问题描述在线算法证明The Lost Cow Problem问题描述在线算法类似问题—寻宝藏The Secretary Problem问题描述在线算法The Best Possible kThe Ski-Rental Problem 问题描述 假设你正在上滑雪课。每节课结束后,你决定&a…...