你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

Jetpack

群集的每个节点上都需要 Jetpack。 它由 Azure CycleCloud 自动安装在预配为群集中的节点的每个虚拟机上。 Jetpack 提供三个main函数:

  • 节点配置 -- CycleCloud 使用脚本和 Chef 将预配的 VM 自动配置到正常工作的群集节点中。 Chef 客户端以及 VM 配置所需的资源嵌入在 Jetpack 中。
  • 分布式同步 - Jetpack 管理节点与 CycleCloud 应用程序服务器之间的通信。 这使 CycleCloud 能够监视预配 VM 的状态,并同步群集中多个节点的业务流程。
  • HealthCheck -- Jetpack 使用 HealthCheck 来确定 VM 的运行状况,以便可以终止不正常的 VM。

Jetpack 安装

首次使用 CycleCloud 启动群集时,Jetpack 安装程序将缓存在 Azure 存储帐户中。 预配群集 VM 时,会在启动过程中执行 自定义脚本扩展 ,该启动过程从 Azure 存储缓存下载 Jetpack 安装程序,然后将其安装在 VM 上。

Jetpack 安装程序:

  • 将 Jetpack 文件解压缩到单个目录树:
    • Windows: C:\cycle\jetpack
    • Linux: /opt/cycle/Jetpack
  • 创建将 VM 配置为群集节点的系统初始化启动脚本
  • 安装 HealthCheck 服务
  • 安装 Jetpack 命令行工具 以执行以下操作:
    • Windows: C:\cycle\jetpack\bin\jetpack
    • Linux: /opt/cycle/jetpack/bin/jetpack
  • 在 Linux 上创建 udev 规则
  • 设置环境变量 CYCLECLOUD_HOME

注意

如果已在 映像上预安装了 Jetpack,则自定义脚本扩展 不会 重新安装 Jetpack。 相反,将运行初始化步骤,该步骤将验证节点与 CycleCloud 的连接,并在继续配置节点之前启动 healthcheckjetpackd 服务。

Jetpack 子目录

Directory 说明
bin 有用的二进制文件和脚本。
config 用户定义的和群集定义的配置文件和脚本。
logs 通过联接群集和聚合节点生成的日志特别值得关注的是包含聚合 Chef 食谱结果 的chef-client.log
run 系统生成的运行时文件。 不建议直接访问这些文件。
system 内部文件。 我们不建议直接使用此目录中的任何文件,因为它们可能会因发布版本而发生显著变化。

HealthCheck

HealthCheck 服务执行用户定义的脚本,以确定 VM 作为群集节点的当前可行性。 有关详细信息,请参阅 HealthCheck 文档。

Jetpack 命令行工具

Jetpack 命令行工具提供了一组有用的子命令,用于操作当前 VM 并与 Azure CycleCloud 交互。

命令 说明
jetpack autoscale 自动缩放此节点所属的群集。
jetpack config 检索配置值。
jetpack converge 执行 Chef 聚合。
jetpack download 从 Azure 存储中的项目下载 Blob 资源。
jetpack keepalive 延迟 HealthCheck 服务终止系统。
jetpack log 将消息记录到 CycleCloud 群集 UI。
jetpack run_on_shutdown 添加在节点终止之前要调用的脚本。
jetpack send 将任意 AMQP 消息发送到 CycleCloud 服务器。
jetpack shutdown 通过 CycleCloud 请求关闭 VM。
jetpack test 运行与分配给 VM 的项目关联的测试。
jetpack users 列出 CycleCloud 将在此 VM 上管理的用户。
jetpack report_issue 将日志文件从 VM 存档到 Azure 存储

jetpack 自动缩放

jetpack autoscale 设置节点所属群集的自动缩放目标。 群集可以按核心、实例计数或自定义定义进行缩放。

若要扩展到 100 个核心,

jetpack autoscale --corecount=100

将“gpu”节点数组缩放为 5 个节点:

jetpack autoscale --instancecount 5 --name=gpu

若要自定义自动缩放,必须将 json 文件写入磁盘,其中包含要缩放的 nodearray 定义。 按 100 个核心缩放:

[
  {
      "Name": "execute",
      "TargetCoreCount": 100
  }
]
jetpack autoscale --file=custom-autoscale.json

jetpack 配置

jetpack config 提取 CycleCloud 传递到 VM 中的信息。 它公开:

  • 通过 Ohai 提供的所有系统属性
  • VM 的 Azure 元数据的子集
  • 有关父 CycleCloud 群集的信息。

jetpack 聚合

jetpack converge 下载与节点关联的所有 CycleCloud 项目,并启动 Chef 聚合进程,该进程运行节点的所有 Chef 配方和 cluster-init 脚本。

jetpack 下载

jetpack download 将随 项目 一起上传到 节点的 Blob 下载。 必须指定 Blob 所属的项目。

若要将作为项目的一部分 example-project 上传的 blob big-file.zip 下载到当前目录,请执行以下操作:

jetpack download --project example-project big-file.zip .

jetpack keepalive

jetpack keepalive 与 HealthCheck 服务交互,以延迟由于 HealthCheck 失败而终止 VM。 终止可以延迟固定一段时间,也可以无限期延迟。 默认情况下,终止延迟一小时。

若要将系统终止延迟一小时::

jetpack keepalive

若要将系统终止延迟 6 小时::

jetpack keepalive 6h

若要完全禁用 HealthCheck 服务,即无限期延迟终止:

jetpack keepalive forever

注意

forever只有 选项可用于 Windows VM 上的 HealthCheck

jetpack 日志

jetpack log 将日志消息发送回 CycleCloud。 消息将显示在应用程序服务器日志 (通常为 /opt/cycle_server/cycle_server.log) 、main 事件日志和群集 UI 页中。

每条消息都有两个属性: 级别优先级

level 属性指示消息的类型。 有效级别为“info”、“warn”和“error”。 该级别不指示给定消息的重要性 - 例如,某些错误是微不足道的,而某些信息性消息则至关重要。

优先级指示消息的重要性。 有效的 优先级 值为“low”、“medium”和“high”。 只有优先级为中等或更高的消息才会显示在“群集 UI”页上,以避免低优先级消息充斥页面。

若要发送将显示在“群集 UI”页上的信息性日志消息,请执行以下操作:

jetpack log 'system is now ready'

若要发送不希望显示在“群集 UI”页上的低优先级日志消息,请执行以下操作:

jetpack log 'system is now ready' --priority low

默认情况下, 具有错误 级别的消息具有较高的优先级。 发送错误消息:

jetpack log 'the machine cannot process jobs' --level error

若要发送简单错误消息,请:

jetpack log 'the machine cannot process jobs' --level error --priority low

jetpack run_on_shutdown

jetpack run_on_shutdown 注册在节点终止之前要调用的 bash 脚本。

命令采用脚本的绝对路径作为参数。

当节点被 Azure 终止时,如果启用了 终止通知 ,Jetpack 将收到终止通知,并尝试在节点关闭之前运行脚本。

节点 必须 启用 终止通知 才能启用 run_on_shutdown

jetpack run_on_shutdown /tmp/example.sh

Windows 节点不支持此命令。

jetpack send

jetpack send 将 AMQP 消息发送到 CycleCloud。 这是一个高级命令,除非你正在为 CycleCloud 开发插件,否则不建议这样做。

可以使用指定的 AMQP 路由密钥发送任意字符串或文件。

jetpack 关闭

jetpack shutdown 请求 CycleCloud 终止节点。 可以将选项传递给 命令,以指定关闭请求 (空闲与不正常) 的原因,以及如何终止节点 (终止与解除分配) 。

关闭不正常的节点:

jetpack shutdown --unhealthy

解除分配节点:

jetpack shutdown --deallocate

jetpack 测试

jetpack test 运行分配给节点 的项目 中包含的任何测试,并将结果打印到 stdout。

jetpack 用户

jetpack users 列出 CycleCloud 将在节点上管理的用户。 此列表可能会随时间推移而更改,因为用户被分配到群集并将其删除。

从分配给节点的用户中获取用户友好的打印:

$ jetpack users

Username: test-user
Full Name: Test User
UID: 10201
Is Admin: True
Is Owner: True

若要获取脚本友好的 JSON 输出,请执行以下操作:

$ jetpack users --json

[
    {
        "fullName": "Test User",
        "isAdmin": true,
        "isOwner": true,
        "name": "test-user",
        "publicKeys": [
            "ssh-rsa public-key-goes-here\n"
        ],
        "uid": 10201
    }
]

jetpack report_issue

jetpack report_issue 存档 VM 中的日志目录,可以选择将其上传到 Azure 存储,并创建用于外部访问的签名 URL。 日志将上传到节点的保险箱引用的 Azure 存储帐户。 在 Azure 存储中对存档进行签名时,生成的 SAS 令牌将具有 30 天的 只读 访问权限。

用法:

$ jetpack report_issue [LOG_PATH] [--upload/--no-upload] [--sign/--no-sign]

若要存档,请上传默认 Jetpack 日志并将其签名 ($JETPACK_HOME/logs) :

$ jetpack report_issue
Logs can be found at: https://testaccount.blob.core.windows.net/cyclecloud/issues/TestCluster-execute-1-77777964-8b74-420d-ad44-094edf7695f2.zip?sv=2017-11-09&rsct=binary&sig=jBJUlYo10lRq0eW94I%2B6syzYVmgo1qcTFUc35D/q0Tg%3D&se=2020-12-04T15%3A15%3A00Z&spr=https&rscd=disposition%3Dfile%3B%20attachment&sp=r&sr=b
Signed URL will expire on: 2020-12-04T15:15:00Z

若要存档,请上传但不对非默认日志目录进行签名:

$ jetpack report_issue /var/log/azure --no-sign
Logs can be found at: https://testaccount.blob.core.windows.net/cyclecloud/issues/TestCluster-execute-1-d67fe991-1dac-4644-9af7-50c835726f5e.zip

只需在本地 VM 上存档日志:

$ jetpack report_issue --no-upload
Logs can be found at: /tmp/tmp4nscw705/TestCluster-execute-1-4249e973-3d87-4b14-94ed-6856a5267972.zip