这里指定“同一位置” 是通过 topologyKey 来定义的,topologyKey 对应的值是 node 上的一个标签名称,比如各别节点zone=A标签,各别节点有zone=B标签,pod affinity topologyKey定义为zone,那么调度pod的时候就会围绕着A拓扑,B拓扑来调度,而相同拓扑下的node就为“同一位置”。 顾名思义,topology 就是 拓扑的意思,这...
三、podAffinity pod亲和性 基于“节点标签”进行设置,第一个pod副本创建在了哪个节点上,那么其余副本也会创建在这个节点上; 拓扑域:节点机器的标签的key和value都相等的机器,就是同一个拓扑域; 1. 编辑资源清单设置pod亲和性 [root@master deployment-demo]# cat dm-affinity.yaml apiVersion: apps/v1 kind: ...
偶尔,出于安全或分布式等原因也有可能需要将一些 Pod 对象在其运行的位置上隔离开来,如在每个区域运行一个应用代理 Pod 对象等,此时可把这些 Pod 对象间的关系称为反亲和性(anti-affinity)。 Kubernetes 调度器通过内建的 MatchInterPodAffinity 预选策略为这种调度方式完成节点预选,并基于 InterPodAffinityPriority 优选...
topologyKey: "http://kubernetes.io/hostname" 如上,这将确保 pod 被调度到不同的节点上(仅在调度时检查,而不是在执行时,因此需要在调度时忽略执行期间检查),从而提高系统的可用性和容错能力。 我们说的是不同节点名称上的 podAntiAffinity 而不是不同的可用性区域,即 topologyKey:"http://kubernetes.io/host...
我们讨论的是不同节点名称上( topologyKey: "kubernetes.io/hostname" )的 podAntiAffinity,而不是不同可用区域的 podAntiAffinity。如果你确实需要很好的可用性水平,可以在这个主题上再深入做些研究。 7无 PodDisruptionBudget 我们在 Kubernetes 上运行生产负载。我们的节点和集群必须不时升级或停用。PodDisruptionBud...
BestEffort配置(pod的requests与limits均为0): resources: {} CPU 性能极低的情况: resources: requests: cpu: "1m" 另一方面,即使CPU未被充分利用,不恰当的CPU限制也会限制pod的运行,同样会导致延迟。 关于Linux内核中的CPU CFS配额,以及基于CPU设置的CPU节流和关闭CFS配额的问题,曾有过公开讨论:过度限制CPU带来...
Affinity主要分为三类: nodeAffinity(node亲和性):以node为目标,解决pod可以调度到哪些node的问题。 podAffinity(pod亲和性):以pod为目标,解决pod可以和哪些以存在的pod部署在同一个拓扑域中的问题。 podAntiAffinity(pod反亲和性):以pod为目标,解决pod不能和哪些已存在pod部署在同一个拓扑域中的问题。
在Kubernetes 项目中,默认调度器的主要职责,就是为一个新创建出来的 Pod,寻找一个最合适的节点(Node)。 而这里“最合适”的含义,包括两层: 从集群所有的节点中,根据调度算法挑选出所有可以运行该 Pod 的节点; 从第一步的结果中,再根据调度算法挑选一个最符合条件的节点作为最终结果。
我们这里讨论的是在不同节点(这里是 topologyKey: "kubernetes.io/hostname")上的 pod 反亲和性(podAntiAffinity),而不是不同可用区域的 pod 反亲和性。如果你真的需要高可用性,你应该更加深入地探讨这个话题。没有 poddisruptionbudget 你是在 K8s 上运行生产环境的工作负载。你的节点和集群必须不时地升级或...
VerticalPodAutoscaler[2] 工具可以帮助你自动化这一手动过程:包括及时查看 CPU/内存的使用情况,以及基于使用情况设置新的 request 和 limit 的值。 高效地利用你的计算资源并非易事。就像一直在玩俄罗斯方块。如果发现自己在平均利用率很低(例如10%)的情况下为计算支付了大量费用,那么你可能需要看看基于 AWS Fargate...