kubernetes 跨节点的Pod分布

zbdgwd5y  于 2023-01-08  发布在  Kubernetes
关注(0)|答案(2)|浏览(191)

我有一个关于pod跨节点分布的问题。我喜欢的是给定一个3节点群集,我想部署一个具有2个副本的pod,同时确保这些副本部署在不同的节点上,以实现高可用性。除了使用nodeAffinity之外,还有哪些选项?

zfycwa2u

zfycwa2u1#

首先,节点关联允许您根据节点上的标签来约束可以在哪些节点上调度Pod。因此,它不能保证每个副本都部署在不同的节点上,也不能保证这些节点均匀分布在所有节点上。但是,有效的解决方案是使用Pod拓扑扩散约束
Pod拓扑扩散约束依赖于节点标签来标识每个节点所在的拓扑域,然后使用这些标签来匹配具有相同标签的Pod。可以定义一个或多个topologySpreadConstraint,以指示kube调度程序如何相对于集群中的现有Pod放置每个传入Pod。

kind: Pod
apiVersion: v1
metadata:
  name: mypod
  labels:
    node: node1
spec:
  topologySpreadConstraints:
  - maxSkew: 1
    topologyKey: zone
    whenUnsatisfiable: DoNotSchedule
    labelSelector:
      matchLabels:
        node: node1
  containers:
  - name: myapp
    image: image_name

maxSkew: 1描述了Pods可能分布不均的程度,必须大于零,语义根据whenUnsatisfable的取值不同而不同。
topologyKey: zone意味着均匀分布将仅应用于存在标签对“zone:“的节点。
whenUnsatisfiable: DoNotSchedule告诉调度程序,如果传入Pod不能满足约束,则让它保持挂起状态。
labelSelector用于查找匹配的Pod,对匹配此标签选择器的Pod进行计数,以确定其对应拓扑域中的Pod数量。
有关Pod拓扑扩散约束的详细信息,请参阅本文档:https://kubernetes.io/docs/concepts/workloads/pods/pod-topology-spread-constraints/

h5qlskok

h5qlskok2#

如果你需要保证无论发生什么,它们都不会在同一个节点上结束,你就必须使用AntiAffinity。
另一方面,如果您需要更灵活的解决方案,可以使用spread constraints,甚至将其与AntiAffinity结合使用。

相关问题