Een Azure-bestandsshare koppelen in Azure Container Instances

Azure-containerinstanties zijn standaard staatloos. Als de container opnieuw wordt opgestart, vastloopt of stopt, gaat de hele status ervan verloren. Als u een status langer wilt behouden dan de levensduur van de container, moet u een volume vanuit een externe opslag koppelen. Zoals in dit artikel wordt weergegeven, kunt 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 en die toegankelijk zijn via het industriestandaard SMB-protocol (Server Message Block). 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

  • U kunt alleen Azure Files-shares koppelen aan Linux-containers. Bekijk meer informatie over de verschillen in functieondersteuning voor Linux- en Windows-containergroepen in het overzicht.
  • Voor het koppelen van azure-bestandssharevolumes is vereist dat de Linux-container wordt uitgevoerd als hoofdmap .
  • 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, worden bestanden of mappen verborgen, waardoor ze niet toegankelijk zijn terwijl de container wordt uitgevoerd.

Belangrijk

Als u containergroepen implementeert in een Azure Virtual Network, moet u een service-eindpunt toevoegen aan uw Azure Storage-account.

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 vorige 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
    
  • Sharenaam : deze waarde is al bekend (gedefinieerd als acishare in het voorgaande script)

  • Opslagaccountsleutel : deze waarde vindt u met behulp van 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 de share en het koppelpunt voor het volume op wanneer u de container maakt met az container create. Als u de vorige stappen hebt gevolgd, kunt u de share koppelen die u eerder hebt gemaakt 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 waarin u het containerexemplaren maakt. Werk de waarde in de voorgaande opdracht bij als u een foutbericht met een DNS-naamlabel ontvangt wanneer u de opdracht uitvoert.

Bestanden in gekoppeld volume beheren

Zodra de container wordt opgestart, kunt u de eenvoudige web-app die is geïmplementeerd via de installatiekopie Microsoft aci-hellofiles gebruiken 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 de app, kunt u de Azure Portal of een hulpprogramma zoals de Microsoft Azure Storage Explorer gebruiken om het bestand of de bestanden die naar de bestandsshare zijn geschreven, op te halen en te inspecteren.

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 per YAML-sjabloon is een voorkeursmethode bij het implementeren van containergroepen die uit meerdere containers bestaan.

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 u eerder hebt gemaakt als een volume. Waar aangegeven, voert u 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 waarin u het containerexemplaren 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 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 de 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 in.

Vul vervolgens voor elke container waarin u het volume wilt koppelen de volumeMounts matrix in de properties sectie van de containerdefinitie.

De volgende Resource Manager sjabloon definieert een containergroep met één container die is gemaakt met de aci-hellofiles installatiekopieën. De container koppelt de Azure-bestandsshare acishare die u eerder hebt gemaakt als een volume. Waar aangegeven, voert u 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 waarin u het containerexemplaren 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 sjabloon Resource Manager, slaat u de voorgaande JSON op in een bestand met de naam deploy-aci.jsonen voert u 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 sharedetails op en definieert u de volumes door de matrix in de volumesproperties sectie van het bestand in te vullen.

Als u bijvoorbeeld twee Azure Files shares met de naam share1 en share2 hebt gemaakt in het opslagaccount myStorageAccount, ziet de volumes matrix in een Resource Manager sjabloon er ongeveer als volgt uit:

"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 koppelt u bijvoorbeeld de twee volumes , myvolume1 en myvolume2, die eerder zijn gedefinieerd:

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