Verwenden von Speicherbereitstellungen in Azure Container Apps

Eine Container-App hat Zugriff auf verschiedene Typen von Speicher. Eine einzelne App kann bei Bedarf mehr als einen Typ von Speicher nutzen.

Speichertyp BESCHREIBUNG Anwendungsbeispiele
Containerdateisystem Temporärer Speicher, der auf den lokalen Container begrenzt ist. Schreiben in einen lokalen App-Cache.
Temporärer Speicher Temporärer Speicher, der auf ein einzelnes Replikat begrenzt ist. Freigeben von Dateien zwischen Containern in einem Replikat. Beispielsweise kann der App-Hauptcontainer Protokolldateien schreiben, die von einem Sidecar-Container verarbeitet werden.
Azure Files Permanenter Speicher Schreiben von Dateien in eine Dateifreigabe, um Daten für andere Systeme zugänglich zu machen.

Hinweis

Die Features zum Einbinden von Volumes in Azure Container Apps befinden sich in der Vorschauphase.

Containerdateisystem

Ein Container kann in sein eigenes Dateisystem schreiben.

Der Containerdateisystem-Speicher weist die folgenden Merkmale auf:

  • Der Speicher ist temporär und verschwindet, wenn der Container heruntergefahren oder neu gestartet wird.
  • Dateien, die in diesen Speicher geschrieben wurden, sind nur für Prozesse sichtbar, die im aktuellen Container ausgeführt werden.
  • Es gibt keine Kapazitätsgarantien. Der verfügbare Speicher hängt von der Menge des im Container verfügbaren Speicherplatzes ab.

Temporärer Speicher

Sie können ein kurzlebiges Volume einbinden, das emptyDir in Kubernetes entspricht. Temporärer Speicher ist auf ein einzelnes Replikat begrenzt.

Temporärer Speicher weist die folgenden Merkmale auf:

  • Dateien bleiben über die Lebensdauer des Replikats erhalten.
    • Wenn ein Container in einem Replikat neu gestartet wird, bleiben die Dateien im Volume erhalten.
  • Alle Container im Replikat können dasselbe Volume einbinden.
  • Ein Container kann mehrere temporäre Volumes einbinden.
  • Es gibt keine Kapazitätsgarantien. Der verfügbare Speicher hängt von der Menge des im Replikat verfügbaren Speicherplatzes ab.

Um temporären Speicher zu konfigurieren, definieren Sie zunächst ein EmptyDir-Volume in der Revision. Definieren Sie dann eine Volumeeinbindung in einem oder mehreren Containern in der Revision.

Voraussetzungen

Anforderung Anweisungen
Azure-Konto Erstellen Sie ein kostenloses Konto, falls Sie keines besitzen.
Azure Container Apps-Umgebung Erstellen einer Container Apps-Umgebung.

Konfiguration

Wenn Sie temporären Speicher verwenden, müssen Sie die Azure CLI mit einer YAML-Definition verwenden, um Ihre Container-App zu erstellen oder zu aktualisieren.

  1. Wenn Sie eine vorhandene Container-App aktualisieren möchten, um temporären Speicher zu verwenden, exportieren Sie die Spezifikation Ihrer App in eine YAML-Datei namens app.yaml.

    az containerapp show -n <APP_NAME> -g <RESOURCE_GROUP_NAME> -o yaml > app.yaml
    
  2. Nehmen Sie die folgenden Änderungen an der Spezifikation Ihrer Container-App vor.

    • Fügen Sie dem Abschnitt template Ihrer Container-App-Definition ein volumes-Array hinzu, und definieren Sie ein Volume.
      • name ist ein Bezeichner für das Volume.
      • Verwenden Sie EmptyDir als storageType.
    • Fügen Sie für jeden Container in der Vorlage, für den Sie temporären Speicher einbinden möchten, der Containerdefinition ein volumeMounts-Array hinzu, und definieren Sie eine Volumeeinbindung.
      • volumeName ist der Name, der im volumes-Array definiert ist.
      • mountPath ist der Pfad im Container zum Einbinden des Volumes.
    properties:
      managedEnvironmentId: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.App/managedEnvironments/<ENVIRONMENT_NAME>
      configuration:
        activeRevisionsMode: Single
      template:
        containers:
        - image: <IMAGE_NAME>
          name: my-container
          volumeMounts:
          - mountPath: /myempty
            volumeName: myempty
        volumes:
        - name: myempty
          storageType: EmptyDir
    
  3. Aktualisieren Sie Ihre Container-App mithilfe der YAML-Datei.

    az containerapp update --name <APP_NAME> --resource-group <RESOURCE_GROUP_NAME> \
        --yaml app.yaml
    

Wenn Sie ein temporäres Volume erstellen und es in einen Container einbinden möchten, nehmen Sie die folgenden Änderungen an der Container Apps-Ressource in einer ARM-Vorlage vor:

  • Fügen Sie dem Abschnitt template Ihrer Container-App-Definition ein volumes-Array hinzu, und definieren Sie ein Volume.
    • name ist ein Bezeichner für das Volume.
    • Verwenden Sie EmptyDir als storageType.
  • Fügen Sie für jeden Container in der Vorlage, für den Sie temporären Speicher einbinden möchten, der Containerdefinition ein volumeMounts-Array hinzu, und definieren Sie eine Volumeeinbindung.
    • volumeName ist der Name, der im volumes-Array definiert ist.
    • mountPath ist der Pfad im Container zum Einbinden des Volumes.

ARM-Beispielvorlagenausschnitt:

{
  "apiVersion": "2022-03-01",
  "type": "Microsoft.App/containerApps",
  "name": "[parameters('containerappName')]",
  "location": "[parameters('location')]",
  "properties": {

    ...

    "template": {
      "revisionSuffix": "myrevision",
      "containers": [
        {
          "name": "main",
          "image": "[parameters('container_image')]",
          "resources": {
            "cpu": 0.5,
            "memory": "1Gi"
          },
          "volumeMounts": [
            {
              "mountPath": "/myempty",
              "volumeName": "myempty"
            }
          ]
        }
      ],
      "scale": {
        "minReplicas": 1,
        "maxReplicas": 3
      },
      "volumes": [
        {
          "name": "myempty",
          "storageType": "EmptyDir"
        }
      ]
    }
  }
}

Ein vollständiges Beispiel finden Sie in der ARM-Vorlagen-API-Spezifikation.

Azure Files

Sie können eine Dateifreigabe von Azure Files als Volume in einen Container einbinden.

Eine Schritt-für-Schritt-Anleitung finden Sie unter Erstellen einer Azure Files Speichereinbindung in Azure Container Apps.

Azure Files-Speicher weist die folgenden Merkmale auf:

  • Dateien, die unter den Einbindungsspeicherort geschrieben werden, bleiben in der Dateifreigabe erhalten.
  • Dateien in der Freigabe sind über den Einbindungsspeicherort verfügbar.
  • Mehrere Container können dieselbe Dateifreigabe einbinden, einschließlich solcher, die sich in einem anderen Replikat, einer anderen Revision oder einer anderen Container-App befinden.
  • Alle Container, die die Freigabe einbinden, können auf Dateien zugreifen, die von einem anderen Container oder einer anderen Methode geschrieben wurden.
  • In einen einzelnen Container kann mehr als ein Azure Files-Volume eingebunden werden.

Um Azure Files-Speicher in Ihrem Container zu aktivieren, müssen Sie Ihren Container auf folgende Weise einrichten:

  • Erstellen Sie eine Speicherdefinition vom Typ AzureFile in der Container Apps-Umgebung.
  • Definieren Sie ein Speichervolume in einer Revision.
  • Definieren Sie eine Volumeeinbindung in einem oder mehreren Containern in der Revision.

Voraussetzungen

Anforderung Anweisungen
Azure-Konto Erstellen Sie ein kostenloses Konto, falls Sie keines besitzen.
Azure-Speicherkonto Informationen zu Azure-Speicherkonten
Azure Container Apps-Umgebung Erstellen einer Container Apps-Umgebung.

Konfiguration

Wenn Sie Azure Files verwenden, müssen Sie die Azure CLI mit einer YAML-Definition verwenden, um Ihre Container-App zu erstellen oder zu aktualisieren.

  1. Fügen Sie eine Speicherdefinition vom Typ AzureFile zu Ihrer Container Apps-Umgebung hinzu.

    az containerapp env storage set --name my-env --resource-group my-group \
        --storage-name mystorage \
        --azure-file-account-name <STORAGE_ACCOUNT_NAME> \
        --azure-file-account-key <STORAGE_ACCOUNT_KEY> \
        --azure-file-share-name <STORAGE_SHARE_NAME> \
        --access-mode ReadWrite
    

    Ersetzen Sie <STORAGE_ACCOUNT_NAME> und <STORAGE_ACCOUNT_KEY> durch den Namen und Schlüssel Ihres Speicherkontos. Ersetzen Sie <STORAGE_SHARE_NAME> durch den Namen der Dateifreigabe im Speicherkonto.

    Gültige Werte für --access-mode sind ReadWrite und ReadOnly.

  2. Wenn Sie eine vorhandene Container-App aktualisieren möchten, um eine Dateifreigabe einzubinden, exportieren Sie die Spezifikation Ihrer App in eine YAML-Datei namens app.yaml.

    az containerapp show -n <APP_NAME> -g <RESOURCE_GROUP_NAME> -o yaml > app.yaml
    
  3. Nehmen Sie die folgenden Änderungen an der Spezifikation Ihrer Container-App vor.

    • Fügen Sie dem Abschnitt template Ihrer Container-App-Definition ein volumes-Array hinzu, und definieren Sie ein Volume.
      • name ist ein Bezeichner für das Volume.
      • Verwenden Sie AzureFile für storageType.
      • Verwenden Sie für storageName den Namen des Speichers, den Sie in der Umgebung definiert haben.
    • Fügen Sie für jeden Container in der Vorlage, für den Sie Azure Files-Speicher einbinden möchten, der Containerdefinition ein volumeMounts-Array hinzu, und definieren Sie eine Volumeeinbindung.
      • volumeName ist der Name, der im volumes-Array definiert ist.
      • mountPath ist der Pfad im Container zum Einbinden des Volumes.
    properties:
      managedEnvironmentId: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.App/managedEnvironments/<ENVIRONMENT_NAME>
      configuration:
      template:
        containers:
        - image: <IMAGE_NAME>
          name: my-container
          volumeMounts:
          - volumeName: azure-files-volume
            mountPath: /my-files
        volumes:
        - name: azure-files-volume
          storageType: AzureFile
          storageName: mystorage
    
  4. Aktualisieren Sie Ihre Container-App mithilfe der YAML-Datei.

    az containerapp update --name <APP_NAME> --resource-group <RESOURCE_GROUP_NAME> \
        --yaml my-app.yaml
    

Die folgenden ARM-Vorlagenausschnitte veranschaulichen, wie Sie einer Container Apps-Umgebung eine Azure Files-Freigabe hinzufügen und sie in einer Container-App verwenden.

  1. Fügen Sie der Container Apps-Umgebung eine untergeordnete storages-Ressource hinzu.

    {
      "type": "Microsoft.App/managedEnvironments",
      "apiVersion": "2022-03-01",
      "name": "[parameters('environment_name')]",
      "location": "[parameters('location')]",
      "properties": {
        "daprAIInstrumentationKey": "[parameters('dapr_ai_instrumentation_key')]",
        "appLogsConfiguration": {
          "destination": "log-analytics",
          "logAnalyticsConfiguration": {
            "customerId": "[parameters('log_analytics_customer_id')]",
            "sharedKey": "[parameters('log_analytics_shared_key')]"
          }
        }
      },
      "resources": [
        {
          "type": "storages",
          "name": "myazurefiles",
          "apiVersion": "2022-03-01",
          "dependsOn": [
            "[resourceId('Microsoft.App/managedEnvironments', parameters('environment_name'))]"
          ],
          "properties": {
            "azureFile": {
              "accountName": "[parameters('storage_account_name')]",
              "accountKey": "[parameters('storage_account_key')]",
              "shareName": "[parameters('storage_share_name')]",
              "accessMode": "ReadWrite"
            }
          }
        }
      ]
    }
    
  2. Aktualisieren Sie die Container-App-Ressource, um ein Volume und eine Volumeeinbindung hinzuzufügen.

    {
      "apiVersion": "2022-03-01",
      "type": "Microsoft.App/containerApps",
      "name": "[parameters('containerappName')]",
      "location": "[parameters('location')]",
      "properties": {
    
        ...
    
        "template": {
          "revisionSuffix": "myrevision",
          "containers": [
            {
              "name": "main",
              "image": "[parameters('container_image')]",
              "resources": {
                "cpu": 0.5,
                "memory": "1Gi"
              },
              "volumeMounts": [
                {
                  "mountPath": "/myfiles",
                  "volumeName": "azure-files-volume"
                }
              ]
            }
          ],
          "scale": {
            "minReplicas": 1,
            "maxReplicas": 3
          },
          "volumes": [
            {
              "name": "azure-files-volume",
              "storageType": "AzureFile",
              "storageName": "myazurefiles"
            }
          ]
        }
      }
    }
    
    • Fügen Sie dem Abschnitt template Ihrer Container-App-Definition ein volumes-Array hinzu, und definieren Sie ein Volume.
      • name ist ein Bezeichner für das Volume.
      • Verwenden Sie AzureFile für storageType.
      • Verwenden Sie für storageName den Namen des Speichers, den Sie in der Umgebung definiert haben.
    • Fügen Sie für jeden Container in der Vorlage, für den Sie Azure Files-Speicher einbinden möchten, der Containerdefinition ein volumeMounts-Array hinzu, und definieren Sie eine Volumeeinbindung.
      • volumeName ist der Name, der im volumes-Array definiert ist.
      • mountPath ist der Pfad im Container zum Einbinden des Volumes.

Ein vollständiges Beispiel finden Sie in der ARM-Vorlagen-API-Spezifikation.