Batch コンテナー分離タスク
Azure Batch では、タスク レベルで分離構成が提供されるため、エフェメラル ディスク全体または AZ_BATCH_NODE_ROOT_DIR
全体のマウントを回避できます。 代わりに、コンテナー タスクにアタッチする特定の Azure Batch データ パスをカスタマイズできます。
Note
Azure Batch データ パス では、タスクとアプリケーション用に指定された Azure Batch ノード上の特定のパスが参照されます。 これらのパスはすべて、AZ_BATCH_NODE_ROOT_DIR
の下にあります。
コンテナー タスクで分離機能が必要な理由
Windows コンテナー タスク ワークロードでは、エフェメラル ディスク (D:) 全体がタスクのコンテナーにアタッチされます。 Linux コンテナー タスク ワークロードの場合、Azure Batch では、 AZ_BATCH_NODE_ROOT_DIR
全体がタスクのコンテナーにアタッチされます。どちらも ReadWrite モードです。 ただし、コンテナー ボリュームをカスタマイズする場合は、このセットアップによって、ノード上で実行されているすべてのコンテナー間で一部のデータが共有される可能性があります。 これに対処するため、タスク コンテナーにアタッチする Azure Batch データ パスをカスタマイズする機能がサポートされています。
- セキュリティ: コンテナー タスクのデータがホスト コンピューターに漏えいすることや、ホスト コンピューター上のデータが変更されることを防ぎます。
- カスタマイズ: 必要に応じてコンテナー タスクのボリュームをカスタマイズできます。
Note
この機能を使用するには、ノード エージェントのバージョンが 1.11.11 より大きいことを確認してください。
コンテナーのホスト データ パス添付の構成
- Linux ノードの場合: コンテナーに同じパスをアタッチできます。
- Windows ノードの場合: Windows コンテナーには D: ディスクがないため、パスをマウントする必要があります。 マウントを選択できるパスの一覧を参照してください。
Azure Batch データ パス | ホスト コンピューターのパス | コンテナーのパス |
---|---|---|
AZ_BATCH_APP_PACKAGE_ | D:\batch\tasks\applications | C:\batch\tasks\applications |
AZ_BATCH_NODE_SHARED_DIR | D:\batch\tasks\shared | C:\batch\tasks\shared |
AZ_BATCH_NODE_STARTUP_DIR | D:\batch\tasks\startup | C:\batch\tasks\startup |
AZ_BATCH_NODE_MOUNTS_DIR | D:\batch\tasks\fsmounts | C:\batch\tasks\fsmounts |
AZ_BATCH_NODE_STARTUP_WORKING_DIR | D:\batch\tasks\startup\wd | C:\batch\tasks\startup\wd |
AZ_BATCH_JOB_PREP_DIR | C:\batch\tasks\workitems\{workitemname}\{jobname}\{jobpreptaskname} | D:\batch\tasks\workitems\{workitemname}\{jobname}\{jobpreptaskname} |
AZ_BATCH_JOB_PREP_WORKING_DIR | C:\batch\tasks\workitems\{workitemname}\{jobname}\{jobpreptaskname}\wd | D:\batch\tasks\workitems\{workitemname}\{jobname}\{jobpreptaskname}\wd |
AZ_BATCH_TASK_DIR | D:\batch\tasks\workitems\{workitemname}\{jobname}\{taskname} | C:\batch\tasks\workitems\{workitemname}\{jobname}\{taskname} |
AZ_BATCH_TASK_WORKING_DIR | D:\batch\tasks\workitems\{workitemname}\{jobname}\{taskname}\wd | C:\batch\tasks\workitems\{workitemname}\{jobname}\{taskname}\wd |
コンテナーにアタッチするものとして選択できるデータ パスの一覧を参照してください。 選択されていないデータ パスからは、関連する環境変数が削除されています。
データ パス列挙型 | データ パスはコンテナーにアタッチされます |
---|---|
共有 | AZ_BATCH_NODE_SHARED_DIR |
アプリケーション | AZ_BATCH_APP_PACKAGE_* |
Startup | AZ_BATCH_NODE_STARTUP_DIR, AZ_BATCH_NODE_STARTUP_WORKING_DIR |
Vfsmounts | AZ_BATCH_NODE_MOUNTS_DIR |
JobPrep | AZ_BATCH_JOB_PREP_DIR, AZ_BATCH_JOB_PREP_WORKING_DIR |
タスク | AZ_BATCH_TASK_DIR, AZ_BATCH_TASK_WORKING_DIR |
コンテナー分離タスクを実行する
Note
- 空のリストを使用する場合、NodeAgent ではタスクのコンテナーにデータ パスがマウントされません。 null を使用すると、NodeAgent はエフェメラル ディスク全体 (Windows の場合) または
AZ_BATCH_NODE_ROOT_DIR
(Linux の場合) をマウントします。 - タスク データ パスをコンテナーにマウントしない場合は、workingDirectory タスクのプロパティを "containerImageDefault" に設定する必要があります。
コンテナー分離タスクを実行する前に、コンテナーを含むプールを作成する必要があります。 これを作成する方法の詳細については、こちらの「Docker コンテナー ワークロード」ガイドを参照してください。
次の例では、REST API を使用してデータ分離を含むコンテナー タスクを作成する方法について説明します。
POST {batchUrl}/jobs/{jobId}/tasks?api-version=2024-07-01.20.0
{
"id": "taskId",
"commandLine": "bash -c 'echo hello'",
"containerSettings": {
"imageName": "ubuntu",
"containerHostBatchBindMounts": [
{
"source": "Task",
"isReadOnly": true
}
]
},
"userIdentity": {
"autoUser": {
"scope": "task",
"elevationLevel": "nonadmin"
}
}
}