Nomad集群操作简介

CircleCI 2.0使用游民队作为主要作业调度器。本章为理解如何在CircleCI 2.0安装中操作Nomad集群提供了一个基本的介绍。

基本术语和架构

Nomad集群
图1所示。游牧集群管理
  • 游牧服务器:Nomad服务器是集群的大脑;他们收到并将作业分配给Nomad客户端。在Circleci中,游牧服务器将在您的服务机器上作为Docker容器运行。

  • 游牧客户:Nomad客户端执行由Nomad服务器分配的任务。通常,Nomad客户机运行在专用机器(通常是VM)上,以便充分利用机器的能量。您可以使用多个Nomad客户机来组成一个集群,而Nomad服务器通过其调度算法将任务分配给集群。

  • Nomad乔布斯:Nomad作业是用户提供的规范,该规范声明了Nomad的工作负载。在Circleci 2.0中,Nomad作业对应于执行Circleci作业。如果作业使用并行性,请说出10个并行性,那么Nomad将运行10个作业。

  • 构建代理:构建代理是由Circleci编写的Go程序,该程序在作业中执行步骤并报告结果。构建代理被执行为Nomad作业内的主要进程。

基本操作

以下部分是在安装中操作Nomad集群的基本指南。

游民队CLI安装在服务实例中。它预先配置为与Nomad集群交谈,因此可以使用该群集游民队命令运行本部分中的以下命令。

检查作业状态

运行群集中所有作业的状态列表:

Nomad状态

状态是输出中最重要的字段,具有以下状态类型定义:

  • 跑步: Nomad已经开始执行任务。这通常意味着你在CircleCI的工作开始了。

  • 等待:没有足够的资源可用于在群集中执行作业。

  • :Nomad已经完成了执行作业。状态成为无论相应的circleci作业/构建是否成功或失败。

检查集群状态

要获取您的游牧民族客户的列表,请运行:

Nomad node-status
Nomad node-status报告当前正在服务的两个Nomad客户端(状态)活跃的)和从集群中取出的Nomad客户机(状态)下来)。因此,您需要计算数量活跃的Nomad客户端了解群集的当前容量。

要获取有关特定客户端的更多信息,请从该客户端运行以下内容:

游牧节点状态的自我

这将提供信息,例如在客户端上运行多少作业以及客户端的资源利用率。

检查日志

如上所述的Nomad作业部分所指出的,Nomad作业对应于执行Circleci作业。因此,如果出现问题,Nomad作业日志有时可以帮助了解Circleci作业的状态。要获取特定作业的日志,请运行:

Nomad logs -job -stderr 
确保指定-Stderr.标志,因为这是大多数构建代理日志出现的地方。

虽然这一点Nomad Logs -Job.命令很有用,命令并不总是准确,因为工作标志使用指定作业的随机分配。这个词分配是Nomad作业的一个较小的单位,这是本文档的范围。要了解更多信息,请参阅官方的文档

完成以下步骤,从指定作业的分配中获取日志:

  1. 获取工作IDNomad状态命令。

  2. 获取作业的分配IDNomad Status 命令。

  3. 从分配中获取日志nomad日志-stderr <分配-id>

扩展的集群

默认情况下,您的Nomad客户端在AWS中的自动缩放组(ASG)中设置。要查看设置:

  1. 转到EC2仪表板,然后从左侧菜单中选择自动缩放组

  2. 选择您的Nomad客户端

  3. 选择操作>编辑以设置所需/最小/最大计数。这定义了要旋转并保持可用的Nomad客户端的数量。使用Scaling策略选项卡在您最繁忙的时刻自动扩展组,请参阅下文以获取定义缩放策略的最佳实践。使用NOMAD职位指标帮助定义您的伸缩性策略。

自动伸缩策略最佳实践

有一个博客帖子系列其中Circleci工程花费时间运行模拟成本节省的仿真,以开发一般的自动缩放实践。在设置AWS Auto Scaling时,请考虑以下最佳实践:

  1. 一般来说,大小您的群集足够大以避免排队构建。也就是说,对于大多数工作负载的排队而不是一秒的排队,并且工作负载在昂贵的硬件或最高的帕慑力上运行的工作负载不到10秒。由于开发人员时间的高成本,尺寸减少到零是最佳实践。难以创建一个模型,其中开发人员时间足够便宜,以便提供经济型成本效益。

  2. 创建一个自动伸缩组,采用一步伸缩策略,在大多数开发人员的正常工作时间内伸缩,在夜间伸缩。118金宝博娱乐城在工作日的正常工作时间增加,在晚上减少,这是在开发高峰期保持队列时间减少的最佳实践,而不会在夜间流量较低时过度供应。观察一段时间内的数百万次构建,在正常工作时间内,大多数数据集都会出现钟形曲线。

这与基于流量波动的全天自动缩放相反,因为建模显示,启动时间实际上太长,无法实时防止排队。使用亚马逊的阶级政策安装说明以及云手表警报。

关闭Nomad客户端

当您想关闭Nomad客户端时,必须先将客户端设置为排水模式。在排水模式下,客户端将完成已经分配的任何作业,但不会分配任何新作业。

  1. 若要排干客户端,请登录该客户端并将客户端设置为排干模式node-drain命令如下:

    Nomad节点排水 - 自我--enable
  2. 然后,确保客户机处于耗尽模式,使用节点状态命令:

    游牧节点状态的自我

或者,您可以使用以下命令清空远程节点,替换节点ID:

nomad节点-drain -enable -yes <节点-id>

缩小客户端群集

要为客户设置关闭的机制,请先输入排水模式,然后在终止客户端之前等待所有作业完成。您还可以配置这种生命周期钩这会触发用于缩放实例的脚本。

脚本应该使用上面的命令来完成以下任务:

  1. 将实例放在排水模式下

  2. 监视实例上正在运行的作业,并等待它们完成

  3. 终止实例