Hashicopy之nomad应用编排方案04(伸缩及更新一个Job)
一 前言
作业的定义不是一成不变的,它意味着随着时间的推移而更新。您可以更新作业以更改docker容器、更新应用程序版本或更改任务组的计数以随负载扩展。
二 伸缩Job
现在,编辑example.nomad文件以更新计数并将其设置为3。这一行在143行周围的缓存部分中。
- count = 1
+ count = 3
修改作业规范后,使用nomad job plan命令调用调度程序的一个演练,看看如果运行更新后的作业会发生什么:
nomad job plan example.nomad
计划程序检测到计数的变化,并输出计划创建两个新分配,并对现有分配进行就地更新,以更新作业规范。就地更新不会导致任何服务中断。然后可以使用计划输出中提供的nomad job run命令运行带有版本验证的作业。
通过使用-check-index标志运行,Nomad检查作业在运行计划后是否未被修改。如果多人同时与作业交互,这将非常有用,以确保在应用修改之前作业没有更改。
nomad job run -check-index 10 example.nomad
由于您将任务组的计数设置为三,Nomad创建了两个额外的分配以达到所需的状态。再次运行相同的作业规范是幂等的,并且不会创建新的分配。
您可以获取示例作业状态,以验证Nomad是否启动了其他实例。运行nomad作业状态示例并检查输出的分配部分。请注意,现在有三个实例。
还要注意为分配创建的时间,最开始的容器时间没有变,意味着没有更新,后面新增的两个容器为并发创建的。
分配的创建时间是计划程序应用计划并且分配准备好由运行分配的Nomad客户机接收的时刻。创建的时间是一个固定的时间点。修改的时间反映最后一次更新分配记录的时间。
随着分配的启动以及在其生命周期中可能发生的任何事件(主要是由模板更新、工作负载失败或基于健康检查的重新启动引起的重新启动),分配将被更新以反映其当前状态。
三 更新Job
现在修改example.nomad文件,修改 redis:3.2to
redis:4.0,执行
nomad job plan example.nomad
使用-check-index
nomad job run -check-index 44 example.nomad
运行之后,滚动更新可以在底部运行nomad job status示例和观察分配部分。成功的部署将显示version的更新版本号、run的期望值和运行状态。
这里的输出表明Nomad分三个阶段处理更新,在每个阶段更新一个分配,并等待它在min_healthy_time 10秒内保持健康,然后继续下一个阶段。因为容器是缓存的,Redis启动很快,所以第二个和第三个实例在这个节点上彼此靠近启动;但是,您可以看到每次创建之间至少有预期的10秒时间。
您可以自己配置更新策略,但是默认的滚动更新行为使得大规模更新应用程序并防止应用程序中断变得不那么复杂。
四 其他
使用Nomad来进行job的横行扩展和伸缩在容器情况下,都可快速编排实现。
参考链接
- 点赞
- 收藏
- 关注作者
评论(0)