Batch 容器隔离任务

Azure Batch 在任务级别提供隔离配置,允许任务避免装载整个临时磁盘或整个 AZ_BATCH_NODE_ROOT_DIR。 相反,你可以自定义要附加到容器任务的特定 Azure Batch 数据路径。

注意

Azure Batch 数据路径是指为任务和应用程序指定的 Azure Batch 节点上的特定路径。 所有这些路径都位于 AZ_BATCH_NODE_ROOT_DIR 下。

为什么我们需要容器任务中的隔离功能

在 Windows 容器任务工作负载中,整个临时磁盘 (D:) 附加到任务的容器。 对于 Linux 容器任务工作负载,Azure Batch 会将整个 AZ_BATCH_NODE_ROOT_DIR 附加到任务的容器,两者都在 ReadWrite 模式中。 但是,如果要自定义容器卷,此设置可能会导致某些数据在节点上运行的所有容器之间共享。 为了解决此问题,我们支持自定义要附加到任务容器的 Azure Batch 数据路径。

  • 安全性:防止容器任务数据泄漏到主机计算机或更改主机上的数据。
  • 自定义:可以根据需要自定义容器任务卷。

注意

若要使用此功能,请确保节点代理版本大于 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_*
启动 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

运行容器隔离任务

注意

  • 如果使用空列表,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"
        }
    }
}