Jetpack

在叢集的每個節點上都需要 Jetpack。 Azure CycleCloud 會自動在布建為成為叢集中節點的每個虛擬機上安裝它。 Jetpack 提供三個主要函式:

  • 節點設定 -- 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
  • 建立系統 init 啟動文本,將 VM 設定為叢集節點
  • 安裝 HealthCheck 服務
  • 安裝 Jetpack 命令列工具 以:
    • Windows :C:\cycle\jetpack\bin\jetpack
    • Linux: /opt/cycle/jetpack/bin/jetpack
  • 在 Linux 上建立 udev 規則
  • 設定環境變數 CYCLECLOUD_HOME

注意

如果 Jetpack 已在 映像上預安裝,自定義腳本擴充 功能將不會 重新安裝 Jetpack。 相反地,將會執行初始化步驟,以驗證節點與 CycleCloud 的連線,並在繼續設定節點之前啟動 healthcheckjetpackd 服務。

Jetpack 子目錄

目錄 描述
bin 有用的二進位檔和腳本。
config 使用者定義和叢集定義的組態檔和腳本。
logs 聯結叢集和交集節點所產生的記錄,特別感興趣的 是chef-client.log ,其中包含聚合 Chef 配方的結果。
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' nodearray 調整為 5 個節點:

jetpack autoscale --instancecount 5 --name=gpu

若要自定義自動調整,json 檔案必須寫入磁碟,其中包含您想要調整的 nodearray 定義。 若要調整為 100 個核心:

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

jetpack config

jetpack config 擷取由 CycleCloud 傳遞至 VM 的資訊。 它會公開:

  • 透過 Ohai 提供的所有系統屬性
  • VM 的 Azure 元數據子集
  • 父 CycleCloud 叢集的相關信息。

jetpack 交集

jetpack converge 會下載與節點相關聯的所有 CycleCloud 專案,並啟動 Chef 交集程式,以執行節點的所有 Chef 配方和叢集 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

若要將系統終止延遲六小時:

jetpack keepalive 6h

若要完全停用 HealthCheck 服務,也就是無限期延遲終止:

jetpack keepalive forever

注意

只有此選項 forever 適用於 Windows VM 上的 HealthCheck

jetpack 記錄

jetpack log 會將記錄訊息傳回 CycleCloud。 訊息會出現在應用程式伺服器記錄檔中, (通常是 /opt/cycle_server/cycle_server.log) 、主要事件記錄檔和 [叢集 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 天。

Usage :

$ 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