资源调度(2)-----pod的亲和性和反亲和性

集群调度:
schedule的调度算法。
预算策略:过滤出合适的节点
优先策略:
选择部署的节点
nodeName:硬匹配,不走调度策略。node01.
nodeSelector:根据节点的标签选择,会走调度算法。
只要是走调度算法,在不满足策略的情况下,所有的pod都是Pengding

node节点的亲和心:
硬策略:必须一定满足的条件。匹配原主也是根据节点的标签。
软策略:尽量满足你的要求,而不是一定满足。

如何部署pod是重要的集群的调度机制,合理的配置pod调度机制可以实现资源最大化利用。

调度策略匹配标签操作符拓扑域调度目标
node的亲和性主机标签In NotIn Exists DoesNotExist Gt Lt    不支持指定主机
pod的亲和性pod的标签In NotIn Exists DoesNotExist支持pod和指定标签的pod部署在同一拓扑域中
pod的反亲和性pod的标签In NotIn Exists DoesNotExist支持pod和指定标签的pod部署在不同的拓扑域中

拓扑域:k8s集群节点当中的一个组织结构,可以根据节点的物理关系或逻辑关系进行划分。
可以用来表示节点之间的空间关系,网络关系或者其他类型的关系。

这里的亲和性反亲和性都指的是标签。

node匹配的是主机的标签而pod匹配的是pod自己的标签

pod的亲和性

硬策略:

in

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx1name: nginx1
spec:replicas: 3selector:matchLabels:app: nginx1template:metadata:labels:app: nginx1spec:containers:- image: nginx:1.22.0name: nginxaffinity:podAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: appoperator: Invalues:- nginxtopologyKey: test#硬策略:表示部署在 node节点标签是test 且有 pod标签是app,app为nginx的节点

NotIN

apiVersion: apps/v1
kind: Deployment
metadata:labels:
apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx1name: nginx1
spec:replicas: 3selector:matchLabels:app: nginx1template:metadata: labels:app: nginx1spec:    containers:- image: nginx:1.22.0name: nginx affinity:podAffinity: requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions: - key: appoperator: NotInvalues:- nginxtopologyKey: test#硬策略:表示部署在node节点标签是test 且有 pod标签是app,app不为nginx的节点

exists

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx2name: nginx2
spec:replicas: 3selector:matchLabels:app: nginx2template:metadata:labels: app: nginx2 spec:containers:- image: nginx:1.22.0name: nginx2affinity:podAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector: matchExpressions:- key: appoperator: ExiststopologyKey: test#硬策略:表示部署在node节点标签是test 且有 pod标签是app

软策略

Exists

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx3name: nginx3
spec:replicas: 3selector:matchLabels:app: nginx3template:metadata:labels:app: nginx3spec:containers:- image: nginx:1.22.0name: nginx3affinity:podAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 1podAffinityTerm:labelSelector:matchExpressions:- key: appoperator: ExiststopologyKey: test#软策略:表示部署在node节点标签是test 且 pod标签是app

DoesNotExist

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx3name: nginx3
spec:replicas: 3selector:matchLabels:app: nginx3template:metadata:labels:app: nginx3spec:containers:- image: nginx:1.22.0name: nginx3affinity:podAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 1podAffinityTerm:labelSelector:matchExpressions:- key: appoperator: DoesNotExisttopologyKey: test#软策略:表示部署在node节点标签是test 且有 pod标签不是app

反亲和性

硬策略

IN

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx2name: nginx2
spec:replicas: 3selector:matchLabels:app: nginx2template:metadata:labels:app: nginx2spec:containers:- image: nginx:1.22.0name: nginx2affinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: appoperator: Invalues:- nginxtopologyKey: test#反亲和性---硬策略in:这里指test节点中含有app=nginx标签不部署服务
也就是说:除了指定声明的不部署服务,其他的节点部署

NotIn

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx2name: nginx2
spec:replicas: 3selector:matchLabels:app: nginx2template:metadata:labels:app: nginx2 spec: containers:- image: nginx:1.22.0name: nginx2affinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: appoperator: NotInvalues:- nginxtopologyKey: test

Exists

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx2name: nginx2
spec:replicas: 3selector:matchLabels:app: nginx2template:metadata:labels:app: nginx2spec:containers:- image: nginx:1.22.0name: nginx2affinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: appoperator: ExiststopologyKey: test#反亲和性---硬策略exists:这里指test节点中含有app标签不部署服务也就是说:除了此处声明的不部署服务,其他的节点部署 

DoesNotExist

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx2name: nginx2
spec:replicas: 3selector:matchLabels:app: nginx2template:metadata:labels:app: nginx2spec:containers:- image: nginx:1.22.0name: nginx2affinity:podAntiAffinity:requiredDuringSchedulingIgnoredDuringExecution:- labelSelector:matchExpressions:- key: appoperator: DoesNotExisttopologyKey: test#反亲和性---硬策略DoesNotExist:这里指test节点中不含有app标签不部署服务也就是说:除了此处声明的不部署服务,其他的节点部署 

软策略

apiVersion: apps/v1
kind: Deployment
metadata:labels:app: nginx2name: nginx2
spec:replicas: 3selector:matchLabels:app: nginx2template:metadata:labels:app: nginx2spec:containers:- image: nginx:1.22.0name: nginx2affinity:podAntiAffinity:preferredDuringSchedulingIgnoredDuringExecution:- weight: 1podAffinityTerm:labelSelector:matchExpressions:- key: appoperator: NotInvalues:- nginxtopologyKey: test
#并非强制,经过预先策略、优先策略后,满足条件就执行并非一定要,只是希望

注意点:

  1. pod的亲和性策略。在配置时,必须要加上拓扑域的关键字topologkey指向的是节点标签

  2. pod亲和性的策略也分为硬策略和软策略

  3. pod亲和性的notin可以替代反亲和性

  4. pod亲和性主要是为了把相关联的pod组件部署在同一节点上。例如:LNMP

污点和容忍

污点:taint是定义在node节点之上的键值型属性数据,用于让node节点拒绝将pod调度运行于其上。

  1. 污点和容忍可以配合node的亲和性一起使用。
  2. 污点是node的调用机制,不是pod的
  3. 被设为污点的节点,不会部署pod
  4. 污点和亲和性相反,亲和性是尽量选择 和 一定选择
  5. 污点的节点一定不被选择

taints三种类型

类型说明

NoSchedule

(一定是)

k8s不会把pod调度到这个节点上

PreferNoSchedule

(希望是,但不一定。)

如果污点类型是它,尽量避免把pod部署在该节点上。

(master节点的污点就是这个类型在一定程度上提高资源利用率)

NoExecute

(驱逐)

如果污点类型是它,k8s将会把该节点上的pod驱逐出去,而且也不会调度到这个节点。
查看污点
kubectl describe nodes 主机名 | grep -i taints
kubectl describe nodes master01 | grep -i taints设置污点
kubectl taint node 主机名 key=1:NoSchedule
#key=1设置标签的值
#:NoSchedule并将这个值与污点做映射
kubectl taint node node01 key=1:NoSchedule删除污点
kubectl taint node 主机名 标签:主机污点类型-
kubectl taint node node01 key:NoSchedule-

驱逐的情况下:

1、基于控制器创建的pod,虽然被驱逐,会在其他节点重新部署
     自主pod会被直接杀死

2、应用场景:节点服务器需要维护,服务器关机,节点上的pod会失效。在工作中,我们主要部署pod的方式控制器部署。deployment最多的。一旦节点设置为驱逐,控制器创建的pod会在其他节点重新部署。

3、所有的pod都会被驱逐,跟命名空间无关,所有的一切都会被驱逐。
4、不论你的创建方式是什么,都会被驱逐
5、系统集群组件(kube-proxy)不会被驱逐

NoExecute(驱逐):

kubectl taint node node02 key=1:NoExecute

容忍:
即使节点上设置了污点,有了容忍机制,依然可以在设置为污点的节点上部署pod
特殊情况:
    NoExecute依然可以部署pod,但是有生命周期,时间一到,pod会被销毁然后重新拉起。
    生命周期结束之后,会驱逐一部分pod到其他节点。有的节点还是会保留在污点节点上。
    节点维护完毕,测试一下节点的挂载是否正常。

容忍配置

例NoSchedule

​​apiVersion: apps/v1
kind: Deployment
metadata:creationTimestamp: nulllabels:test: nginx4name: nginx4
spec:replicas: 6selector:matchLabels:test: nginx4template:metadata:creationTimestamp: nulllabels:test: nginx4spec:containers:- image: nginx:1.22name: nginx4tolerations:
#tolerations:表示容忍- key: app
#这里的key是节点的标签名operator: Equalvalue: "1"effect: NoSchedule
#effect:表示对应的污点类型。必须要和节点的污点保持一致
#表示容忍节点上的标签是key。对应的标签值是1

例NoExecute

apiVersion: apps/v1
kind: Deployment
metadata:creationTimestamp: nulllabels:test: nginx2name: nginx2
spec:replicas: 6selector:matchLabels:test: nginx2template:metadata:creationTimestamp: nulllabels:test: nginx2spec:containers:- image: nginx:1.22name: nginx2tolerations:- key: keyoperator: Equalvalue: "1"effect: NoExecutetolerationSeconds: 36
#effect:表示对应的污点类型。必须要和节点的污点保持一致
#表示容忍节点上的标签是key。对应的标签值是1
#tplerationSeconds:设置节点可以容忍多长时间,单位为秒

不指定key

apiVersion: apps/v1
kind: Deployment
metadata:creationTimestamp: nulllabels:app: nginxname: nginx
spec:replicas: 6selector:matchLabels:app: nginxtemplate:metadata:creationTimestamp: nulllabels:app: nginxspec:containers:- image: nginx:1.22name: nginxtolerations:- operator: Existseffect: NoSchedule
#如果没有声明key和value。将会容忍所有污点的key。
##key对应节点的污点类型是NoSchedule

没有key,不匹配节点标签,容忍所有污点,但是类型是指定的类型。

指定节点的标签值(key),但是不指定污点的类型(effect)

apiVersion: apps/v1
kind: Deployment
metadata:creationTimestamp: nulllabels:app: nginxname: nginx
spec:replicas: 3selector:matchLabels:app: nginxtemplate:metadata:creationTimestamp: nulllabels:app: nginxspec:containers:- image: nginx:1.22name: nginxtolerations:- key: keyoperator: Exists
#指定key没指定effect,所有节点上只要包含了这个指定的标签名,可以容忍所有的污点

指定节点的标签值,但是不指定污点的类型,那么所有节点上只要包含了这个指定的标签名,可以容忍所有的污点

总结:pod的亲和性和反亲和性

污点和容忍
工作内容:任何选择node节点的部署pod
多个master节点:
kubectl taint node master节点名称 node-role.kubernetes.io/master=:PreferNoSchedule
尽量不往master节点上部男pod,但是不是一定的。防止资源浪费。自定义一个标签
业务维护:
node02需要维护2小时,但这个节点的业务pod在运行。
就需要把这个节点的污点设置为:NoExeccute
我们部署pod一般都使用deployment部署,会在其他的重新部署,并不是被杀死自主式的pod会被杀死。
自主式的pod会被杀死。
一旦节点恢复,要把污点去除。

cordon和drain

cordon

cordon:可以直接把节点标记为不可用状态

设置为不可调度状态:

kubectl cordon 节点名
kubectl cordon master01

取消不可调度状态      

kubectl uncordon 节点名
kubectl uncordon master01

drain

drain:排水,把该节点下的pod全部转移到其他的node节点上运行。
1、一旦执行drain,被执行的节点会变成不可调度的状态
2、会驱逐该节点上的所有pod


设置驱逐节点

kubectl drain node02 --ignore-daemonsets --delete-emptydir-data --force#drain:开始标记node节点为不可调度。然后驱逐pod
#--ignore-daemonsets:表示忽视。会无视daemonsets部署的pod。他还会在原节点上。
#--delete-local-data:如果有本地挂载卷的pod将会被强制杀死
#--force:强制释放不是控制器管理的pod
#是控制器创建的将会被驱逐。不是控制器创建的将会被杀死
#daemonsets一般部署的都是重要的后台系统pod。所以会忽略

取消标记驱逐节点

kubectl uncordon 节点名
kubectl uncordon master01

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/609618.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[VSCode] VSCode 常用快捷键

文章目录 VSCode 源代码编辑器VSCode 常用快捷键分类汇总01 编辑02 导航03 调试04 其他05 重构06 测试07 扩展08 选择09 搜索10 书签11 多光标12 代码片段13 其他 VSCode 源代码编辑器 官网:https://code.visualstudio.com/ 下载地址:https://code.visua…

【排序算法】二、希尔排序(C/C++)

「前言」文章内容是排序算法之希尔排序的讲解。(所有文章已经分类好,放心食用) 「归属专栏」排序算法 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 希尔排序1.1 原理1.2 代码实现(C/C)1.3 特性总结 希尔排序 1.1…

数据结构-测试1

一、判断题 1.队列中允许插入的一端叫队头,允许删除的一端叫队尾(F) 队列中允许删除的一端叫队头(front),允许插入的一端叫队尾(rear) 2. 完全二叉树中,若一个结点没有左孩子&#…

Developer Tools for Game Creator 1

插件包含: 持久世界时间管理系统 单击以生成对象或预设 游戏内调试控制台 游戏内事件控制台 控制台管理控制 命令模板脚本 游戏内屏幕截图 低分辨率和高分辨率图像 缩略图生成 移动支持 使用Game Creator Action或拖放来激活和控制组件,无需编码。 通过此资产,您可以获得: …

初识 Elasticsearch 应用知识,一文读懂 Elasticsearch 知识文集(1)

文章目录 🏆 初识 Elasticsearch 应用知识🔎 初识 Elasticsearch 应用知识(1)🍁🍁 01、什么是 Elasticsearch?🍁🍁 02、能列出 10 个使用 Elasticsearch 作为其搜索引擎或数据库的公司吗&#x…

2023 年度合辑 | 出海大年的全球化产品洞察和服务动向

2023 年度合辑 年度关键词 出海&全球化 出海 & 全球化通信服务全面升维 出海大年,融云全球互联网通信云作为“全球化最佳基础设施”之一,发挥技术沉淀和实践积累带来的核心优势,结合市场变化对出海 & 全球化通信服务进行了全方位…

李沐之神经网络基础

目录 1.模型构造 1.1层和块 1.2自定义块 1.3顺序块 1.4在前向传播函数中执行代码 2.参数管理 2.1参数访问 2.2参数初始化 3.自定义层 3.1不带参数的层 3.2带参数的层 4.读写文件 4.1加载和保存张量 4.2加载和保存模型参数 1.模型构造 1.1层和块 import torch fr…

c JPEG编码,但有错误

#include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdlib.h> #include <unistd.h> #include <sys/ioctl.h> #include <linux/videodev2.h> //v4l2 头文件 #include <strin…

MySQL之数据的导入、导出远程备份

目录 一. navicat的导入、导出 1.1 导入 1.2 导出 二. mysqldump命令导入、导出 2.1 导出 2.2 导入 三. LOAD DATA INFILE 命令导入、导出 3.1 设置 3.2 导出 3.3 导入 3.4 查看secure_file_priv设置 四. 远程备份 4.1 导出 4.2 导入 五. 思维导图 一. navicat的导入、导…

podman configure insecure certificate registry【podman 设置非安全镜像仓库】

预备条件 docker registry仓库私搭并配置证书centos 7.9 部署 harbor 镜像仓库实践harbor 部署入门指南Podman 部署私有镜像仓库 设置 $ vim /etc/hosts 192.168.23.47 registry.ghostwritten.com$ vim /etc/containers/registries.conf ... [[registry]] location "r…

7.2 1D PARALLEL CONVOLUTION—A BASIC ALGORITHM

正如我们在第7.1节中提到的&#xff0c;所有输出&#xff08;P&#xff09;元素的计算可以在卷积中并行完成。这使得卷积成为并行计算的理想问题。根据我们在矩阵-矩阵乘法方面的经验&#xff0c;我们可以快速编写一个简单的并行卷积内核。为了简单起见&#xff0c;我们将从1D卷…

【liunx】线程池+单例模式+STL,智能指针和线程安全+其他常见的各种锁+读者写者问题

线程池单例模式STL,智能指针和线程安全其他常见的各种锁读者写者问题 1.线程池2.线程安全的单例模式3.STL,智能指针和线程安全4.其他常见的各种锁4.读者写者问题 喜欢的点赞&#xff0c;收藏&#xff0c;关注一下把&#xff01; 1.线程池 目前我们学了挂起等待锁、条件变量、信…

【排序算法】一、排序概念和直接插入排序(C/C++)

「前言」文章内容是排序算法之直接插入排序的讲解。&#xff08;所有文章已经分类好&#xff0c;放心食用&#xff09; 「归属专栏」排序算法 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、排序概念的介绍二、直接插入排序2.1 原理2.2 代码实现&#xff08;C/C&#xf…

Linux的网络设置

一.查看网络配置 1.查看网络接口信息 - ifconfig ① 直接使用 ifconfig 命令 默认显示活动的网卡 解析&#xff1a; ② ifconfig 具体网卡名称 只显示具体的网卡的信息 ③ ifconfig -a 显示所有的网卡 ④ ifconfig 网卡名称 down 关闭网卡 ifdown 关闭网卡 …

2024年01月微软更新Bug 已解决 !Explorer.EXE 提示:Windows无法访问指定设备、路径或文件。你可能没有适当的权限访问该项目。

前倾概要 近期大量出现如上图问题&#xff0c;杀毒&#xff0c;系统急救箱都没反应&#xff0c;罪魁祸首就是微软更新&#xff01; 点击什么都是&#xff1a;Windows无法访问指定设备、路径或文件。你可能没有适当的权限访问该项目。 但软件使用正常&#xff0c;还能通过建立…

【产品应用】一体化伺服电机在管道检测机器人中的应用

一体化伺服电机在管道检测机器人的应用正日益受到关注。管道检测机器人是一种能够在管道内部进行检测和维护的智能化设备&#xff0c;它可以检测管道的内部结构、泄漏、腐蚀等问题&#xff0c;以确保管道的安全和稳定运行。而一体化伺服电机作为机器人的动力源&#xff0c;对于…

20230403读书笔记|《苏轼词集》——试问岭南应不好,此心安处是吾乡

20230403读书笔记|《苏轼词集》——试问岭南应不好&#xff0c;此心安处是吾乡 导读卷一卷二卷三 在书架里加了好几本苏轼词集&#xff0c;很多词是重复的&#xff0c;但这并不影响多读几本&#xff0c;苏轼的词豪迈大气&#xff0c;豁达爽朗&#xff0c;蛮值得一读的。有不少都…

中小型家具制造业使用制造管理MES系统应该注意什么?

随着人们生活水平变高&#xff0c;人们对家具的要求也在提高。为了应对越来越高的要求&#xff0c;企业开始寻找更有效的方法&#xff0c;其中就包括mes系统&#xff0c;那么中小型家具企业在使用mes的过程中应该注意什么呢&#xff1f; 第一&#xff0c;要考虑选择什么样的mes…

【数据结构】二叉树的链式实现

树是数据结构中非常重要的一种&#xff0c;在计算机的各方个面都有他的身影 此篇文章主要介绍二叉树的基本操作 目录 二叉树的定义&#xff1a;二叉树的创建&#xff1a;二叉树的遍历&#xff1a;前序遍历&#xff1a;中序遍历&#xff1a;后序遍历&#xff1a;层序遍历&#…

Mendeley Word 文献引用

这里写目录标题 1. 下载Mendeley 并插入到Word1.1 下载安装1.2 在Word 中添加Mendeley 插件文献引用相关 1. 下载Mendeley 并插入到Word 1.1 下载安装 Mendeley 官网下载 1.2 在Word 中添加Mendeley 插件 打开 Mendeley&#xff0c;点击 Tools —>Install Mendeley Cite…