Opslagkoppelingen gebruiken in Azure Container Apps
Een container-app heeft toegang tot verschillende typen opslag. Eén app kan, indien nodig, profiteren van meer dan één type opslag.
Opslagtype | Beschrijving | Persistentie | Verbruiksvoorbeeld |
---|---|---|---|
Opslag met containerbereik | Tijdelijke opslag beschikbaar voor een actieve container | Gegevens zijn beschikbaar totdat de container wordt afgesloten | Een lokale app-cache schrijven. |
Opslag met replicabereik | Tijdelijke opslag voor het delen van bestanden tussen containers in dezelfde replica | Gegevens zijn beschikbaar totdat de replica wordt afgesloten | De hoofd-app-container die logboekbestanden schrijft die door een sidecar-container worden verwerkt. |
Azure Files | Permanente opslag | Gegevens blijven behouden in Azure Files | Bestanden naar een bestandsshare schrijven om gegevens toegankelijk te maken door andere systemen. |
Tijdelijke opslag
Een container-app kan tijdelijke gegevens lezen en schrijven naar tijdelijke opslag. Tijdelijke opslag kan worden beperkt tot een container of een replica. De totale hoeveelheid opslag met containerbereik en opslag met replicabereik die beschikbaar is voor elke replica, is afhankelijk van het totale aantal vCPU's dat aan de replica is toegewezen.
vCPU's | Totale tijdelijke opslag |
---|---|
0,25 of lager | 1 GiB |
0,5 of lager | 2 GiB |
1 of lager | 4 GiB |
Meer dan 1 | 8 GiB |
Opslag met containerbereik
Een container kan naar een eigen bestandssysteem schrijven.
Containerbestandssysteemopslag heeft de volgende kenmerken:
- De opslag is tijdelijk en verdwijnt wanneer de container wordt afgesloten of opnieuw wordt opgestart.
- Bestanden die naar deze opslag worden geschreven, zijn alleen zichtbaar voor processen die worden uitgevoerd in de huidige container.
Opslag met replicabereik
U kunt een kortstondig, tijdelijk volume koppelen dat gelijk is aan EmptyDir (lege map) in Kubernetes. Deze opslag is gericht op één replica. Gebruik een EmptyDir
volume om gegevens te delen tussen containers in dezelfde replica.
Opslag met replicabereik heeft de volgende kenmerken:
- Bestanden blijven behouden gedurende de levensduur van de replica.
- Als een container in een replica opnieuw wordt opgestart, blijven de bestanden in het volume behouden.
- Alle init- of app-containers in de replica kunnen hetzelfde volume koppelen.
- Een container kan meerdere
EmptyDir
volumes koppelen.
Als u opslag met replicabereik wilt configureren, definieert u eerst een EmptyDir
volume in de revisie. Definieer vervolgens een volumekoppeling in een of meer containers in de revisie.
Vereisten
Vereiste | Instructies |
---|---|
Azure-account | Als u nog geen account hebt, maakt u gratis een account. |
Azure Container Apps-omgeving | Maak een container-apps-omgeving. |
Configuratie
Wanneer u opslag met replicabereik configureert met behulp van de Azure CLI, moet u een YAML-definitie gebruiken om uw container-app te maken of bij te werken.
Als u een bestaande container-app wilt bijwerken voor het gebruik van opslag met replicabereik, exporteert u de specificatie van uw app naar een YAML-bestand met de naam app.yaml.
az containerapp show -n <APP_NAME> -g <RESOURCE_GROUP_NAME> -o yaml > app.yaml
Breng de volgende wijzigingen aan in de specificatie van uw container-app.
- Voeg een
volumes
matrix toe aan de sectie van detemplate
definitie van uw container-app en definieer een volume. Als u al eenvolumes
matrix hebt, voegt u een nieuw volume toe aan de matrix.- Dit
name
is een id voor het volume. - Gebruiken
EmptyDir
als destorageType
.
- Dit
- Definieer voor elke container in de sjabloon die u het volume wilt koppelen een volumekoppeling in de
volumeMounts
matrix van de containerdefinitie.- Dit
volumeName
is de naam die is gedefinieerd in devolumes
matrix. - Het
mountPath
is het pad in de container om het volume te koppelen.
- Dit
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
- Voeg een
Werk uw container-app bij met behulp van het YAML-bestand.
az containerapp update --name <APP_NAME> --resource-group <RESOURCE_GROUP_NAME> \ --yaml app.yaml
Zie de YAML-specificatie voor een volledig voorbeeld.
Als u een volume met replicabereik wilt maken en wilt koppelen in een container, moet u de volgende wijzigingen aanbrengen in de resource container-apps in een ARM-sjabloon:
- Voeg een
volumes
matrix toe aan de sectie van detemplate
definitie van uw container-app en definieer een volume. Als u al eenvolumes
matrix hebt, voegt u een nieuw volume toe aan de matrix.- Dit
name
is een id voor het volume. - Gebruiken
EmptyDir
als destorageType
.
- Dit
- Definieer voor elke container in de sjabloon die u het volume wilt koppelen een volumekoppeling in de
volumeMounts
matrix van de containerdefinitie.- Dit
volumeName
is de naam die is gedefinieerd in devolumes
matrix. - Het
mountPath
is het pad in de container om het volume te koppelen.
- Dit
Voorbeeld van ARM-sjabloonfragment:
{
"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"
}
]
}
}
}
Zie de API-specificatie van de ARM-sjabloon voor een volledig voorbeeld.
Als u een volume met replicabereik wilt maken en wilt koppelen in een container, implementeert u een nieuwe revisie van uw container-app met behulp van Azure Portal.
Navigeer in Azure Portal naar uw container-app.
Selecteer Revisiebeheer in het linkermenu.
Selecteer Nieuwe revisie maken.
Selecteer de container waaraan u het volume wilt koppelen.
Selecteer in het deelvenster Een containercontext bewerken het tabblad Volumekoppelingen .
Maak onder de sectie Tijdelijke opslag een nieuw volume met de volgende informatie.
- Volumenaam: een naam voor het tijdelijke volume.
- Koppelpad: het absolute pad in de container om het volume te koppelen.
Selecteer Opslaan om wijzigingen op te slaan en het contextvenster af te sluiten.
Selecteer Maken om de nieuwe revisie te maken.
Azure Files-volume
U kunt een bestandsshare vanuit Azure Files koppelen als een volume in een container.
Azure Files Storage heeft de volgende kenmerken:
- Bestanden die zijn geschreven onder de koppelingslocatie, worden opgeslagen in de bestandsshare.
- Bestanden in de share zijn beschikbaar via de koppelingslocatie.
- Meerdere containers kunnen dezelfde bestandsshare koppelen, inclusief containers die zich in een andere replica, revisie of container-app bevinden.
- Alle containers die de share koppelen, hebben toegang tot bestanden die zijn geschreven door een andere container of methode.
- Meer dan één Azure Files-volume kan in één container worden gekoppeld.
Azure Files ondersteunt zowel SMB-protocollen (Server Message Block) als NFS (Network File System). U kunt een Azure Files-share koppelen met behulp van beide protocollen. De bestandsshare die u in de omgeving definieert, moet worden geconfigureerd met hetzelfde protocol dat wordt gebruikt door de bestandsshare in het opslagaccount.
Notitie
Ondersteuning voor het koppelen van NFS-shares in Azure Container Apps is in preview.
Als u Azure Files-opslag in uw container wilt inschakelen, moet u uw omgeving en container-app als volgt instellen:
- Maak een opslagdefinitie in de Container Apps-omgeving.
- Als u NFS gebruikt, moet uw omgeving worden geconfigureerd met een aangepast VNet en moet het opslagaccount worden geconfigureerd om toegang vanuit het VNet toe te staan. Zie NFS-bestandsshares in Azure Files voor meer informatie.
- Als uw omgeving is geconfigureerd met een aangepast VNet, moet u poort 445 en 2049 toestaan in de netwerkbeveiligingsgroep (NSG) die is gekoppeld aan het subnet.
- Definieer een volume van het type
AzureFile
(SMB) ofNfsAzureFile
(NFS) in een revisie. - Definieer een volumekoppeling in een of meer containers in de revisie.
- Het gebruikte Azure Files-opslagaccount moet toegankelijk zijn vanuit het virtuele netwerk van uw container-app. Zie Toegang verlenen vanuit een virtueel netwerk voor meer informatie.
- Als u NFS gebruikt, moet u ook beveiligde overdracht uitschakelen. Zie NFS-bestandsshares in Azure Files en de sectie Een NFS Azure-bestandsshare maken in deze zelfstudie voor meer informatie.
Vereisten
Vereiste | Instructies |
---|---|
Azure-account | Als u nog geen account hebt, maakt u gratis een account. |
Azure Storage-account | Een opslagaccount maken. |
Azure Container Apps-omgeving | Maak een container-apps-omgeving. |
Configuratie
Wanneer u een container-app configureert om een Azure Files-volume te koppelen met behulp van de Azure CLI, moet u een YAML-definitie gebruiken om uw container-app te maken of bij te werken.
Voor een stapsgewijze zelfstudie over het koppelen van een SMB-bestandsshare raadpleegt u Een Azure Files-opslagkoppeling maken in Azure Container Apps.
Voeg een opslagdefinitie toe aan uw Container Apps-omgeving.
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
Vervang
<STORAGE_ACCOUNT_NAME>
en<STORAGE_ACCOUNT_KEY>
door de naam en sleutel van uw opslagaccount. Vervang<STORAGE_SHARE_NAME>
door de naam van de bestandsshare in het opslagaccount.Geldige waarden voor
--access-mode
zijn enReadWrite
ReadOnly
.Als u een bestaande container-app wilt bijwerken om een bestandsshare te koppelen, exporteert u de specificatie van uw app naar een YAML-bestand met de naam app.yaml.
az containerapp show -n <APP_NAME> -g <RESOURCE_GROUP_NAME> -o yaml > app.yaml
Breng de volgende wijzigingen aan in de specificatie van uw container-app.
- Voeg een
volumes
matrix toe aan de sectie van detemplate
definitie van uw container-app en definieer een volume. Als u al eenvolumes
matrix hebt, voegt u een nieuw volume toe aan de matrix.- Dit
name
is een id voor het volume. - Voor
storageType
, gebruikenAzureFile
voor SMB ofNfsAzureFile
voor NFS. Deze waarde moet overeenkomen met het opslagtype dat u in de omgeving hebt gedefinieerd. - Gebruik
storageName
hiervoor de naam van de opslag die u in de omgeving hebt gedefinieerd.
- Dit
- Definieer voor elke container in de sjabloon die u Azure Files-opslag wilt koppelen een volumekoppeling in de
volumeMounts
matrix van de containerdefinitie.- Dit
volumeName
is de naam die is gedefinieerd in devolumes
matrix. - Het
mountPath
is het pad in de container om het volume te koppelen.
- Dit
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
- Voeg een
Werk uw container-app bij met behulp van het YAML-bestand.
az containerapp update --name <APP_NAME> --resource-group <RESOURCE_GROUP_NAME> \ --yaml app.yaml
Zie de YAML-specificatie voor een volledig voorbeeld.
De volgende ARM-sjabloonfragmenten laten zien hoe u een Azure Files-share toevoegt aan een Container Apps-omgeving en deze gebruikt in een container-app.
Voeg een
storages
onderliggende resource toe aan de Container Apps-omgeving.{ "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" } } } ] }
Werk de container-app-resource bij om een volume- en volumekoppeling toe te voegen.
{ "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" } ] } } }
- Voeg een
volumes
matrix toe aan de sectie van detemplate
definitie van uw container-app en definieer een volume. Als u al eenvolumes
matrix hebt, voegt u een nieuw volume toe aan de matrix.- Dit
name
is een id voor het volume. - Voor
storageType
, gebruikenAzureFile
voor SMB ofNfsAzureFile
voor NFS. Deze waarde moet overeenkomen met het opslagtype dat u in de omgeving hebt gedefinieerd. - Gebruik
storageName
hiervoor de naam van de opslag die u in de omgeving hebt gedefinieerd.
- Dit
- Definieer voor elke container in de sjabloon die u Azure Files-opslag wilt koppelen een volumekoppeling in de
volumeMounts
matrix van de containerdefinitie.- Dit
volumeName
is de naam die is gedefinieerd in devolumes
matrix. - Het
mountPath
is het pad in de container om het volume te koppelen.
- Dit
- Voeg een
Zie de API-specificatie van de ARM-sjabloon voor een volledig voorbeeld.
Als u een volumekoppeling wilt configureren voor Azure Files-opslag in Azure Portal, voegt u een bestandsshare toe aan uw Container Apps-omgeving en voegt u vervolgens een volumekoppeling toe aan uw container-app door een nieuwe revisie te maken.
Navigeer in Azure Portal naar uw Container Apps-omgeving.
Selecteer Azure Files in het linkermenu.
Selecteer Toevoegen.
Voer in het contextmenu Bestandsshare toevoegen de volgende gegevens in:
- Naam: Een naam voor de bestandsshare.
- Naam van opslagaccount: de naam van het opslagaccount dat de bestandsshare bevat.
- Sleutel voor opslagaccount: de toegangssleutel voor het opslagaccount.
- Bestandsshare: de naam van de bestandsshare.
- Toegangsmodus: de toegangsmodus voor de bestandsshare. Geldige waarden zijn 'Lezen/schrijven' en 'Alleen-lezen'.
Selecteer Toevoegen om het contextvenster af te sluiten.
Selecteer Opslaan om de wijzigingen door te voeren.
Navigeer naar uw container-app.
Selecteer Revisiebeheer in het linkermenu.
Selecteer Nieuwe revisie maken.
Selecteer de container waarin u het volume wilt koppelen.
Selecteer in het deelvenster Een containercontext bewerken het tabblad Volumekoppelingen .
Maak onder de sectie Bestandsshares een nieuw volume met de volgende informatie.
- Naam van bestandsshare: de bestandsshare die u hebt toegevoegd.
- Koppelpad: het absolute pad in de container om het volume te koppelen.
Selecteer Opslaan om wijzigingen op te slaan en het contextvenster af te sluiten.
Selecteer Maken om de nieuwe revisie te maken.