Dela via


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 startar kan du använda den enkla webbappen som distribueras 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 appen kan du använda Azure-portalen 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.yamloch 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.jsonoch 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 så här:

"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: