首页 > 其他分享 >Kubernetes之Pod调度策略

Kubernetes之Pod调度策略

时间:2024-03-23 23:23:00浏览次数:26  
标签:Node Kubernetes 亲和性 调度 taints deployment Pod

一、NodeSelector:定向调度 1. 基本原理   在 Kubernetes 上部署应用时,有时候可能需要限制 Pod 的调度范围,将 Pod 调度到指定的一些 Node 上。此时,可以为需要调度的这些 Node 打上标签,同时设置 Pod 的 nodeSelector 属性,使二者相匹配来达到定向调度的目的。 2. 简单实践 (1)为目标 Node 打标签 (2)为 Pod 设置 nodeSelector 属性 (3)创建 deployment   可以看到,该 deployment 创建的 3 个 pod 都调度到了打了对应标签的 Node 上。 (4)注意事项   如果指定了 Pod 的 nodeSelector 属性,但没有给任何 Node 打上对应的标签,则 Pod 将无法成功调度,一直处于 Pending 状态。     二、NodeAffinity:Node 亲和性调度 1. 基本原理   NodeAffinity 是用于替换 NodeSelector 的全新调度策略,目前有两种亲和性表达: (1)RequiredDuringSchedulingIgnoredDuringExecution:必须满足指定的规则才可以调度 Pod 到 Node 上(功能与 nodeSelector 相似),相当于硬限制。 (2)PreferredDuringSchedulingIgnoredDuringExecution:强调优先满足指定规则,调度器会尝试调度 Pod 到 Node 上,但并不强求,相当于软限制。多个优先级规则还可以设置权重值,以定义执行的先后顺序。 IgnoredDuringExecution 的意思是:如果一个 Pod 所在的节点在 Pod 运行期间标签发生了变更,不再符合该 Pod 的节点亲和性需求,则系统将忽略 Node 上标签的变化,该 Pod 还能继续在该节点上运行。 2. 简单实践 (1)在 deployment 规约中定义 nodeAffinity   这里 nodeAffinity 定义的规则为:只运行在 amd64 的节点上,同时尽量运行在 disk-type=ssd 的节点上。   NodeAffinity 语法支持的操作符:In、NotIn、Exists、DoesNotExists、Gt、Lt。 (2)给节点打标签 (3)创建 deployment   可以看到,满足硬限制但不满足软限制的 Node 也被调度了 Pod 运行。 (4)注意事项 <1>如果同时定义了 NodeSelector 和 nodeAffinity,那么必须两个条件都得到满足,Pod 才能最终运行在指定的 Node 上。 <2>如果 nodeAffinity 指定了多个 NodeSelectorTerms,那么其中一个能匹配成功即可。 <3>如果在 NodeSelectorTerms 中有多个 matchExpressions,则一个节点必须满足所有 matchExpressions 才能运行该 Pod。     三、PodAffinity:Pod 亲和与反亲和调度 1. 基本原理   在实际的生产环境中有一类特殊的 Pod 调度需求:存在某些相互依赖、频繁调用的 Pod,它们需要被尽可能地部署在同一个 Node 节点、机架、机房、网段或者区域内,这就是 Pod 之间的亲和性;反之,出于避免竞争或者容错的需求,我们也可能使某些 Pod 尽可能地远离某些特定的 Pod,这就是 Pod 之间的反亲和性或者互斥性。   简单地说,就是相关联的两种或多种 Pod 是否可以在同一个拓扑域中共存或者互斥,前者被称为 Pod Affinity,后者被称为 Pod Anti Affinity。拓扑域可以是区域、机房、机架,甚至可用是一个节点。   定义调度策略时,先为 Pod 设置 topologyKey 属性,声明拓扑域,然后再定义亲和与反亲和的规则。 2. 简单实践 (1)创建参照目标 Pod

(2)Pod 的亲和性调度   Pod 亲和性调度策略:希望与带有 security=S1 标签的 Pod 调度到同一个 Node 上。   可以看到 deployment 创建出来的三个 Pod 都被调度到 flag-pod 运行的 Node 上了。 (3)Pod 的反亲和性调度   Pod 互斥性调度策略:希望 Pod 被调度到与带有 app=flag-pod 标签的 Pod 不同的 Node 上。   可以看到 deployment 创建出来的三个 Pod 都被调度到与 flag-pod 不同的 Node 上了。     四、Taints and Tolerations:污点和容忍 1. 基本原理   NodeAffinity 使得 Pod 能够被调度到某些 Node 上运行,taints 则相反,它让 Node 拒绝 Pod 的运行,除非 Pod 定义了对应的 tolerations。   Node 声明 taints 的格式示例:   Pod 声明 tolerations 的格式示例: 要使得 Pod 能够在定义了 taints 的 Node 上运行,则 Pod 定义 tolerations 的 key 和 effect 需要与 taints 的设置保持一致,operator 为 Exists,或者 operator 为 Equal 且 value 与 taints 的 value 相等。   其中,effect 有三种取值: (1)NoSchedule:一个 Pod 如果没有声明容忍这个 taint,则不会被调度到这个 Node 上。 (2)PreferNoSchedule:一个 Pod 如果没有声明容忍这个 taint,则系统会尽量避免将这个 Pod 调度到这个 Node 上,但不是强制的,相当于 NoSchedule 的软限制版本。 (3)NoExecute:为一个 Node 加上 taint 后,该 Node 上运行的所有无对应 toleration 的 Pod 都会被立刻驱逐,同时系统也允许设置 tolerationSeconds 字段,单位为秒,表示这个 Pod 在 taint 添加到 Node 上以后还能在这个 Node 上运行多久。 2. 简单实践 (1)创建不带 tolerations 的 Pod

(2)为 Node 设置 taints (3)查看 pod   可以看到,Node 设置完 taints 以后,deployment 中两个位于该 Node 上的 Pod 都被驱逐了,在另一个 Node 上拉起了新的 Pod 副本。 (4)删除 Node 的 taints 3. 应用场景 (1)将集群中某些 Node 专门给特定应用使用。 (2)将具有特殊硬件设备的 Node 提供给对这类硬件有需求的 Pod,而将不需要这类硬件的 Pod 排除在外。 (3)定义 Pod 驱逐行为,以应对 Node 故障。         参考: 《Kubernetes 权威指南第 5 版》    

标签:Node,Kubernetes,亲和性,调度,taints,deployment,Pod
From: https://www.cnblogs.com/wujuntian/p/18091892

相关文章

  • Java面试题:用Java并发工具类,实现一个线程安全的单例模式;使用Java并发工具包和并发框架
    面试题一:设计一个Java并发工具类,实现一个线程安全的单例模式,并说明其工作原理。题目描述:请设计一个Java并发工具类,实现一个线程安全的单例模式。要求使用Java内存模型、原子操作、以及Java并发工具包中的相关工具。考察重点:对Java内存模型的理解。对Java并发工具包的了......
  • 【复现】【免费】基于多时间尺度滚动优化的多能源微网双层调度模型
    目录主要内容     部分代码     结果一览   1.原文结果2.程序运行结果下载链接主要内容   该模型参考《CollaborativeAutonomousOptimizationofInterconnectedMulti-EnergySystemswithTwo-StageTransactiveControlFramework》,主要解决的......
  • Podman能够替代Docker吗
    导读:参考:ExploringPodman:AMoreSecureDockerAlternative作者:MarinBezhanov网址:https://betterstack.com/community/guides/scaling-docker/podman-vs-docker/该随笔为文章部分摘要和学习笔记架构区别Docker属于CS架构(client-server),Podman利用了无守护架构(daemonless......
  • 【漏洞复现】福建科立迅通信指挥调度平台pwd_update.php SQL注入漏洞 (CVE-2024-2621)
        免责声明:文章来源互联网收集整理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。          ......
  • Kubernetes之Pod工作负载
    Pod工作负载,亦称Pod控制器。在Kubernetes平台上,我们很少会直接创建一个Pod,因为直接管理单个Pod的工作量将会非常繁琐。我们可以使用KubernetesAPI创建工作负载对象,这些对象所表达的是比Pod更高级别的抽象概念,Kubernetes 控制平面根据我们定义的工作负载对象规......
  • [Container] Introduction to Kubernetes
    DefineKubernetesAlsoknowasK8S,isanopen-sourcesystemforautomatingdeployment,scaling,andmanagementofcontainerizedapplications.Anopensourcecontainerizationorchestrationpaltform.Easolyportableacrosscloudsandon-premisesIncludes......
  • 综合能源系统多时间尺度优化调度研究综述
    1.研究背景        随着全球能源需求的增长以及环境保护的压力,综合能源系统(IES)成为了实现能源可持续发展的关键方案之一。IES通过集成多种能源资源,优化能源的产、供、存、消过程,提高能源利用效率,减少环境污染。然而,可再生能源的高度不确定性和负荷需求的波动为IES的优......
  • Win7下做一个Kubernetes的NetCore项目Demo
    建立K8s集群Demo,将一个建立好的AspNetCore项目加入到集群中。一准备工作IDEVS2017Win7下需要dockertools(打包Dockerimage)一个VM,笔者用的是VMwareWorkstationPro15(破解版)注册一个https://hub.docker.com/账户安装一个WinSCP用来windows和linux传送文件,......
  • K8S单机部署-11.安装Kubernetes Metrics Server监控
    目录现象安装Metric-Server版本关系下载部署文件修改镜像地址部署验证效果问题一原因解决办法现象当需要查看资源的占用的时候执行以下命令,提示缺少组件:[root@masterk8s-metric-server]#kubectltoppoderror:MetricsAPInotavailable安装Metric-Server......
  • 如何在Kubernetes集群中集成Cromwell和Volcano(概述)
    将Cromwell和Volcano在Kubernetes集群中集成,使用Volcano作为Cromwell调度器,涉及到在Kubernetes集群上安装和配置这两个系统以及确保它们能够无缝协作。以下是一个基于理解和实际操作经验的概括步骤,旨在指导如何进行这一集成:步骤1:安装Kubernetes集群确保你已经......