Delen via


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.yamlen 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.jsonen 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: