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"
}
}
}