云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

轻量服务器_网站建设的好处_高性能

小七 141 0

HashiCorp Nomad中的高级节点排水

HashiCorp nomad0.8引入了高级节点排水功能,以简化node客户端节点的集群级升级。本文探讨了如何使用HashiCorp Nomad改进的排水特性,在不停机的情况下,将现有工作负载从一组节点排放到一组新节点。传统上,升级由调度器管理的生产集群对于运营商来说是一个挑战,因为集群可能正在运行实时工作负载,这些负载是为客户服务的,并且不能被中断。另一个困难是集群运营商可能不是服务所有者,也不知道对所有生产服务的需求。HashiCorp Nomad目标的核心是使集群管理对运营商来说不费吹灰之力,并最小化服务停机时间。借助nomad0.8的高级节点排水,我们通过让运营商和开发人员能够控制集群范围内的迁移,从而努力实现这两个功能。»新建节点排水器nomad0.8引入了一个新的节点排水器,可以安全地排出Nomad客户机节点上运行的作业。新的节点排水器将检查所有排水节点,并能够检测哪些作业受排水操作的影响。然后,它将检查迁移节中所有受影响的作业,并尝试通过遵循节中定义的max_parallel来减少服务的停机时间。max_parallel参数限制在任何给定时间可以迁移的分配数。Nomad通过限制并行迁移不超过此值来尊重此字段。由于应用程序不会立即准备好为流量提供服务,Nomad会等待被替换的分配恢复正常,然后再继续迁移作业的分配,这有助于减少服务停机时间。nomad0.8中新的node drainer允许Nomad在排空节点时拥有集群范围的视图,并允许服务所有者使用migrate节定义在节点之间迁移作业所需的所有必要参数。»迁移节在nomad0.8中,通过在任务组级别引入新的migrate节,可以让开发人员为他们的作业定义排干行为,从而改进了排干行为。下面是myapi作业的migrate节示例,它允许Nomad以一次一次分配的速度迁移作业,并要求分配在继续下一个分配之前至少保持10秒的正常状态。作业"我的api"{数据中心=dc1"]type="服务"组"我的api"{计数=2迁移{#一次执行一次并行迁移。最大平行=1#确保新放置的分配至少有10个处于正常状态#在继续迁移过程之前的几秒钟。min_healthy_time="10秒"#分配时间最多为3分钟,以便在分配前标记为正常#其他迁移可以继续。health_deadline="3米"}重新启动{.....当排空一个节点时,Nomad将使用group的migrate节在集群中的其他节点上创建新的分配。在上面的示例中,如果在运行my api作业的节点上发出node drain命令,Nomad将通过在集群中的另一个节点上创建一个具有相同版本my api服务的新分配来迁移作业一个分配。新创建的分配需要在3分钟内通过其运行状况检查,然后Nomad才能继续迁移作业中的分配。这个过程帮助负责我的api服务的开发人员使用migrate节中定义的参数来定义在节点耗尽事件中如何迁移作业。这也有助于操作员不知道这些粒度设置,而是集中精力升级集群中的节点。»节点排出和合格命令新的node drain命令引入了节点合格性的概念。每个Nomad客户机节点可以是符合调度条件的,也可以是不符合调度条件的。当排空一个节点时,Nomad会将该节点标记为不符合新放置的条件。nomad0.8还允许操作员在排空节点时设置截止时间。设置后,Nomad将等到最后期限,在此截止日期之前,必须将所有分配移出节点,否则将强制从节点中删除这些分配。设置一个截止日期给了操作员一个最终的时间,在这个时间内他们可以删除资源,但允许有足够的时间让作业迁移到另一个节点。此外,Nomad允许批处理作业继续在排出节点上运行,直到最后期限。这样可以完成几乎完整的批处理作业,有助于降低与运行批处理作业相关的成本。下面是将-deadline命令行标志与node drain命令一起使用的示例。nomad节点排水-启用-自我-截止时间30m在上面的示例中,Nomad将等待30分钟,然后强制从节点中删除作业。Nomad中的系统作业允许日志托运人和度量收集器等服务在所有Nomad客户机节点上运行。如果客户机节点被清空,系统作业将是最后一个要迁移的作业,这允许在这些作业被清空之前发送所有度量和日志。下面的视频演示了Nomad中的高级节点排水。»对以前的排水命令的改进在nomad0.8之前,当发出node drain命令时,Nomad会用drain=true标记一个节点,这将不允许在该节点上调度任何新作业。然后Nomad将为节点上运行的所有作业创建新的计算,并将它们重新调度到集群中的其他节点。这种行为在某些情况下会导致服务停机。与节点排水行为相关的其他问题如下:当对客户端执行滚动排水和重新启动时,作业可以在节点之间反复移动,并可以放置在即将耗尽的节点上。在一个特定服务的所有作业都在一个节点上运行的情况下,排空该节点将导致该节点上运行的所有作业同时停止,进而导致该服务中断。一次抽干一个节点并等待新的工作安排是乏味的,而且容易出错。一次排出多个节点可能会由于排出节点之间缺乏协调而导致中断。正在运行批处理作业的排出节点可能会导致作业在完成可能需要重新启动才能重做作业的工作之前停止。排空节点会导致在该节点上运行的系统作业立即被排空。总之,在NomadV0.8之前,协调零停机时间排水需要操作员大量的人工监督,因为他们无法控制单个作业的排放方式。»与更新节的区别理解update和migrate节之间的区别是很重要的,因为它们有相似的参数,但在Nomad中用于不同的用例。更新节用于处理作业版本之间的转换。它的目的是帮助组织滚动部署和金丝雀部署。开发人员可能更感兴趣,因为他们希望控制如何将作业从一个版本升级到另一个版本。migrate节定义了调度程序在集群更改和现有作业时的行为方式。由于这些作业已经在集群中运行,操作员可以使用migrate节来定义在以不影响作业服务质量的方式排出节点时应如何重新安排作业。在发出节点排出的事件中,相同版本的作业将在节点之间迁移,因此migrate节不提供auto_revert、canary和stagger等参数。»结论在nomad0.8中,我们发布了高级节点排水(advanced node draining),它可以帮助运营商和开发人员以集群范围内的协调方式控制迁移的发生。这篇文章展示了高级节点排水如何推动所有的智能系统安全地将服务迁移到Nomad中,允许开发人员专注于构建他们的服务,而运营商则专注于确保运行这些服务的基础架构稳定。