Nomad了解调度程序节点选择



我有一个3个节点测试群集和几个作业(简单配置,无约束,Java服务(。我的问题是,每次我开始工作时,它都会在第一个节点上启动。如果我增加计数= 2并添加不同的主机约束,则其他节点也有分配。但是,如果我开始使用计数= 1的50个作业,则在第一个节点上有50个分配,而NON NONE2或NODE3或NODE3。

job "test" {
  datacenters = ["dc1"]
  type = "service"
  group "test" {
    count = 1
    task "test" {
    driver = "java"
    config {
       jar_path    = "/usr/share/java/test.jar"
       jvm_options = [
                    "-Xmx256m",
                    "-Xms256m"]
    }
    resources {
       cpu = 300
       memory = 256
    }
 }
}

现在,我想了解/查看Nomad如何为分配选择节点。所有3个节点都有相同的资源 - 因此应平等分发工作?

编辑:突然将作业分发。因此,我的新问题是:是否有详细输出,或者我可以看到Nomad在开始新工作时选择特定节点的方法。

正式文档中给出的

第二阶段是排名,调度程序得分可行节点以找到最佳拟合。评分主要是基于垃圾箱的,该垃圾箱用于优化应用程序的资源利用率和密度,但也被亲和力和反亲和力规则所增强。Nomad自动应用了一项抗衡性规则,该规则不鼓励任务组的多个实例进行共裂。这种抗亲和力和垃圾箱的组合优化了密度,同时降低了相关失败的可能性。

这意味着Nomad首先会尝试"填充"一个特定的节点。让我举个例子:假设您有三个有要求的工作:

J1(200m(,J2(300m(,J3(500m(

有三个带有免费资源的节点

n1(1g(,n2(2g(,n3(3g(。

在这种情况下,Nomad将选择将首先填充的节点。因此,当您尝试计划J1时,将选择N1。现在,及其剩余资源的节点状态将是:

n1(800m(,n2(2g(,n3(3g(

现在,假设您想附表J2。在这种情况下,将选择N1,因为该节点的填充速度将比N2和N3更快。

因此,您使用免费资源的最终分配看起来像

n1 (j1,j2,j3)(100M)      n2(2G)       n3(3G)

现在,如果Job J4有200m的要求,则将选择N2。这将使您的群集状态

n1 (j1,j2,j3)(100M)      n2(j4)(1800M)       n3(3G)

如果您想更多地了解bin包装在Nomad中的工作原理,则可以在https://www.nomadproject.io/docs/internals/internals/scheduling.html

上查看高级文档。

此外,根据评估API的结果暴露了与分配分配有关的权重计算。这意味着如果您发布以下命令:

$ nomad plan <job> file

,然后记下评估ID,然后向评估API

提出HTTP请求
$ curl localhost:4646/v1/evaluation/<eval_id>

您将获得调度程序计算和条件的结果,以进行计划的游牧工作。此plan命令对于理解任务组分配非常有用。它还将告诉您是否有足够的资源来运行数据中心。

最新更新