Pod的调度策略
Pod的调度策略
主要概念
主机层
nodeSelector
备注:
1. 如果nodeSelectorTerms下⾯有多个选项的话,满⾜任何⼀个条件就可以了;如果matchExpressions有多个选项的话,则必须同时满⾜
这些条件才能正常调度 POD。
2. 如果我们的⽬标节点没有可⽤的资源,我们的 Pod 就会⼀直处于 Pending 状态
pod层
亲和性:
节点亲和性(nodeAffinity)、podAffinity(pod 亲和性) 以及 podAntiAffinity(pod 反亲和性)
策略:
软策略(preferredDuringSchedulingIgnoredDuringExecution)就是如果你没有满⾜调度要求的节点的话,pod 就会忽略这条规则,继续完成调度过程,说⽩了就是满⾜条件最好了,没有的话也⽆所谓了的策略
硬策略(requiredDuringSchedulingRequiredDuringExecution)就⽐较强硬了,如果没有满⾜条件的节点的话,就不断重试直到满⾜条件为⽌,简单说就是你必须满⾜我的要求,不然我就不⼲的策略
whenUnsatisfiable(topologySpreadConstraints)
DoNotSchedule (默认) 告诉调度器不要调度该 Pod,因此 DoNotSchedule 也可以叫作硬需求 (hard requirement);
建筑合同
巨蟹女狮子男ScheduleAnyway 告诉调度器根据每个 Node 的 skew 值打分排序后仍然调度,因此 ScheduleAnyway 也可以叫作软需求 (soft requirement);
强制性
nodeSelector、硬策略、topologySpreadConstraints(DoNotSchedule、topologyKey 、maxSkew)…
⾮强制性
软策略、ScheduleAnyway …
污点(taints)与容忍(tolerations)
对于nodeAffinity⽆论是硬策略还是软策略⽅式,都是调度 pod 到预期节点上,⽽Taints恰好与之相反,如果⼀个节点标记为 Taints ,除⾮pod 也被标识为可以容忍污点节点,否则该 Taints 节点不会被调度 pod。
⽐如⽤户希望把 Master 节点保留给 Kubernetes 系统组件使⽤,或者把⼀组具有特殊资源预留给某些 pod,则污点就很有⽤了,pod 不会再被调度到 taint 标记过的节点。
打污点: kubectl taint nodes node02 test=node02:NoSchedule
去污点: kubectl taint nodes node02 test-
羼水的拼音每⼀个污点都可以关联⼀个效果, 效果包含了以下三种:滕王高阁临江渚
怎样鉴别玉器
NoSchedule 表⽰如果 pod 没有容忍这些污点, pod 则不能被调度到包含 这些污点的节点上。
PreferNoSchedule 是 NoSchedule 的⼀个宽松的版本, 表⽰尽量阻⽌pod 被调度到这个节点上, 但是如果没有其他节点可以调度, pod 依然会被调度到这个节点上。
NoExecute 不同于 NoSchedule 以及 PreferNoSchedule, 后两者只在调度期间起作⽤, ⽽ NoExecute 也会影响正在节点上运⾏着的 pod。 如果 在⼀个节点上添加了 NoExecute 污点, 那些在该节点上运⾏着的 pod, 如果没有容忍这个 NoExecute 污点, 将会从这个节点去除。
对于 tolerations 属性的写法,其中的 key、value、effect 与 Node 的 Taint 设置需保持⼀致, 还有以下⼏点说明:
如果 operator 的值是 Exists,则 value 属性可省略
寿州窑
如果 operator 的值是 Equal,则表⽰其 key 与 value 之间的关系是 equal(等于)
如果不指定 operator 属性,则默认值为 Equal
另外,还有两个特殊值:
空的 key 如果再配合 Exists 就能匹配所有的 key 与 value,也是是能容忍所有 node 的所有 Taints
空的 effect 匹配所有的 effect
调度使⽤
10.9.22.31 Ready node 9d v1.15.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernet es.io/hostname=10.9.22.31,kubernetes.io/os=linux,kubernetes.io/role=node
10.9.22.38 Ready node 9d v1.15.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernet es.io/hostname=10.9.22.38,kubernetes.io/os=linux,kubernetes.io/role=node
10.9.22.39 Ready node 9d v1.15.0 beta.kubernetes.io/arch=amd64,beta.kubernetes.io/os=linux,kubernetes.io/arch=amd64,kubernet es.io/hostname=10.9.22.39,kubernetes.io/os=linux,kubernetes.io/role=node
nodeSelector:
kubernetes.io/hostname: 10.9.22.39
指定主机组
nodeSelector:
kubernetes.io/role: node
独占主机
nodeSelector:
kubernetes.io/hostname: 10.9.22.38 tolerations:
-key: kubernetes.io/hostname operator: Equal
value: 10.9.22.38
effect: NoSchedule洋葱炒牛排
亲和性默认部署亲和生炒牛肉怎么炒嫩