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 Persistenz Verwendungsbeispiel
Containerbezogener Speicher Flüchtiger Speicher, der für einen ausgeführten Container verfügbar ist Daten sind verfügbar, bis der Container heruntergefahren wird. Schreiben in einen lokalen App-Cache.
Replikatbezogener Speicher Flüchtiger Speicher für die Freigabe von Dateien zwischen Containern im selben Replikat Daten sind verfügbar, bis das Replikat heruntergefahren wird. App-Hauptcontainer, der Protokolldateien schreibt, die von einem Sidecar-Container verarbeitet werden
Azure Files Permanenter Speicher Daten werden in Azure Files gespeichert. Schreiben von Dateien in eine Dateifreigabe, um Daten für andere Systeme zugänglich zu machen.

Kurzlebiger Speicher

Eine Container-App kann temporäre Daten im flüchtigen Speicher lesen und schreiben. Flüchtiger Speicher kann auf einen Container oder ein Replikat festgelegt werden. Die Gesamtmenge des für jedes Replikat verfügbaren containerbezogenen und replikatbezogenen Speichers hängt von der Gesamtmenge der dem Replikat zugeordneten vCPUs ab.

vCPUs Gesamter flüchtiger Speicher
0,25 oder weniger 1 GiB
0,5 oder weniger 2 GiB
1 oder weniger 4 GiB
Mehr als 1 8 GiB

Containerbezogener Speicher

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.

Replikatbezogener Speicher

Sie können ein kurzlebiges, temporäres Volume einbinden, das EmptyDir (leeres Verzeichnis) in Kubernetes entspricht. Dieser Speicher ist auf ein einzelnes Replikat begrenzt. Verwenden Sie ein EmptyDir-Volume, um Daten zwischen Containern im selben Replikat freizugeben.

Replikatbezogener 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 Start- oder App-Container im Replikat können dasselbe Volume einbinden.
  • Ein Container kann mehrere EmptyDir-Volumes einbinden.

Um replikatbezogenen 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 replikatbezogenen Speicher mithilfe der Azure CLI konfigurieren, müssen Sie eine YAML-Definition verwenden, um Ihre Container-App zu erstellen oder zu aktualisieren.

  1. Wenn Sie eine vorhandene Container-App aktualisieren möchten, um replikatbezogenen 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. Wenn Sie bereits über ein volumes-Array verfügen, fügen Sie dem Array ein neues Volume hinzu.
      • name ist ein Bezeichner für das Volume.
      • Verwenden Sie EmptyDir als storageType.
    • Definieren Sie für jeden Container in der Vorlage, für den Sie das Volume einbinden möchten, eine Volumeeinbindung im volumeMounts-Array der Containerdefinition.
      • 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_NAME1>
          name: my-container-1
          volumeMounts:
          - mountPath: /myempty
            volumeName: myempty
        - image: <IMAGE_NAME_2>
          name: my-container-2
          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
    

Ein vollständiges Beispiel finden Sie in der YAML-Spezifikation.

Wenn Sie ein replikatbezogenes Volume erstellen und in einen Container einbinden möchten, nehmen Sie die folgenden Änderungen an der Container-App-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. Wenn Sie bereits über ein volumes-Array verfügen, fügen Sie dem Array ein neues Volume hinzu.
    • name ist ein Bezeichner für das Volume.
    • Verwenden Sie EmptyDir als storageType.
  • Definieren Sie für jeden Container in der Vorlage, für den Sie das Volume einbinden möchten, eine Volumeeinbindung im volumeMounts-Array der Containerdefinition.
    • 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"
            }
          ]
        },
        {
          "name": "sidecar",
          "image": "[parameters('sidecar_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.

Um ein replikatbezogenes Volume zu erstellen und in einem Container bereitzustellen, stellen Sie eine neue Revision Ihrer Container-App mithilfe des Azure-Portals bereit.

  1. Navigieren Sie im Azure-Portal zu Ihrer Container-App.

  2. Wählen Sie im linken Menü Revisionsverwaltung aus.

  3. Wählen Sie Create new revision (Neue Revision erstellen) aus.

  4. Wählen Sie den Container aus, in den Sie das Volume einbinden möchten.

  5. Wählen Sie im Kontextbereich Container bearbeiten die Registerkarte Volumeeinbindungen aus.

  6. Erstellen Sie im Abschnitt Flüchtiger Speicher ein neues Volume mit den folgenden Informationen:

    • Volumename: Ein Name für das kurzlebige Volume
    • Bereitstellungspfad: Der absolute Pfad im Container zum Einbinden des Volumes
  7. Wählen Sie Speichern aus, um Änderungen zu speichern und den Kontextbereich zu beenden.

  8. Wählen Sie Erstellen aus, um die neue Revision zu erstellen.

Azure Files–Volume

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

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.

Azure Files unterstützt sowohl SMB- als auch NFS-Protokolle. Sie können eine Azure Files-Freigabe mit einem der beiden Protokolle bereitstellen. Die Dateifreigabe, die Sie in der Umgebung definieren, muss mit demselben Protokoll konfiguriert werden, das von der Dateifreigabe im Speicherkonto verwendet wird.

Hinweis

Unterstützung für die Einbidung von NFS-Freigaben in Azure Container Apps befindet sich in der Vorschau.

Um Azure Files-Speicher in Ihrem Container zu aktivieren, müssen Sie Ihre Umgebung und Container-App wie folgt einrichten:

  • Erstellen Sie eine Speicherdefinition in der Container-Apps-Umgebung.
  • Wenn Sie NFS verwenden, muss Ihre Umgebung mit einem benutzerdefinierten VNet konfiguriert werden, und das Speicherkonto muss so konfiguriert sein, dass der Zugriff über das VNet zulässig ist. Weitere Informationen finden Sie unter NFS-Dateifreigaben in Azure Files.
  • Wenn Ihre Umgebung mit einem benutzerdefinierten VNet konfiguriert ist, müssen Sie die Ports 445 und 2049 in der Netzwerksicherheitsgruppe (NSG) zulassen, die dem Subnetz zugeordnet ist.
  • Definieren Sie ein Volume vom Typ AzureFile (SMB) oder NfsAzureFile (NFS) in einer Revision.
  • Definieren Sie eine Volumeeinbindung in einem oder mehreren Containern in der Revision.
  • Auf das verwendete Azure Files-Speicherkonto muss über das virtuelle Netzwerk Ihrer Container-App zugegriffen werden können. Weitere Informationen finden Sie unter Gewähren des Zugriffs über ein virtuelles Netzwerk.

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 eine Container-App zum Einbinden eines Azure Files-Volumes mithilfe der Azure CLI konfigurieren, müssen Sie eine YAML-Definition verwenden, um Ihre Container-App zu erstellen oder zu aktualisieren.

Eine Schritt-für-Schritt-Anleitung zum Einbinden einer SMB-Dateifreigabe finden Sie unter Tutorial: Erstellen einer Azure Files-Volumeeinbindung in Azure Container Apps.

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

    az containerapp env storage set --name my-env --resource-group my-group \
        --storage-name mystorage \
        --storage-type AzureFile \
        --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. Wenn Sie bereits über ein volumes-Array verfügen, fügen Sie dem Array ein neues Volume hinzu.
      • name ist ein Bezeichner für das Volume.
      • Verwenden Sie AzureFile (SMB) oder NfsAzureFile (NFS) für storageType. Dieser Wert muss mit dem Speichertyp übereinstimmen, den Sie in der Umgebung definiert haben.
      • Verwenden Sie für storageName den Namen des Speichers, den Sie in der Umgebung definiert haben.
    • Definieren Sie für jeden Container in der Vorlage, für den Sie Azure Files-Speicher einbinden möchten, eine Volumeeinbindung im volumeMounts-Array der Containerdefinition.
      • 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 app.yaml
    

Ein vollständiges Beispiel finden Sie in der YAML-Spezifikation.

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": "2023-05-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. Wenn Sie bereits über ein volumes-Array verfügen, fügen Sie dem Array ein neues Volume hinzu.
      • name ist ein Bezeichner für das Volume.
      • Verwenden Sie AzureFile (SMB) oder NfsAzureFile (NFS) für storageType. Dieser Wert muss mit dem Speichertyp übereinstimmen, den Sie in der Umgebung definiert haben.
      • Verwenden Sie für storageName den Namen des Speichers, den Sie in der Umgebung definiert haben.
    • Definieren Sie für jeden Container in der Vorlage, für den Sie Azure Files-Speicher einbinden möchten, eine Volumeeinbindung im volumeMounts-Array der Containerdefinition.
      • 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.

Um eine Volumeeinbindung für den Azure Files-Speicher im Azure-Portal zu konfigurieren, fügen Sie Ihrer Container Apps-Umgebung eine Dateifreigabe hinzu. Fügen Sie dann ihrer Container-App eine Volumeeinbindung hinzu, indem Sie eine neue Revision erstellen.

  1. Navigieren Sie im Azure-Portal zu Ihrer Container Apps-Umgebung.

  2. Wählen Sie im linken Menü Azure Files aus.

  3. Wählen Sie Hinzufügen aus.

  4. Geben Sie im Kontextmenü Dateifreigabe hinzufügen folgende Informationen ein:

    • Name: Der Name für die Dateifreigabe
    • Name des Speicherkontos: Der Name des Speicherkontos, das die Dateifreigabe enthält
    • Speicherkontoschlüssel: Der Zugriffsschlüssel für das Speicherkonto
    • Dateifreigabe: Der Name der Dateifreigabe
    • Zugriffsmodus: Der Zugriffsmodus für die Dateifreigabe. Gültige Werte sind „Lesen/Schreiben“ und „Schreibgeschützt“.
  5. Wählen Sie Hinzufügen aus, um den Kontextbereich zu beenden.

  6. Wählen Sie Speichern aus, um die Änderungen zu übernehmen.

  7. Navigieren Sie zu Ihrer Container-App.

  8. Wählen Sie im linken Menü Revisionsverwaltung aus.

  9. Wählen Sie Create new revision (Neue Revision erstellen) aus.

  10. Wählen Sie den Container aus, in den Sie das Volume einbinden möchten.

  11. Wählen Sie im Kontextbereich Container bearbeiten die Registerkarte Volumeeinbindungen aus.

  12. Erstellen Sie im Abschnitt Dateifreigaben ein neues Volume mit den folgenden Informationen:

    • Dateifreigabename: Die von Ihnen hinzugefügte Dateifreigabe
    • Bereitstellungspfad: Der absolute Pfad im Container zum Einbinden des Volumes
  13. Wählen Sie Speichern aus, um Änderungen zu speichern und den Kontextbereich zu beenden.

  14. Wählen Sie Erstellen aus, um die neue Revision zu erstellen.