Jetpack

Jetpack は、クラスターのすべてのノードで必要です。 クラスター内のノードになるようにプロビジョニングされた各仮想マシンに、Azure CycleCloud によって自動的にインストールされます。 Jetpack には、次の 3 つのメイン関数が用意されています。

  • ノード構成 -- CycleCloud では、スクリプトと Chef を使用して、プロビジョニングされた VM の動作中のクラスター ノードへの構成を自動化します。 Chef クライアントと VM の構成に必要なリソースは、Jetpack に埋め込まれます。
  • 分散同期 -- Jetpack は、ノードと CycleCloud アプリケーション サーバー間の通信を管理します。 これにより、CycleCloud はプロビジョニング VM の状態を監視し、クラスター内の複数のノードのオーケストレーションを同期できます。
  • HealthCheck -- Jetpack は HealthCheck を使用して VM の正常性を判断し、異常な VM を終了できるようにします。

Jetpack のインストール

Jetpack インストーラーは、CycleCloud を使用してクラスターを初めて起動したときに、Azure Storage アカウントにキャッシュされます。 クラスター VM がプロビジョニングされると、ブート プロセスの一環として カスタム スクリプト拡張機能 が実行され、Jetpack インストーラーが Azure Storage キャッシュからダウンロードされ、VM にインストールされます。

Jetpack インストーラー:

  • Jetpack ファイルを 1 つのディレクトリ ツリーに展開します。
    • 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 への接続を検証し、ノードの構成を続行する前に サービスと jetpackd サービスをhealthcheck開始する初期化ステップが実行されます。

Jetpack サブディレクトリ

ディレクトリ 説明
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 Storage のプロジェクトから 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 Storage にログ ファイルをアーカイブする

jetpack の自動スケーリング

jetpack autoscale は、ノードが属するクラスターの自動スケーリング ターゲットを設定します。 クラスターは、コア、インスタンス数、またはカスタム定義によってスケーリングできます。

100 コアにスケーリングするには:

jetpack autoscale --corecount=100

"gpu" nodearray を 5 ノードにスケーリングするには:

jetpack autoscale --instancecount 5 --name=gpu

自動スケーリングをカスタマイズするには、スケーリングする nodearray 定義を含むディスクに json ファイルを書き込む必要があります。 100 コアでスケーリングするには:

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

jetpack config

jetpack config は、CycleCloud によって VM に渡された情報をフェッチします。 次の情報が公開されます。

  • Ohai を介して使用可能になったすべてのシステム プロパティ
  • VM の Azure メタデータのサブセット
  • 親 CycleCloud クラスターに関する情報。

jetpack converge

jetpack converge は、ノードに関連付けられているすべての CycleCloud プロジェクトをダウンロードし、ノードのすべての Chef レシピと cluster-init スクリプトを実行する Chef コンバージ プロセスを開始します。

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 の終了を遅延します。 終了は、一定の期間、または無期限に延期できます。 既定では、終了は 1 時間遅れます。

システムの終了を 1 時間遅らせるには、

jetpack keepalive

システムの終了を 6 時間遅らせるには、

jetpack keepalive 6h

HealthCheck サービスを完全に無効にするには、つまり、無期限に終了を遅延します。

jetpack keepalive forever

注意

Windows VM の forever HealthCheck に使用できるのは、オプションのみです

jetpack ログ

jetpack log はログ メッセージを CycleCloud に送り返します。 メッセージは、アプリケーション サーバー ログ (通常は /opt/cycle_server/cycle_server.log)、メイン イベント ログ、クラスター UI ページに表示されます。

各メッセージには、 level と priority という 2 つのプロパティ があります

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 Storage にアップロードし、外部アクセス用の署名付き URL を作成します。 ログは、ノードの Locker によって参照される Azure Storage アカウントにアップロードされます。 Azure Storage でアーカイブに署名すると、結果の 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