Připojení sdílené složky ve službě Azure Container Instances

Ve výchozím nastavení je služba Azure Container Instances bezstavová. Pokud se kontejner restartuje, dojde k chybovému ukončení nebo se zastaví, dojde ke ztrátě veškerého jeho stavu. Pokud chcete zachovat stav i po skončení životnosti kontejneru, je nutné připojit svazek z externího úložiště. Jak je znázorněno v tomto článku, Azure Container Instances může připojit sdílenou složku Azure vytvořenou pomocí Azure Files. Azure Files nabízí plně spravované sdílené složky hostované ve službě Azure Storage, které jsou přístupné prostřednictvím standardního protokolu SMB (Server Message Block). Použití sdílené složky Azure s Azure Container Instances poskytuje funkce sdílení souborů podobné použití sdílené složky Azure s virtuálními počítači Azure.

Omezení

  • Ke kontejnerům Linuxu můžete připojit jenom Azure Files sdílené složky. Další informace o rozdílech v podpoře funkcí pro skupiny kontejnerů s Linuxem a Windows najdete v přehledu.
  • Připojení svazku sdílené složky Azure vyžaduje, aby se kontejner Linuxu spustil jako kořenový adresář .
  • Připojení svazků sdílených složek Azure jsou omezená na podporu CIFS.

Poznámka

Připojení sdílené složky Azure Files k instanci kontejneru se podobá připojení vazby Dockeru. Pokud připojíte sdílenou složku do adresáře kontejneru, ve kterém existují soubory nebo adresáře, připojení zakryje soubory nebo adresáře, takže jsou při spuštění kontejneru nedostupné.

Důležité

Pokud nasazujete skupiny kontejnerů do Virtual Network Azure, musíte do účtu služby Azure Storage přidat koncový bod služby.

Vytvoření sdílené složky Azure

Abyste mohli ve službě Azure Container Instances použít sdílenou složku Azure, je potřeba ji napřed vytvořit. Spuštěním následujícího skriptu vytvořte účet úložiště pro hostování sdílené složky a samotné sdílené složky. Název účtu úložiště musí být globálně jedinečný, a proto skript přidá k základnímu řetězci náhodnou hodnotu.

# 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

Získání přihlašovacích údajů úložiště

K připojení sdílené složky Azure jako svazku ve službě Azure Container Instances potřebujete tři hodnoty: název účtu úložiště, název sdílené složky a přístupový klíč k úložišti.

  • Název účtu úložiště – Pokud jste použili předchozí skript, název účtu úložiště se uložil do $ACI_PERS_STORAGE_ACCOUNT_NAME proměnné. Pokud chcete zobrazit název účtu, zadejte:

    echo $ACI_PERS_STORAGE_ACCOUNT_NAME
    
  • Název sdílené složky – tato hodnota je již známá (definovaná jako acishare v předchozím skriptu).

  • Klíč účtu úložiště – tuto hodnotu najdete pomocí následujícího příkazu:

    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
    

Nasazení kontejneru a připojení svazku – rozhraní příkazového řádku

Pokud chcete připojit sdílenou složku Azure jako svazek v kontejneru pomocí Azure CLI, zadejte při vytváření kontejneru bod připojení sdílené složky a svazku pomocí příkazu az container create. Pokud jste postupovali podle předchozích kroků, můžete připojit sdílenou složku, kterou jste vytvořili dříve, pomocí následujícího příkazu a vytvořit kontejner:

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/

Hodnota --dns-name-label musí být jedinečná v rámci oblasti Azure, ve které vytváříte instanci kontejneru. Pokud se při spuštění příkazu zobrazí chybová zpráva popisku názvu DNS , aktualizujte hodnotu v předchozím příkazu.

Správa souborů v připojeném svazku

Po spuštění kontejneru můžete pomocí jednoduché webové aplikace nasazené prostřednictvím image Microsoft aci-hellofiles vytvořit malé textové soubory ve sdílené složce Azure na zadané cestě připojení. Pomocí příkazu az container show získejte plně kvalifikovaný název domény (FQDN) webové aplikace:

az container show --resource-group $ACI_PERS_RESOURCE_GROUP \
  --name hellofiles --query ipAddress.fqdn --output tsv

Po uložení textu pomocí aplikace můžete pomocí Azure Portal nebo nástroje, jako je Průzkumník služby Microsoft Azure Storage, načíst a zkontrolovat soubor nebo soubory zapsané do sdílené složky.

Nasazení kontejneru a připojení svazku – YAML

Můžete také nasadit skupinu kontejnerů a připojit svazek do kontejneru pomocí Azure CLI a šablony YAML. Při nasazování skupin kontejnerů, které se skládají z více kontejnerů, je upřednostňovanou metodou nasazení šablony YAML.

Následující šablona YAML definuje skupinu kontejnerů s jedním kontejnerem vytvořeným pomocí aci-hellofiles image. Kontejner připojí sdílenou složku Azure vytvořenou dříve jako svazek. Pokud je to uvedeno, zadejte název a klíč úložiště pro účet úložiště, který je hostitelem sdílené složky.

Stejně jako v příkladu dnsNameLabel rozhraní příkazového řádku musí být hodnota jedinečná v rámci oblasti Azure, ve které vytvoříte instanci kontejneru. V případě potřeby aktualizujte hodnotu v souboru YAML.

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

Pokud chcete provést nasazení pomocí šablony YAML, uložte předchozí YAML do souboru s názvem deploy-aci.yamla pak spusťte příkaz az container create s parametrem --file :

# Deploy with YAML template
az container create --resource-group myResourceGroup --file deploy-aci.yaml

Nasazení kontejneru a připojení svazku – Resource Manager

Kromě nasazení rozhraní příkazového řádku a YAML můžete nasadit skupinu kontejnerů a připojit svazek do kontejneru pomocí šablony Azure Resource Manager.

Nejprve naplňte volumes pole v části skupiny properties kontejnerů šablony.

Potom pro každý kontejner, do kterého chcete svazek připojit, naplňte volumeMounts pole v properties části definice kontejneru.

Následující šablona Resource Manager definuje skupinu kontejnerů s jedním kontejnerem vytvořeným pomocí aci-hellofiles image. Kontejner připojí sdílenou složku Azure vytvořenou dříve jako svazek. Pokud je to uvedeno, zadejte název a klíč úložiště pro účet úložiště, který je hostitelem sdílené složky.

Stejně jako v předchozích příkladech dnsNameLabel musí být hodnota jedinečná v rámci oblasti Azure, ve které vytvoříte instanci kontejneru. V případě potřeby aktualizujte hodnotu v šabloně.

{
  "$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>"
            }
          }
        ]
      }
    }
  ]
}

Pokud chcete provést nasazení pomocí šablony Resource Manager, uložte předchozí kód JSON do souboru s názvem deploy-aci.jsona pak spusťte příkaz az deployment group create s parametrem--template-file:

# Deploy with Resource Manager template
az deployment group create --resource-group myResourceGroup --template-file deploy-aci.json

Připojení více svazků

Pokud chcete v instanci kontejneru připojit více svazků, musíte provést nasazení pomocí šablony Azure Resource Manager, souboru YAML nebo jiné programové metody. Pokud chcete použít šablonu nebo soubor YAML, zadejte podrobnosti o sdílené složce a definujte svazky naplněním volumes pole v properties části souboru.

Pokud jste například v účtu úložiště myStorageAccount vytvořili dvě Azure Files sdílené složky s názvem share1 a share2, volumes bude pole v šabloně Resource Manager vypadat přibližně takto:

"volumes": [{
  "name": "myvolume1",
  "azureFile": {
    "shareName": "share1",
    "storageAccountName": "myStorageAccount",
    "storageAccountKey": "<storage-account-key>"
  }
},
{
  "name": "myvolume2",
  "azureFile": {
    "shareName": "share2",
    "storageAccountName": "myStorageAccount",
    "storageAccountKey": "<storage-account-key>"
  }
}]

Dále pro každý kontejner ve skupině kontejnerů, do které chcete připojit svazky, naplňte volumeMounts pole v properties části definice kontejneru. Tím se například připojí dva svazky myvolume1 a myvolume2, které byly dříve definovány:

"volumeMounts": [{
  "name": "myvolume1",
  "mountPath": "/mnt/share1/"
},
{
  "name": "myvolume2",
  "mountPath": "/mnt/share2/"
}]

Další kroky

Zjistěte, jak připojit další typy svazků v Azure Container Instances: