Montera en Azure-filresurs i Azure Container Instances
Som standard är Azure Container Instances tillståndslösa. Om containern startas om, kraschar eller stoppas går hela dess tillstånd förlorat. Om du vill bevara tillståndet längre än containerns livslängd måste du montera en volym från en extern lagring. Som du ser i den här artikeln kan Azure Container Instances montera en Azure-filresurs som skapats med Azure Files. Azure Files erbjuder fullständigt hanterade filresurser i Azure Storage som är tillgängliga via SMB-protokollet (Server Message Block). Om du använder en Azure-filresurs med Azure Container Instances får du fildelningsfunktioner som liknar hur du använder en Azure-filresurs med virtuella Azure-datorer.
Begränsningar
- Azure Storage stöder inte SMB-montering av filresurs med hanterad identitet
- Du kan bara montera Azure Files-resurser i Linux-containrar. Läs mer om skillnaderna i funktionsstöd för Linux- och Windows-containergrupper i översikten.
- Azure-filresursens volymmontering kräver att Linux-containern körs som rot.
- Volymmonteringar för Azure-filresurser är begränsade till CIFS-stöd.
Kommentar
Monteringen av en Azure Files-resurs till en containerinstans liknar en Docker-bindningsmontering. Om du monterar en resurs i en containerkatalog där filer eller kataloger finns döljer monteringen filer eller kataloger, vilket gör dem otillgängliga medan containern körs.
Viktigt!
Om den utgående anslutningen till Internet blockeras i det delegerade undernätet måste du lägga till en tjänstslutpunkt i Azure Strorage i ditt delegerade undernät.
Skapa en Azure-filresurs
Innan du kan använda en Azure-filresurs med Azure Container Instances måste du skapa den. Kör följande skript för att skapa ett lagringskonto som är värd för filresursen och själva resursen. Namnet på lagringskontot måste vara globalt unikt, så skriptet lägger till ett slumpmässigt värde i bassträngen.
# 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
Hämta autentiseringsuppgifter för lagringen
När du ska montera en Azure-filresurs som en volym i Azure Container Instances behöver du tre värden: namnet på lagringskontot, resursnamnet och åtkomstnyckeln för lagringen.
Lagringskontonamn – Om du använde föregående skript lagrades lagringskontonamnet i variabeln
$ACI_PERS_STORAGE_ACCOUNT_NAME
. Om du vill se kontonamnet skriver du:echo $ACI_PERS_STORAGE_ACCOUNT_NAME
Resursnamn – Det här värdet är redan känt (definierat som
acishare
i föregående skript)Lagringskontonyckel – Det här värdet finns med följande kommando:
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
Distribuera container och montera volym – CLI
Om du vill montera en Azure-filresurs som en volym i en container med hjälp av Azure CLI anger du resurs- och volymmonteringspunkten när du skapar containern med az container create. Om du följde föregående steg kan du montera resursen som du skapade tidigare med hjälp av följande kommando för att skapa en container:
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/
Värdet --dns-name-label
måste vara unikt i Den Azure-region där du skapar containerinstansen. Uppdatera värdet i föregående kommando om du får felmeddelandet DNS-namnetikett när du kör kommandot.
Hantera filer i monterad volym
När containern har startats kan du använda webbappen som distribuerats via Microsoft aci-hellofiles-avbildningen för att skapa små textfiler i Azure-filresursen på den monteringssökväg som du angav. Hämta webbappens fullständigt kvalificerade domännamn (FQDN) med kommandot az container show :
az container show --resource-group $ACI_PERS_RESOURCE_GROUP \
--name hellofiles --query ipAddress.fqdn --output tsv
När du har sparat text med hjälp av appen kan du använda Azure Portal eller ett verktyg som Microsoft Azure Storage Explorer för att hämta och inspektera filen eller filerna som skrivits till filresursen.
Distribuera container och montera volym – YAML
Du kan också distribuera en containergrupp och montera en volym i en container med Azure CLI och en YAML-mall. Att distribuera med YAML-mall är en föredragen metod när du distribuerar containergrupper som består av flera containrar.
Följande YAML-mall definierar en containergrupp med en container som skapats med avbildningen aci-hellofiles
. Containern monterar Azure-filresursen acishare som skapades tidigare som en volym. Ange namnet och lagringsnyckeln för det lagringskonto som är värd för filresursen.
Precis som i CLI-exemplet dnsNameLabel
måste värdet vara unikt i Den Azure-region där du skapar containerinstansen. Uppdatera värdet i YAML-filen om det behövs.
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
Om du vill distribuera med YAML-mallen sparar du föregående YAML i en fil med namnet deploy-aci.yaml
och kör sedan kommandot az container create med parametern --file
:
# Deploy with YAML template
az container create --resource-group myResourceGroup --file deploy-aci.yaml
Distribuera container och montera volym – Resource Manager
Förutom CLI- och YAML-distribution kan du distribuera en containergrupp och montera en volym i en container med hjälp av en Azure Resource Manager-mall.
Fyll först i matrisen volumes
i avsnittet containergrupp properties
i mallen.
Fyll sedan i matrisen volumeMounts
i properties
avsnittet i containerdefinitionen för varje container där du vill montera volymen.
Följande Resource Manager-mall definierar en containergrupp med en container som skapats med avbildningen aci-hellofiles
. Containern monterar Azure-filresursen acishare som skapades tidigare som en volym. Ange namnet och lagringsnyckeln för det lagringskonto som är värd för filresursen.
Precis som i föregående exempel dnsNameLabel
måste värdet vara unikt i Den Azure-region där du skapar containerinstansen. Uppdatera värdet i mallen om det behövs.
{
"$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>"
}
}
]
}
}
]
}
Om du vill distribuera med Resource Manager-mallen sparar du föregående JSON i en fil med namnet deploy-aci.json
och kör sedan kommandot az deployment group create med parametern --template-file
:
# Deploy with Resource Manager template
az deployment group create --resource-group myResourceGroup --template-file deploy-aci.json
Montera flera volymer
Om du vill montera flera volymer i en containerinstans måste du distribuera med en Azure Resource Manager-mall, en YAML-fil eller en annan programmatisk metod. Om du vill använda en mall eller YAML-fil anger du resursinformationen och definierar volymerna genom att fylla i matrisen volumes
properties
i avsnittet i filen.
Om du till exempel har skapat två Azure Files-resurser med namnet share1 och share2 i lagringskontot myStorageAccount ser matrisen volumes
i en Resource Manager-mall ut ungefär som i följande exempel:
"volumes": [{
"name": "myvolume1",
"azureFile": {
"shareName": "share1",
"storageAccountName": "myStorageAccount",
"storageAccountKey": "<storage-account-key>"
}
},
{
"name": "myvolume2",
"azureFile": {
"shareName": "share2",
"storageAccountName": "myStorageAccount",
"storageAccountKey": "<storage-account-key>"
}
}]
För varje container i containergruppen där du vill montera volymerna fyller du sedan i matrisen volumeMounts
properties
i avsnittet i containerdefinitionen. Detta monterar till exempel de två volymerna, myvolume1 och myvolume2, som tidigare definierats:
"volumeMounts": [{
"name": "myvolume1",
"mountPath": "/mnt/share1/"
},
{
"name": "myvolume2",
"mountPath": "/mnt/share2/"
}]
Nästa steg
Lär dig hur du monterar andra volymtyper i Azure Container Instances: