【问题标题】:Distribute pods for a deployment across different node pools为跨不同节点池的部署分发 pod
【发布时间】:2020-11-13 15:47:34
【问题描述】:

在我的 GKE Kubernetes 集群中,我有 2 个节点 pools;一个具有常规节点,另一个具有可抢占节点。我希望一些 pod 位于可抢占节点上,这样我可以节省成本,同时我在常规非抢占节点上至少有 1 个 pod,以降低停机风险。

我知道使用podAntiAffinity 来鼓励将 pod 安排在不同的节点上,但是有没有办法让 k8s 为跨两个 的单个部署安排 pod?

【问题讨论】:

    标签: kubernetes


    【解决方案1】:

    是的?!您可以使用 Pod Topology Spread Constraints,基于节点上的标签 ?️ 键。例如,标签可以是type,值可以是regularpreemptible。然后你可以有这样的东西:

    kind: Pod
    apiVersion: v1
    metadata:
      name: mypod
      labels:
        foo: bar
    spec:
      topologySpreadConstraints:
      - maxSkew: 1
        topologyKey: type
        whenUnsatisfiable: DoNotSchedule
        labelSelector:
          matchLabels:
            foo: bar
      containers:
      - name: app
        image: myimage
    

    您还可以识别maxSkew,这意味着一个标签值(节点类型)可以具有的多个 pod 的最大差异。

    您还可以将多个“Pod 拓扑传播约束”以及 PodAffinity/AntiAffinity 和 NodeAffinity 组合在一起。一切都取决于最适合您的用例。

    注意:此功能在 1.16 中为 alpha,在 1.18 中为 beta。 Beta 功能默认启用,但要使用 Alpha 功能,您需要在 GKE 中使用alpha cluster

    ☮️✌️

    【讨论】:

    • 在 GKE 中,似乎抢占式池中的节点将 cloud.google.com/gke-preemptible 键设置为 true。这可以在选择器中使用吗?
    • 是的,但要确保其他节点需要将该键设置为 false。
    • 太棒了。是的,我认为 GKE 节点池中会自动出现这种情况
    • 请注意,这是 kubernetes 1.16 的功能,GKE 稳定版目前为 1.15,因此您的集群可能无法使用。
    • 哦,是的,它是 1.16 中的 alpha 和 1.18 中的 beta。 beta 默认启用 alpha 你需要一个 alpha 集群:cloud.google.com/kubernetes-engine/docs/how-to/…
    猜你喜欢
    • 1970-01-01
    • 2020-01-21
    • 2019-11-26
    • 1970-01-01
    • 2021-05-07
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2022-01-17
    相关资源
    最近更新 更多