如何指定pod的运行节点?
发布网友
发布时间:2022-11-24 04:16
我来回答
共1个回答
热心网友
时间:2024-10-12 01:06
一般情况下kubernets可以通过kube-scheler默认的调度策略合理的将pod分配到可用的节点上, 但是随着pod数量的增加以及不同pod对资源的使用情况不同我们需要更加合理的分配集群中的资源, 所以对一些pod运行节点的控制是由必要的。
源于硬件和软件层多样性,我们需要将某个 pod 调度到某些特定的节点上,例如指定机房,存储类型,网络类型等等:
有两种方法 nodeSelector 以及 affinity 可以实现对应的需求
K8S中pod的调度都是通过节点label实现的, 所以对于除必要的节点label外对于其它用途也要做一些规划
设置参数
为 node 设置 taint 与 label:
or
删除taint:
删除node的label
查看 node上的 taint:
查看node1的label
kubernetes中是通过label-selector机制进行节点选择,由scheler调度策略 MatchNodeSelector 进行label匹配,调度pod到目标节点,该匹配规则是强制约束。
类型包括:
*方式:
匹配逻辑label
如果nodeAffinity中nodeSelector有多个选项,节点满足任何一个条件即可;如果matchExpressions有多个选项,则节点必须同时满足这些选项才能运行pod 。需要说明的是,node并没有anti-affinity这种东西,因为NotIn和DoesNotExist能提供类似的功能。
这个 pod 同时定义了 requiredDuringSchelingIgnoredDuringExecution 和 preferredDuringSchelingIgnoredDuringExecution 两种nodeAffinity。第一个要求 pod 运行在特定 devops 的节点上,第二个希望节点最好有对应的department:model和dedicated:app标签, 根据权重决定了顺序 NodeSelectorTerms 可以有多个,之间是或的关系,满足任意一个既满足, MatchExpressions 也可以有多个,他们之间是且的关系 必须都满足
preferredDuringSchelingIgnoredDuringExecution 值为列表,根据权重决定顺序 MatchExpressions 值为列表 关系为且,必须都满足
PodAffinit是根据通过已运行在节点上的pod的标签而不是node的标签来决定被调度pod的运行节点,因为pod运行在指定的namespace所以需要自己指定运行pod的namesapce
上面这个例子中的 POD 需要调度到某个指定的主机上,至少有一个节点上运行了这样的 POD:这个 POD 有一个app=busybox-pod的 label。podAntiAffinity则是希望最好不要调度到这样的节点:这个节点上运行了某个 POD,而这个 POD 有app=node-affinity-pod的 label。根据前面两个 POD 的定义,我们可以预见上面这个 POD 应该会被调度到一个busybox-pod被调度的节点上,而node-affinity-pod被调度到了该节点以外的节点
对于nodeAffinity无论是硬策略还是软策略方式,都是调度 POD 到预期节点上,而Taints恰好与之相反,如果一个节点标记为 Taints ,除非 POD 也被标识为可以容忍污点节点,否则该 Taints 节点不会被调度pod。
比如用户希望把 Master 节点保留给 Kubernetes 系统组件使用,或者把一组具有特殊资源预留给某些 POD,则污点就很有用了,POD 不会再被调度到 taint 标记过的节点。taint 标记节点举例如下:
如果仍然希望某个 POD 调度到 taint 节点上,则必须在 Spec 中做出Toleration定义,才能调度到该节点,举例如下:
effect 共有三个可选项,可按实际需求进行设置:
设置label 和 taint, edgenode为特殊属性的节点所以需要设置taint
资源文件
运维服务部署在固定的几台主机上, 每个主机设置 department 的label, 部署服务时指定该label
设置label
资源文件
如何指定pod的运行节点?
第一个要求 pod 运行在特定 devops 的节点上,第二个希望节点最好有对应的department:model和dedicated:app标签, 根据权重决定了顺序 NodeSelectorTerms 可以有多个,之间是或的关系,满足任意一个既满足, MatchExpressions 也可以有多个,他们之间是且的关系 必须都满足 preferredDuringSchedulingIgnoredDu...
k8s一个pod加载多个containers,指定pod运行的node
假设以下场景:有三个Node,分别为107、108、109,创建Deployments来部署Tomcat应用,指定在107节点上创建Pod。解决方案 nodeName Pod.spec.nodeName将Pod直接调度到指定的Node节点上,会跳过Scheduler的调度策略,该匹配规则是强制匹配。Tomcatl.yaml文件 apiVersion: extensions/v1beta1 kind: Deployment met...
jenkinspipeline如何可以指定执行某个节点?
基础环境准备确保Jenkins Agent端口可访问,修改全局安全配置中的代理(TCP port for inbound agents)为30634,同时更新Kubernetes Pod暴露的端口。若使用临时解决办法,可以在Jenkins控制器资源清单中设置`hostNetwork: true`。添加新的Jenkins agent节点,操作步骤包括:在Dashboard中管理节点,新建节点并按照提...
简述Kubernetes Scheduler使用哪两种算法将Pod绑定到worker节点?
预选(Predicates):输入是所有节点,输出是满足预选条件的节点。kube-scheduler根据预选策略过滤掉不满足策略的Nodes。如果某节点的资源不足或者不满足预选策略的条件则无法通过预选。如“Node的label必须与Pod的Selector一致”。优选(Priorities):输入是预选阶段筛选出的节点,优选会根据优先策略为通过预选的...
CKA备考实验 | 节点taint及pod的tolerations
需要理解,节点设置污点,pod设置容忍污点,并不意味着pod一定能在该节点上运行,还需要通过label指定pod运行在特定节点上。删除此pod。删除vms11的污点设置。给vms11重新设置多个污点。尝试在podtaint.yaml不修改的情况下再次运行pod,发现状态为Pending,因为pod的容忍污点没有与节点的所有污点匹配。删除此...
kubernetes入门:pod、节点、容器和集群都是什么?
Pod是Kubernetes集群中最小的可运行单元,代表着集群中运行的进程,能够共享网络和存储资源。一个Pod内部可以同时运行一个或多个容器,通过Pause容器使得容器之间可以共享网络、共享存储。节点是Kubernetes中的最小计算硬件单元,可以理解为集群中的单个机器。节点汇聚资源,形成更强大的计算能力。集群作为一个...
Kubernetes——Pod控制器详解
使用压测工具对service地址 192.168.109.100:31136 进行压测,然后通过控制台查看hpa和pod的变化 hpa变化 deployment变化 pod变化 DaemonSet类型的控制器可以保证在集群中的每一台(或指定)节点上都运行一个副本。一般适用于日志收集、节点监控等场景。也就是说,如果一个Pod提供的功能是节点级别的(每个...
Kubernetes-Pod基本概念(六)
运行应用两大步骤:1)构建镜像并推送至镜像仓库中;2)K8s创建pod进行调度;流程: 1)本地构建镜像; 2)推送镜像至镜像仓库; 3)kubectl创建并部署应用; 4)kubectl发出REST请求至REST API服务器; 5)创建pod并调度到工作节点; 6)kubelet收到通知; 7)...
持续集成案例之使用Docker运行自构建Jenkins的Agent镜像固定工作节点实 ...
遂利用装有Docker的机器,立即使用自行构建的jenkins-jnlp-agent镜像,并在 jenkins 中创建一个固定节点,通过docker运行该镜像并连接到Jenkins,在流水线项目绑定到该节点执行,通过几分钟的时间就快速解决了jenkins agent问题,在项目完成持续集成和交互后,趁着间隙更新Jenkins上配置连接kubernetes apiserver的...
Kubernetes:默认调度器三大机制
Predicates 在调度过程中的作用,可以理解为 Filter ,即:它按照调度策略,从当前集群的所有节点中,“过滤”出一系列符合条件的节点。这些节点,都是可以运行待调度 Pod 的宿主机。 GeneralPredicates 负责的是最基础的调度策略。比如, PodFitsResources 计算的就是宿主机的 CPU 和内存资源等是否够用。 PodFitsResources ...