GKE Autopilot Pod 被安排在具有 topologySpreadConstraints 的相同区域中

问题描述 投票:0回答:1

我的头脑围绕着topologySpreadConstraints,但我被困在这一点上。 我的 7 个部署中的所有 2-Pod 对都安排在同一区域 europe-west1-b 中。没有一个部署分布在 2 个区域中。值得一提的是,以前在不同区域进行调度通常是有效的。当在没有拓扑SpreadConstraints 的情况下启动 2 个或更多副本时,Pod 会跨区域(或分别在同一区域中)随机调度。 同样重要的是:我已经有 3 个“占位符”部署,分别将它们强制安排在区域 b、c 和 d 中。 e.我的集群保证在所有 3 个区域中都有节点。

我的清单现在看起来都是这样的(服务名称不同;容器已被删除):

apiVersion: apps/v1
kind: Deployment
metadata:
  name: some-microservice
  namespace: some-namespace
  labels:
    app: some-microservice
spec:
  replicas: 2
  selector:
    matchLabels:
      app: some-microservice
  template:
    metadata:
      labels:
        app: some-microservice
    spec:
      topologySpreadConstraints:
        - maxSkew: 1
          topologyKey: topology.kubernetes.io/zone
          whenUnsatisfiable: DoNotSchedule
          labelSelector:
            matchLabels:
              app: some-microservice
      nodeSelector:
        cloud.google.com/gke-spot: "true"

我还尝试了“zone”而不是“topology.kubernetes.io/zone”,因为这是 kubernetes.io 上记录的方式,但是根本没有安排第二个 Pod。

google-kubernetes-engine autopilot
1个回答
0
投票

解决了!

我提到我在 b、c 和 d 区安排了 3 个“占位符”部署。情况确实如此,但我忘记添加

cloud.google.com/gke-spot: "true"
节点选择器,因此创建了非点节点。这就导致了 Kubernetes 调度器确实无法在类型为“spot”的区域 c 和 d 中找到任何合适的节点的问题。

这种情况再次强调了这样一个事实:GKE Autopilot 中需要这些“节点占位符”部署来保证所有区域中节点的存在。

© www.soinside.com 2019 - 2024. All rights reserved.