我有一个(powershell,如果重要的话)脚本,我希望为每个状态运行一次。这项工作在每个州花费的时间是可变的(不是基于州的人口或类似的事情,这是不可预测的),所以我想做的是创建一个以50个工作为步骤的流程,然后告诉Rundeck在5个线程中运行这50个作业。也许每个线程10个线程,但是可能不行,因为其中一些线程比其他线程更快。但是让Rundeck来管理它,所以如果在那个特定时间结束时是8-9-12-10-11,那就太好了。我了解如何使用Rundeck API创建这50个步骤并将其添加到工作流程中。
但是,我似乎看不到Rundeck如何完全按照我的意愿进行管理。工作流的策略似乎都假设您要在所有节点上运行所有作业(这意味着,如果我有50个步骤和5个节点,它将总共运行250件事,每个状态5次)-我不想要那个;我希望每个作业仅在一个节点上运行,但是我不在乎哪个节点是可用的任何节点。基本上,只是充当负载平衡器。
Rundeck是否支持此功能,还是我必须构建自己的负载平衡脚本?
答案 0 :(得分:1)
我做了一个使用三个节点,三个作业和一个父作业的示例,以通过Job Reference Step将这三个作业分配给每个节点(一次)。
首先,使用并行策略调用子作业的父作业(意味着每个步骤(每个作业参考))同时运行,协调器作为一组节点的“随机子集”运行(在我的示例中为三个),将“计数”设置为“ 1”(每个作业参考步骤指向单个节点)。
<joblist>
<job>
<defaultTab>nodes</defaultTab>
<description></description>
<dispatch>
<excludePrecedence>true</excludePrecedence>
<keepgoing>false</keepgoing>
<rankOrder>ascending</rankOrder>
<successOnEmptyNodeFilter>false</successOnEmptyNodeFilter>
<threadcount>3</threadcount>
</dispatch>
<executionEnabled>true</executionEnabled>
<id>17aad193-1e2c-45dc-b736-901c1de00954</id>
<loglevel>INFO</loglevel>
<name>ParentJobRemoteParallel</name>
<nodeFilterEditable>false</nodeFilterEditable>
<nodefilters>
<filter>node.*</filter>
</nodefilters>
<nodesSelectedByDefault>true</nodesSelectedByDefault>
<orchestrator>
<configuration>
<count>3</count>
</configuration>
<type>subset</type>
</orchestrator>
<plugins />
<scheduleEnabled>true</scheduleEnabled>
<sequence keepgoing='false' strategy='parallel'>
<command>
<jobref name='HelloWorldONE' nodeStep='true'>
<uuid>e1ec6d2c-62d9-4de4-af6d-7e03f59cc4e5</uuid>
</jobref>
</command>
<command>
<jobref name='HelloWorldTWO' nodeStep='true'>
<uuid>a57e74f2-050d-4a13-841a-3a4552d8227b</uuid>
</jobref>
</command>
<command>
<jobref name='HelloWorldTHREE' nodeStep='true'>
<uuid>47067c03-da25-43e1-83cc-9fe0492f0797</uuid>
</jobref>
</command>
</sequence>
<uuid>17aad193-1e2c-45dc-b736-901c1de00954</uuid>
</job>
</joblist>
现在,“子作业”将这些作业配置为指向一组具有随机子集编排器和“ 1”的节点,类似于“父作业”。
HelloWorldONE:
<joblist>
<job>
<defaultTab>nodes</defaultTab>
<description></description>
<dispatch>
<excludePrecedence>true</excludePrecedence>
<keepgoing>false</keepgoing>
<rankOrder>ascending</rankOrder>
<successOnEmptyNodeFilter>true</successOnEmptyNodeFilter>
<threadcount>1</threadcount>
</dispatch>
<executionEnabled>true</executionEnabled>
<id>e1ec6d2c-62d9-4de4-af6d-7e03f59cc4e5</id>
<loglevel>INFO</loglevel>
<name>HelloWorldONE</name>
<nodeFilterEditable>false</nodeFilterEditable>
<nodefilters>
<filter>node.*</filter>
</nodefilters>
<nodesSelectedByDefault>true</nodesSelectedByDefault>
<orchestrator>
<configuration>
<count>1</count>
</configuration>
<type>subset</type>
</orchestrator>
<plugins />
<scheduleEnabled>true</scheduleEnabled>
<sequence keepgoing='false' strategy='node-first'>
<command>
<exec>echo "i am the first job"</exec>
</command>
</sequence>
<uuid>e1ec6d2c-62d9-4de4-af6d-7e03f59cc4e5</uuid>
</job>
</joblist>
HelloWorldTWO:
<joblist>
<job>
<defaultTab>nodes</defaultTab>
<description></description>
<dispatch>
<excludePrecedence>true</excludePrecedence>
<keepgoing>false</keepgoing>
<rankOrder>ascending</rankOrder>
<successOnEmptyNodeFilter>false</successOnEmptyNodeFilter>
<threadcount>1</threadcount>
</dispatch>
<executionEnabled>true</executionEnabled>
<id>a57e74f2-050d-4a13-841a-3a4552d8227b</id>
<loglevel>INFO</loglevel>
<name>HelloWorldTWO</name>
<nodeFilterEditable>false</nodeFilterEditable>
<nodefilters>
<filter>node.*</filter>
</nodefilters>
<nodesSelectedByDefault>true</nodesSelectedByDefault>
<orchestrator>
<configuration>
<count>1</count>
</configuration>
<type>subset</type>
</orchestrator>
<plugins />
<scheduleEnabled>true</scheduleEnabled>
<sequence keepgoing='false' strategy='sequential'>
<command>
<exec>echo "i am the second job"</exec>
</command>
</sequence>
<uuid>a57e74f2-050d-4a13-841a-3a4552d8227b</uuid>
</job>
</joblist>
HelloWorldTHREE:
<joblist>
<job>
<defaultTab>nodes</defaultTab>
<description></description>
<dispatch>
<excludePrecedence>true</excludePrecedence>
<keepgoing>false</keepgoing>
<rankOrder>ascending</rankOrder>
<successOnEmptyNodeFilter>false</successOnEmptyNodeFilter>
<threadcount>1</threadcount>
</dispatch>
<executionEnabled>true</executionEnabled>
<id>47067c03-da25-43e1-83cc-9fe0492f0797</id>
<loglevel>INFO</loglevel>
<name>HelloWorldTHREE</name>
<nodeFilterEditable>false</nodeFilterEditable>
<nodefilters>
<filter>node.*</filter>
</nodefilters>
<nodesSelectedByDefault>true</nodesSelectedByDefault>
<orchestrator>
<configuration>
<count>1</count>
</configuration>
<type>subset</type>
</orchestrator>
<plugins />
<scheduleEnabled>true</scheduleEnabled>
<sequence keepgoing='false' strategy='node-first'>
<command>
<exec>echo "i am the third job"</exec>
</command>
</sequence>
<uuid>47067c03-da25-43e1-83cc-9fe0492f0797</uuid>
</job>
</joblist>
Here,您可以看到结果。
这也适用于步骤,作业参考步骤是命令步骤或脚本步骤之类的步骤。