做网站卖高仿/网站策划报告
在《研发工程师玩转Kubernetes——使用Node特性定向调度Pod》中,我们提到requiredDuringSchedulingIgnoredDuringExecution只有在规则被满足的时候才能执行调度。本节我们将测试几种边界情况,看看Kubernetes的行为。
没有满足的条件
假设我们测试的Node都没有Label:not_exist=“”,于是我们在清单中要求必须有这个Label,来测试这个边界。
# nginx_deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deployment
spec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: not_existoperator: Invalues:- ""containers:- name: nginx-containerimage: nginxports:- containerPort: 80
执行下面的指令
kubectl create -f nginx_deployment.yaml
deployment.apps/nginx-deployment created
观察
Pod的情况
kubectl get pod --watch -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-deployment-6b5d69bc9d-94vgl 0/1 Pending 0 0s <none> <none> <none> <none>
nginx-deployment-6b5d69bc9d-94vgl 0/1 Pending 0 0s <none> <none> <none> <none>
Deployment的情况
kubectl get deployments.apps --watch -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
nginx-deployment 0/1 1 0 59s nginx-container nginx app=nginx
可以看到Pod一直处于Pending状态,也没调度到任何Node上。
多个nodeSelectorTerms
为了进行这个测试,我们给UbuntuB和UbunutC设置对应的Label。
kubectl label nodes ubuntub name:ubuntub
node/ubuntub labeled
kubectl label nodes ubuntuc name=ubuntuc
node/ubuntuc labeled
我们使用下面指令查看下修改后的Labels。
kubectl get nodes --show-labels
NAME STATUS ROLES AGE VERSION LABELS
ubuntud Ready <none> 21h v1.26.4 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=ubuntud,kubernetes.io/os=linux,microk8s.io/cluster=true,node.kubernetes.io/microk8s-worker=microk8s-worker
ubuntuc Ready <none> 21h v1.26.4 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=ubuntuc,kubernetes.io/os=linux,microk8s.io/cluster=true,name=ubuntuc,node.kubernetes.io/microk8s-worker=microk8s-worker
ubuntub Ready <none> 21h v1.26.4 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=ubuntub,kubernetes.io/os=linux,microk8s.io/cluster=true,name=ubuntub,node.kubernetes.io/microk8s-worker=microk8s-worker
ubuntue Ready <none> 21h v1.26.4 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=ubuntue,kubernetes.io/os=linux,microk8s.io/cluster=true,node.kubernetes.io/microk8s-worker=microk8s-worker
ubuntua Ready <none> 21h v1.27.2 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernetes.io/hostname=ubuntua,kubernetes.io/os=linux,microk8s.io/cluster=true,node.kubernetes.io/microk8s-controlplane=microk8s-controlplane
然后清单改成多个nodeSelectorTerms
apiVersion: apps/v1
kind: Deployment
metadata:name: nginx-deployment
spec:replicas: 1selector:matchLabels:app: nginxtemplate:metadata:labels:app: nginxspec:affinity:nodeAffinity:requiredDuringSchedulingIgnoredDuringExecution:nodeSelectorTerms:- matchExpressions:- key: nameoperator: Invalues:- "ubuntub"- matchExpressions:- key: nameoperator: Invalues:- "ubuntuc"containers:- name: nginx-containerimage: nginxports:- containerPort: 80
调用下面指令创建Deployment
kubectl create -f nginx_deployment.yaml
deployment.apps/nginx-deployment created
观察
kubectl get pod --watch -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-deployment-58d4498bdd-s5fvd 0/1 Pending 0 0s <none> <none> <none> <none>
nginx-deployment-58d4498bdd-s5fvd 0/1 Pending 0 0s <none> ubuntuc <none> <none>
nginx-deployment-58d4498bdd-s5fvd 0/1 ContainerCreating 0 0s <none> ubuntuc <none> <none>
nginx-deployment-58d4498bdd-s5fvd 0/1 ContainerCreating 0 0s <none> ubuntuc <none> <none>
nginx-deployment-58d4498bdd-s5fvd 1/1 Running 0 4s 10.1.43.212 ubuntuc <none> <none>
kubectl get deployments.apps --watch -o wide
NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES SELECTOR
nginx-deployment 0/1 0 0 0s nginx-container nginx app=nginx
nginx-deployment 0/1 0 0 0s nginx-container nginx app=nginx
nginx-deployment 0/1 0 0 0s nginx-container nginx app=nginx
nginx-deployment 0/1 1 0 0s nginx-container nginx app=nginx
nginx-deployment 1/1 1 1 4s nginx-container nginx app=nginx
可以看到Node的requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.matchExpressions之间是取或的关系,即只要满足其中一个条件就可以被调度到。
为了再次验证,我们可以让UbuntC驱逐这个Pod。
kubectl taint node ubuntuc node_type=worker:NoExecute
node/ubuntuc tainted
再观察
kubectl get pod --watch -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-deployment-58d4498bdd-s5fvd 1/1 Running 0 8m28s 10.1.43.212 ubuntuc <none> <none>
nginx-deployment-58d4498bdd-s5fvd 1/1 Terminating 0 8m28s 10.1.43.212 ubuntuc <none> <none>
nginx-deployment-58d4498bdd-s5fvd 1/1 Terminating 0 8m28s 10.1.43.212 ubuntuc <none> <none>
nginx-deployment-58d4498bdd-kc2fz 0/1 Pending 0 1s <none> <none> <none> <none>
nginx-deployment-58d4498bdd-kc2fz 0/1 Pending 0 1s <none> ubuntub <none> <none>
nginx-deployment-58d4498bdd-kc2fz 0/1 ContainerCreating 0 1s <none> ubuntub <none> <none>
nginx-deployment-58d4498bdd-s5fvd 1/1 Terminating 0 8m29s 10.1.43.212 ubuntuc <none> <none>
nginx-deployment-58d4498bdd-kc2fz 0/1 ContainerCreating 0 1s <none> ubuntub <none> <none>
nginx-deployment-58d4498bdd-s5fvd 0/1 Terminating 0 8m30s 10.1.43.212 ubuntuc <none> <none>
nginx-deployment-58d4498bdd-s5fvd 0/1 Terminating 0 8m30s 10.1.43.212 ubuntuc <none> <none>
nginx-deployment-58d4498bdd-s5fvd 0/1 Terminating 0 8m30s 10.1.43.212 ubuntuc <none> <none>
nginx-deployment-58d4498bdd-kc2fz 1/1 Running 0 4s 10.1.209.132 ubuntub <none> <none>
可以看到Pod被调度到另外一个匹配的条件对应的Node(UbuntuB)上。
被彻底驱逐
再让UbuntuB驱逐这个Pod,这样没有哪个Node可以符合条件。
kubectl taint node ubuntub node_type=worker:NoExecute
node/ubuntub tainted
再观察
kubectl get pod --watch -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-deployment-58d4498bdd-kc2fz 1/1 Terminating 0 3m30s 10.1.209.132 ubuntub <none> <none>
nginx-deployment-58d4498bdd-kc2fz 1/1 Terminating 0 3m30s 10.1.209.132 ubuntub <none> <none>
nginx-deployment-58d4498bdd-wjkbx 0/1 Pending 0 0s <none> <none> <none> <none>
nginx-deployment-58d4498bdd-wjkbx 0/1 Pending 0 0s <none> <none> <none> <none>
nginx-deployment-58d4498bdd-kc2fz 1/1 Terminating 0 3m30s 10.1.209.132 ubuntub <none> <none>
nginx-deployment-58d4498bdd-kc2fz 0/1 Terminating 0 3m31s 10.1.209.132 ubuntub <none> <none>
nginx-deployment-58d4498bdd-kc2fz 0/1 Terminating 0 3m31s 10.1.209.132 ubuntub <none> <none>
nginx-deployment-58d4498bdd-kc2fz 0/1 Terminating 0 3m32s 10.1.209.132 ubuntub <none> <none>
因为被驱逐,老的Pod被终止,而新的Pod因为哪个Node可以被匹配到,而变成pending状态。
取消Label
接上上步,我们使用下面指令取消UbuntuB对Pod的驱逐
kubectl taint node ubuntub node_type=worker:NoExecute-
node/ubuntub untainted
可以看到Deployment将Pod调度到UbuntuB上
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-deployment-58d4498bdd-wjkbx 0/1 ContainerCreating 0 5m20s <none> ubuntub <none> <none>
nginx-deployment-58d4498bdd-wjkbx 0/1 ContainerCreating 0 5m20s <none> ubuntub <none> <none>
nginx-deployment-58d4498bdd-wjkbx 1/1 Running 0 5m23s 10.1.209.133 ubuntub <none> <none>
然后我们使用下面指令取消UbuntuB的Label:name=unbuntb
kubectl label nodes ubuntub name-
这次Deployment不会驱逐该Pod
kubectl get pod -o wide
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
nginx-deployment-58d4498bdd-wjkbx 1/1 Running 0 11m 10.1.209.133 ubuntub <none> <none>
总结
- requiredDuringSchedulingIgnoredDuringExecution.nodeSelectorTerms.matchExpressions之间是取或的关系,即只要满足其中一个条件就可以被调度到。
- 没有匹配的条件,Pod会被创建,但是处于Pending状态,不会被部署到任何一个Node上。
- 如果Pod已经在Node上运行,此时删除Node匹配上的Label,Deployment不会终止该Pod。
相关文章:

研发工程师玩转Kubernetes——Node亲和性requiredDuringSchedulingIgnoredDuringExecution几种边界实验
在《研发工程师玩转Kubernetes——使用Node特性定向调度Pod》中,我们提到requiredDuringSchedulingIgnoredDuringExecution只有在规则被满足的时候才能执行调度。本节我们将测试几种边界情况,看看Kubernetes的行为。 没有满足的条件 假设我们测试的Nod…...

OpenCV中的图像处理3.9(六)轮廓线特征与属性
目录 3.9 OpenCV中的轮廓线3.9.1 轮廓线:入门目标什么是轮廓线?如何绘制轮廓线?轮廓线逼近法 3.9.2 轮廓线的特征1. 矩2. 轮廓线面积3. 轮廓线周长4. 轮廓逼近5. 凸面体6. 检查凸性7. 边界矩形8. 最小包围圈9. 拟合椭圆10. 拟合直线 3.9.3 轮…...

burpsuite+xray实现联动测试(手动分析和自动化测试同时进行)
目的:安全测试过程中手动分析测试与xray自动化扫描测试结合,这样可以从多层保障安全测试的分析,针对平台业务接口量大的安全测试是十分有用的,可以实现双向测试同时开始。 xray简介 xray 是一款功能强大的安全评估工具ÿ…...

2023年专业连锁行业研究报告
第一章 行业概况 专业连锁行业是指以连锁经营模式运营的公司,其主要业务涵盖零售、餐饮、酒店、医疗、教育等领域。这些公司通过规模化、标准化的经营模式和供应链管理,提供专业化、高质量的产品和服务。专业连锁行业在全球范围内蓬勃发展,并…...

Mysql数据库(六):基本的SELECT语句
基本的SELECT语句 前言一、SELECT...二、SELECT ... FROM三、列的别名四、去除重复行五、空值参与运算六、着重号七、查询常数八、显示表结构九、过滤数据 前言 本博主将用CSDN记录软件开发求学之路上亲身所得与所学的心得与知识,有兴趣的小伙伴可以关注博主&#…...

在CentOS7环境中,实现使用openresty配置文件,达到jwt指定用户userid不能访问的效果
#在CentOS7环境中,实现使用openresty配置文件,达到jwt指定用户userid不能访问的效果。 首先,你需要安装 OpenResty 和 JWT 组件: 安装 OpenResty 参考 OpenResty 的官方安装文档,在终端执行如下命令: $…...

SpringBoot 源码分析初始化应用上下文(1)-createApplicationContext
前言:springBoot的版本是 2.2.4.RELEASE 一、入口 /*** Run the Spring application, creating and refreshing a new* {link ApplicationContext}.* param args the application arguments (usually passed from a Java main method)* return a running {link A…...

STM32队列
目录 什么是队列? 队列特点 1. 数据入队出队方式 2. 数据传递方式 3. 多任务访问 4. 出队、入队阻塞 队列相关 API 函数 1. 创建队列 参数: 2. 写队列 参数: 返回值: 3. 读队列 参数: 返回值…...

探索Beyond Compare:让文件比较和管理变得简单高效
在这个信息爆炸时代,我们的日常生活和工作中需要处理大量的数据和文档。在这个过程中,有时候我们会面临找出不同文件之间的差异、合并重复内容等需求。那么,有没有一款软件可以帮助我们轻松地完成这些任务呢?答案当然是肯定的&…...

动态网站Servelt基础
文章目录 一、Servlet基础(一)Servlet概述1、Servlet是什么2、Servlet容器3、Servlet应用程序的体系结构 (二)Servlet的特点1、功能强大2、可移植3、性能高效4、安全性高5、可扩展 (三)Servlet接口1、Servl…...

Docker 网络
Docker 网络实现原理 Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。因为在同一宿主机…...

Tomcat的优化
Tomcat的优化 一、Tomcat 优化Tomcat 配置文件参数优化 二、系统内核优化三、Tomcat 配置 JVM 参数:参数含义 一、Tomcat 优化 Tomcat默认安装下的缺省配置并不适合生产环境,它可能会频繁出现假死现象需要重启,只有通过不断压测优化才能让它…...

一个问题来对比文心一言和chatgpt
问题: 请注意, 孩子不会说话,他无法用语言来回复妈妈的问题, 请生成以下剧本:一个妈妈和一岁不会说话的婴儿的日常vlog的剧本 文心一言 场景一:早晨 (妈妈和孩子在客厅里醒来) 妈妈&…...

防雪崩利器之Hystrix
Hystrix作为一个容错组件,本文从它的作用、熔断设计、工作流程和应用方面一一道来,帮助大家了解如何使用。 1、什么是灾难性雪崩效应 要讲Hystrix,我们就要讲一种场景,在微服务架构中,如果底层服务出现故障࿰…...

机器学习复习(上)
严正声明:本文的答案是ChatGPT的回答,仅供参考,不代表就是正确答案!!! 1.解释什么是过拟合和欠拟合,如何降低过拟合? 过拟合(overfitting)指的是一个模型在训练数据上表…...

node笔记_express结合formidable实现前后端的文件上传
文章目录 ⭐前言⭐安装http请求的文件解析依赖库💖 安装 formidable💖 node formidable接受formData上传参数 ⭐上传的页面搭建💖 vue2 element upload💖 node 渲染 上传文件 ⭐后端生成api上传文件到指定目录💖完整的…...

CKA 09_Kubernetes工作负载与调度 资源调度 三类QoS request 资源需求 limit 资源限额
文章目录 1. 资源调度1.1 准备工作1.2 为什么需要 request 和 limit1.3 内存限制1.3.1 Brustable1.3.2 Guaranteed1.3.3 BestEffort1.3.4 当容器申请的资源超出 limit 和 request 1.4 CPU限制 1. 资源调度 1.1 准备工作 Kubernetes 采用 request 和 limit 两种限制类型来对资源…...

【pytorch】维度变换
【pytorch】维度变换 View操作unSqueeze操作图片处理的一个案例squeeze 维度删减操作维度扩展-expand维度扩展-repeat矩阵的转置操作-transpose View操作 将一个四维的张量(b x c x h x w)转换成一个二维的张量 对于四张图片 将每一张图像用一行向量进…...

vue3中的nextTick()
目录 nextTick() 方法用法回调函数方式使用await方式使用 实现原理使用nextTick() 方法时的注意事项 nextTick() 方法 nextTick() 方法是一个非常强大的工具,是一个等待下一次 DOM 更新刷新的工具方法。用于将一个函数以异步的方式推迟到下一个 DOM 更新周期执行。…...

高效学习传感器|霍尔式传感器
01、霍尔式传感器的工作原理 1●霍尔效应 霍尔式传感器的物理基础是霍尔效应。如图1所示,在一块长度为l、宽度为b、厚度为d的长方体导电板上,左、右、前、后侧面都安装上电极。在长度方向上通入电流I,在厚度方向施加磁感应强度为B的磁场。 ■…...

2023年前端面试高频考点HTML5+CSS3
目录 浏览器的渲染过程⭐⭐⭐ CSS 、JS 阻塞 DOM 解析和渲染 回流(重排)和重绘⭐⭐ 选择器 ID选择器、类选择器、标签选择器(按优先级高到低排序)⭐⭐ 特殊符号选择器(>,,~,空格࿰…...

企业开源测试项目实战(附全套实战项目教程+视频+源码)
接口测试项目 1. No matching distribution found for itypes1.1.0 Could not find a version that satisfies the requirement itypes1.1.0 (from -r requirements.txt (line 8)) (from versions: ) No matching distribution found for itypes1.1.0 (from -r requirements.…...

信创办公–基于WPS的EXCEL最佳实践系列 (创建表格)
信创办公–基于WPS的EXCEL最佳实践系列 (创建表格) 目录 应用背景操作步骤1、新建空白工作簿并命名为“奖牌榜”2、使用模板新建工作簿3、新增一张工作表,并将工作簿的标签更改为红色4、复制与隐藏工作表5、添加工作簿属性值6、更改工作簿主题…...

四、HAL_驱动机械按键
1、开发环境。 (1)KeilMDK:V5.38.0.0 (2)STM32CubeMX:V6.8.1 (3)MCU:STM32F407ZGT6 2、机械按键简介 (1)按键内部是机械结构,也就是内部是没有电路的。按键按下内部引脚导通,松开内部断开。 3、实验目的&原理…...

机器学习实战六步法之数据收集方法(四)
要落地一个机器学习的项目,是有章可循的,通过这六个步骤,小白也能搞定机器学习。 看我闪电六连鞭!🤣 数据收集 数据是机器学习的基础,没有数据一切都是空谈!数据集的数据量和数据的质量往往决…...

神经网络:CNN中的filter,kernel_size,strides,padding对输出形状的影响
输入数据在经过卷积层后,形状一般会发生改变,而形状的变化往往与以下四个超参数有关。 1,filter(out_channel) 该超参数控制着输入数据经过卷积层中需要与几个卷积核进行运算,而输入数据与每个卷积核进行…...

Spring Boot集成Redisson布隆过滤器案例
1 什么是布隆过滤器 布隆过滤器实际上是一个非常长的二进制向量(bitmap)和一系列随机哈希函数。那什么又叫哈希函数呢?哈希函数指将哈希表中元素的关键键值通过一定的函数关系映射为元素存储位置的函数。(HashMap源码) 布隆过滤器的优点&…...

使用 VSCode SSH 公网远程连接本地服务器开发 - cpolar内网穿透
文章目录 前言视频教程1、安装OpenSSH2、vscode配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网地址远程 转…...

portraiture宿主插件最新v4中文版本下载及使用教程
自拍怎么可以不修图呢?如果要修图的话,磨皮就是其中非常重要的一环。皮肤看起来细腻光滑了,整个人的颜值都会瞬间拉高。下面就让我们介绍一下磨皮用什么软件好用,什么软件可以手动磨皮的相关内容。portraiture是ps人像修图中常用的…...

一. ATR技术指标的定义与运用
一. ATR的定义 1. 什么是ATR ATR英文全名是Average true range,翻译过来就是平均真实波幅,这个指标主要用来衡量最近N天TR(真实波幅)的平均值。 2. ATR相关计算公式 T R [ ( 最高价 − 最低价 ) , ( 前一次收盘价 − 最高价 ) ࿰…...