gpt4 book ai didi

kubernetes - 为什么 Kubernetes 调度程序总是将我的 Pod 副本放在 AKS 中的同一节点上?

转载 作者:行者123 更新时间:2023-12-05 03:20:07 25 4
gpt4 key购买 nike

我们有一个 AKS 测试集群,它有 四个 个 Windows 工作节点和一个副本数为 两个 的 Deployment。相应的 Pod 规范未指定任何资源请求和限制(因此,生成的 Pod 属于 BestEffort QoS 类)。

为了进行性能测试,我们将这些工作节点上的所有其他 Deployment 扩展为 0 个副本,并删除了节点上所有剩余的 Pod。仅保留由 AKS DaemonSets 本身(在 kube-system 命名空间中)创建的系统 Pod。然后我们创建了上面提到的 Deployment。

我们假设默认的 Kubernetes 调度器会默认将两个副本放置在不同的节点上,或者至少随机选择节点。然而,调度程序总是选择同一个节点来放置两个副本,无论我们多久删除一次 Pod 或将 Deployment 缩放到 0 再回到 2。只有在我们将该节点污染为 NoSchedule 之后,调度程序是否选择了另一个节点。

我知道我可以配置反亲和性或拓扑传播约束来更好地传播我的 Pod。但在 Cloud Native DevOps with Kubernetes 一书中,我读到调度程序默认情况下实际上做得很好,只有在绝对必要时才应该使用这些功能。 (如果调度程序被迫做出错误的决定,则可能使用 descheduler。)

所以,我想了解为什么我们观察到的行为会发生。来自docs ,我了解到调度程序首先过滤适合的节点。在这种情况下,所有这些都应该适合,因为所有配置都相同。然后它对节点进行评分,如果所有节点都具有相同的分数,则随机选择。为什么一个节点总是会赢得那个分数?

后续问题:有什么方法可以在 AKS 中重构调度程序的决策逻辑吗?我可以在 Container Insights 中看到 kube-scheduler 日志,但它们不包含任何有关调度的信息,只是一些操作性的东西。

最佳答案

相信调度程序知道哪些节点已经拉下了容器镜像,并且会优先考虑它们以避免拉取镜像(因此启动时间更快)

如果不挖掘源代码作为证据,我想可以创建一个单独的 Pod(为此目的,我的字面意思是 kind: Pod),将其强制到其他节点之一通过 nodeName:,然后在 Pod 被安排并尝试启动后,删除 Pod 并扩展您的 Deployment

然后我希望新的 Deployment 管理的 Pod 到达另一个节点,因为根据定义,它使用的资源较少,但也有所需的容器镜像

关于kubernetes - 为什么 Kubernetes 调度程序总是将我的 Pod 副本放在 AKS 中的同一节点上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73278919/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com