Freigeben über


Batch-Containerisolationsaufgabe

Azure Batch bietet eine Isolationskonfiguration auf Aufgabenebene, sodass Aufgaben das Einbinden des gesamten kurzlebigen Datenträgers oder des gesamten Verzeichnisses AZ_BATCH_NODE_ROOT_DIR vermeiden können. Stattdessen können Sie die spezifischen Azure Batch-Datenpfade anpassen, die Sie an die Containeraufgabe anfügen möchten.

Hinweis

Azure Batch-Datenpfad bezieht sich auf die spezifischen Pfade in einem Azure Batch-Knoten, der für Aufgaben und Anwendungen bestimmt ist. Alle diese Pfade befinden sich unter AZ_BATCH_NODE_ROOT_DIR.

Gründe für ein Isolationsfeature in Containeraufgaben

In einer Windows-Containeraufgaben-Workload wird der gesamte kurzlebige Datenträger (D:) an den Container der Aufgabe angefügt. Bei einer Workload für Linux-Containeraufgaben fügt Azure Batch das gesamte Verzeichnis AZ_BATCH_NODE_ROOT_DIR an den Container der Aufgabe an (im ReadWrite-Modus). Wenn Sie jedoch Ihre Containervolumes anpassen möchten, kann dieses Setup dazu führen, dass einige Daten für alle Container freigegeben werden, die auf dem Knoten ausgeführt werden. Um das gleiche Problem zu beheben, unterstützen wir die Möglichkeit, die Azure Batch-Datenpfade anzupassen, die Sie an den Aufgabencontainer anfügen möchten.

  • Sicherheit: Verhindert, dass die Containeraufgabendaten auf den Hostcomputer übertragen werden oder Daten auf dem Hostcomputer geändert werden.
  • Anpassen: Sie können Ihre Container-Task-Volumes nach Bedarf anpassen.

Hinweis

Um dieses Feature zu verwenden, stellen Sie sicher, dass Ihre Knoten-Agent-Version größer als 1.11.11 ist.

Konfigurieren von Anhängen für Hostdatenpfade für Container

  • Für Linux-Knoten: Wir können einfach denselben Pfad im Container anfügen.
  • Für Windows-Knoten: Da Windows-Container keinen D:-Datenträger haben, müssen wir den Pfad einbinden. Sie können einen der aufgelisteten Pfade zum Einbinden auswählen.
Azure Batch-Datenpfad Pfad auf dem Hostcomputer Pfad im Container
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

Sie können einen der aufgelisteten Datenpfade zum Anfügen an den Container auswählen. Aus allen nicht ausgewählten Datenpfade werden die zugehörigen Umgebungsvariablen entfernt.

Datenpfadenumeration Datenpfad wird an den Container angefügt
Shared AZ_BATCH_NODE_SHARED_DIR
Anwendungen 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
Aufgabe AZ_BATCH_TASK_DIR, AZ_BATCH_TASK_WORKING_DIR

Ausführen einer Containerisolationsaufgabe

Hinweis

  • Wenn Sie eine leere Liste verwenden, bindet NodeAgent keine Datenpfade in den Container der Aufgabe ein. Wenn Sie NULL verwenden, bindet NodeAgent den gesamten kurzlebigen Datenträger (in Windows) oder AZ_BATCH_NODE_ROOT_DIR (in Linux) ein.
  • Wenn Sie den Aufgabendatenpfad nicht in den Container einbinden, müssen Sie die Eigenschaft workingDirectory der Aufgabe auf „containerImageDefault“ festlegen.

Bevor Sie eine Containerisolationsaufgabe ausführen, müssen Sie einen Pool mit einem Container erstellen. Weitere Informationen zur Erstellung finden Sie in der Anleitung Docker-Containerworkload.

Im folgenden Beispiel wird das Erstellen einer Containeraufgabe mit Datenisolation mithilfe der REST-API beschrieben:

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