Een Azure-bestandsshare koppelen in Azure Container Instances
Azure-containerinstanties zijn standaard staatloos. Als de container opnieuw wordt opgestart, vastloopt of stopt, gaat alle status verloren. Als u een status langer wilt behouden dan de levensduur van de container, moet u een volume van een externe opslag koppelen. Zoals wordt weergegeven in dit artikel, kan Azure Container Instances een Azure-bestandsshare koppelen die is gemaakt met Azure Files. Azure Files biedt volledig beheerde bestandsshares die worden gehost in Azure Storage die toegankelijk zijn via het SMB-protocol (Server Message Block) van de industriestandaard. Het gebruik van een Azure-bestandsshare met Azure Container Instances biedt functies voor het delen van bestanden die vergelijkbaar zijn met het gebruik van een Azure-bestandsshare met virtuele Azure-machines.
Beperkingen
- Azure Storage biedt geen ondersteuning voor SMB-koppeling van bestandsshares met behulp van beheerde identiteit
- U kunt Alleen Azure Files-shares koppelen aan Linux-containers. Bekijk meer over de verschillen in functieondersteuning voor Linux- en Windows-containergroepen in het overzicht.
- Voor het koppelen van azure-bestandssharevolumes moet de Linux-container als root worden uitgevoerd.
- Volumekoppelingen voor Azure-bestandsshares zijn beperkt tot CIFS-ondersteuning.
Notitie
Het koppelen van een Azure Files-share aan een containerinstantie is vergelijkbaar met een Docker-bindingskoppeling. Als u een share koppelt aan een containermap waarin bestanden of mappen bestaan, verdoezelt de koppeling bestanden of mappen, waardoor deze niet toegankelijk zijn terwijl de container wordt uitgevoerd.
Belangrijk
Als de uitgaande verbinding met internet wordt geblokkeerd in het gedelegeerde subnet, moet u een service-eindpunt toevoegen aan Azure Strorage op uw gedelegeerde subnet.
Een Azure-bestandsshare maken
Voordat u een Azure-bestandsshare met Azure Container Instances kunt gebruiken, moet u deze maken. Voer het volgende script uit om een opslagaccount te maken voor het hosten van de bestandsshare en de share zelf. De naam van het opslagaccount moet globaal uniek zijn, dus voegt het script een willekeurige waarde toe aan de basistekenreeks.
# Change these four parameters as needed
ACI_PERS_RESOURCE_GROUP=myResourceGroup
ACI_PERS_STORAGE_ACCOUNT_NAME=mystorageaccount$RANDOM
ACI_PERS_LOCATION=eastus
ACI_PERS_SHARE_NAME=acishare
# Create the storage account with the parameters
az storage account create \
--resource-group $ACI_PERS_RESOURCE_GROUP \
--name $ACI_PERS_STORAGE_ACCOUNT_NAME \
--location $ACI_PERS_LOCATION \
--sku Standard_LRS
# Create the file share
az storage share create \
--name $ACI_PERS_SHARE_NAME \
--account-name $ACI_PERS_STORAGE_ACCOUNT_NAME
Opslagreferenties ophalen
Als u een Azure-bestandsshare wilt koppelen als een volume in Azure Container Instances, hebt u drie waarden nodig: de naam van het opslagaccount, de sharenaam en de toegangssleutel voor opslag.
Naam van opslagaccount: als u het voorgaande script hebt gebruikt, is de naam van het opslagaccount opgeslagen in de
$ACI_PERS_STORAGE_ACCOUNT_NAME
variabele. Als u de accountnaam wilt zien, typt u:echo $ACI_PERS_STORAGE_ACCOUNT_NAME
Share-naam : deze waarde is al bekend (gedefinieerd als
acishare
in het voorgaande script)Sleutel van het opslagaccount : deze waarde vindt u met de volgende opdracht:
STORAGE_KEY=$(az storage account keys list --resource-group $ACI_PERS_RESOURCE_GROUP --account-name $ACI_PERS_STORAGE_ACCOUNT_NAME --query "[0].value" --output tsv) echo $STORAGE_KEY
Container implementeren en volume koppelen - CLI
Als u een Azure-bestandsshare wilt koppelen als een volume in een container met behulp van de Azure CLI, geeft u het koppelpunt voor de share en het volume op wanneer u de container maakt met az container create. Als u de vorige stappen hebt uitgevoerd, kunt u de share die u eerder hebt gemaakt koppelen met behulp van de volgende opdracht om een container te maken:
az container create \
--resource-group $ACI_PERS_RESOURCE_GROUP \
--name hellofiles \
--image mcr.microsoft.com/azuredocs/aci-hellofiles \
--dns-name-label aci-demo \
--ports 80 \
--azure-file-volume-account-name $ACI_PERS_STORAGE_ACCOUNT_NAME \
--azure-file-volume-account-key $STORAGE_KEY \
--azure-file-volume-share-name $ACI_PERS_SHARE_NAME \
--azure-file-volume-mount-path /aci/logs/
De --dns-name-label
waarde moet uniek zijn binnen de Azure-regio waar u de containerinstantie maakt. Werk de waarde in de voorgaande opdracht bij als u een foutbericht over een DNS-naamlabel ontvangt wanneer u de opdracht uitvoert.
Bestanden in gekoppeld volume beheren
Zodra de container is gestart, kunt u de web-app gebruiken die is geïmplementeerd via de Installatiekopie van Microsoft aci-hellofiles om kleine tekstbestanden te maken in de Azure-bestandsshare op het koppelingspad dat u hebt opgegeven. Haal de FQDN (Fully Qualified Domain Name) van de web-app op met de opdracht az container show :
az container show --resource-group $ACI_PERS_RESOURCE_GROUP \
--name hellofiles --query ipAddress.fqdn --output tsv
Nadat u tekst hebt opgeslagen met behulp van de app, kunt u Azure Portal of een hulpprogramma zoals Microsoft Azure Storage Explorer gebruiken om het bestand of de bestanden op te halen en te inspecteren die naar de bestandsshare zijn geschreven.
Container implementeren en volume koppelen - YAML
U kunt ook een containergroep implementeren en een volume in een container koppelen met de Azure CLI en een YAML-sjabloon. Implementeren door YAML-sjabloon is een voorkeursmethode bij het implementeren van containergroepen die bestaan uit meerdere containers.
Met de volgende YAML-sjabloon wordt een containergroep gedefinieerd met één container die is gemaakt met de aci-hellofiles
installatiekopieën. De container koppelt de Azure-bestandsshare acishare die eerder is gemaakt als een volume. Voer, indien aangegeven, de naam en opslagsleutel in voor het opslagaccount dat als host fungeert voor de bestandsshare.
Net als in het CLI-voorbeeld moet de dnsNameLabel
waarde uniek zijn binnen de Azure-regio waar u de containerinstantie maakt. Werk indien nodig de waarde in het YAML-bestand bij.
apiVersion: '2019-12-01'
location: eastus
name: file-share-demo
properties:
containers:
- name: hellofiles
properties:
environmentVariables: []
image: mcr.microsoft.com/azuredocs/aci-hellofiles
ports:
- port: 80
resources:
requests:
cpu: 1.0
memoryInGB: 1.5
volumeMounts:
- mountPath: /aci/logs/
name: filesharevolume
osType: Linux
restartPolicy: Always
ipAddress:
type: Public
ports:
- port: 80
dnsNameLabel: aci-demo
volumes:
- name: filesharevolume
azureFile:
sharename: acishare
storageAccountName: <Storage account name>
storageAccountKey: <Storage account key>
tags: {}
type: Microsoft.ContainerInstance/containerGroups
Als u wilt implementeren met de YAML-sjabloon, slaat u de voorgaande YAML op in een bestand met de naam deploy-aci.yaml
en voert u vervolgens de opdracht az container create uit met de --file
parameter:
# Deploy with YAML template
az container create --resource-group myResourceGroup --file deploy-aci.yaml
Container implementeren en volume koppelen - Resource Manager
Naast cli- en YAML-implementatie kunt u een containergroep implementeren en een volume in een container koppelen met behulp van een Azure Resource Manager-sjabloon.
Vul eerst de volumes
matrix in de sectie containergroep properties
van de sjabloon.
Vul vervolgens voor elke container waarin u het volume wilt koppelen de volumeMounts
matrix in de properties
sectie van de containerdefinitie.
Met de volgende Resource Manager-sjabloon wordt een containergroep gedefinieerd met één container die is gemaakt met de aci-hellofiles
installatiekopieën. De container koppelt de Azure-bestandsshare acishare die eerder is gemaakt als een volume. Voer, indien aangegeven, de naam en opslagsleutel in voor het opslagaccount dat als host fungeert voor de bestandsshare.
Net als in de vorige voorbeelden moet de dnsNameLabel
waarde uniek zijn binnen de Azure-regio waar u de containerinstantie maakt. Werk indien nodig de waarde in de sjabloon bij.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"variables": {
"container1name": "hellofiles",
"container1image": "mcr.microsoft.com/azuredocs/aci-hellofiles"
},
"resources": [
{
"name": "file-share-demo",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2019-12-01",
"location": "[resourceGroup().location]",
"properties": {
"containers": [
{
"name": "[variables('container1name')]",
"properties": {
"image": "[variables('container1image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
},
"ports": [
{
"port": 80
}
],
"volumeMounts": [
{
"name": "filesharevolume",
"mountPath": "/aci/logs"
}
]
}
}
],
"osType": "Linux",
"ipAddress": {
"type": "Public",
"ports": [
{
"protocol": "tcp",
"port": "80"
}
],
"dnsNameLabel": "aci-demo"
},
"volumes": [
{
"name": "filesharevolume",
"azureFile": {
"shareName": "acishare",
"storageAccountName": "<Storage account name>",
"storageAccountKey": "<Storage account key>"
}
}
]
}
}
]
}
Als u wilt implementeren met de Resource Manager-sjabloon, slaat u de voorgaande JSON op in een bestand met de naam deploy-aci.json
en voert u vervolgens de opdracht az deployment group create uit met de --template-file
parameter:
# Deploy with Resource Manager template
az deployment group create --resource-group myResourceGroup --template-file deploy-aci.json
Meerdere volumes koppelen
Als u meerdere volumes in een containerinstantie wilt koppelen, moet u implementeren met behulp van een Azure Resource Manager-sjabloon, een YAML-bestand of een andere programmatische methode. Als u een sjabloon of YAML-bestand wilt gebruiken, geeft u de details van de share op en definieert u de volumes door de volumes
matrix in te vullen in de properties
sectie van het bestand.
Als u bijvoorbeeld twee Azure Files-shares hebt gemaakt met de naam share1 en share2 in het opslagaccount myStorageAccount, lijkt de volumes
matrix in een Resource Manager-sjabloon op het volgende voorbeeld:
"volumes": [{
"name": "myvolume1",
"azureFile": {
"shareName": "share1",
"storageAccountName": "myStorageAccount",
"storageAccountKey": "<storage-account-key>"
}
},
{
"name": "myvolume2",
"azureFile": {
"shareName": "share2",
"storageAccountName": "myStorageAccount",
"storageAccountKey": "<storage-account-key>"
}
}]
Vul vervolgens voor elke container in de containergroep waarin u de volumes wilt koppelen de volumeMounts
matrix in de properties
sectie van de containerdefinitie. Hiermee worden bijvoorbeeld de twee volumes, myvolume1 en myvolume2, eerder gedefinieerd, gekoppeld:
"volumeMounts": [{
"name": "myvolume1",
"mountPath": "/mnt/share1/"
},
{
"name": "myvolume2",
"mountPath": "/mnt/share2/"
}]
Volgende stappen
Meer informatie over het koppelen van andere volumetypen in Azure Container Instances: