Sdílet prostřednictvím


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, chybově ukončí nebo zastaví, ztratí se veškerý jeho stav. Pokud chcete zachovat stav i po skončení doby života kontejneru, je nutné připojit svazek z externího úložiště. Jak je znázorněno v tomto článku, služba Azure Container Instances může připojit sdílenou složku Azure vytvořenou pomocí služby Azure Files. Azure Files nabízí plně spravované sdílené složky hostované ve službě Azure Storage, které jsou přístupné přes standardní protokol SMB (Server Message Block). Použití sdílené složky Azure se službou Azure Container Instances poskytuje funkce pro sdílení souborů podobné použití sdílené složky Azure s virtuálními počítači Azure.

Omezení

  • Azure Storage nepodporuje připojení smb sdílené složky pomocí spravované identity
  • Sdílené složky Azure Files můžete připojit pouze ke kontejnerům Linuxu. Další informace o rozdílech v podpoře funkcí pro skupiny kontejnerů Linuxu a Windows najdete v přehledu.
  • Připojení svazku sdílené složky Azure vyžaduje, aby kontejner Linux běžel jako root.
  • Připojení svazků sdílené složky 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í zakrývá soubory nebo adresáře a při spuštění kontejneru je znepřístupní.

Důležité

Pokud je odchozí připojení k internetu v delegované podsíti zablokované, musíte ve své delegované podsíti přidat koncový bod služby do služby Azure Strorage.

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ě byl uložen v $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 svazku připojení – ROZHRANÍ příkazového řádku

Pokud chcete připojit sdílenou složku Azure jako svazek v kontejneru pomocí Azure CLI, při vytváření kontejneru pomocí příkazu az container create určete přípojný bod sdílené složky a svazku. Pokud jste postupovali podle předchozích kroků, můžete sdílenou složku, kterou jste vytvořili dříve, připojit 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ů na připojeném svazku

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

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í webu 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. Nasazení pomocí šablony YAML je upřednostňovanou metodou při nasazování skupin kontejnerů sestávajících z více kontejnerů.

Následující šablona YAML definuje skupinu kontejnerů s jedním kontejnerem vytvořeným s imagí aci-hellofiles . Kontejner připojí sdílenou složku Azure vytvořenou dříve jako svazek. Tam, kde je 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 rozhraní příkazového řádku musí být hodnota jedinečná v rámci oblasti Azure, dnsNameLabel ve které vytváří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 svazku připojení – 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 Manageru.

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

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

Následující šablona Resource Manageru definuje skupinu kontejnerů s jedním kontejnerem vytvořeným s imagí aci-hellofiles . Kontejner připojí sdílenou složku Azure vytvořenou dříve jako svazek. Tam, kde je 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 musí být hodnota jedinečná v rámci oblasti Azure, dnsNameLabel ve které vytváří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 Manageru, uložte předchozí 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 připojit více svazků v instanci kontejneru, musíte nasadit pomocí šablony Azure Resource Manageru, souboru YAML nebo jiné programové metody. Pokud chcete použít šablonu nebo soubor YAML, zadejte podrobnosti sdílené složky a definujte svazky vyplněním volumes pole v properties části souboru.

Pokud jste například vytvořili dvě sdílené složky Azure Files s názvem share1 a share2 v účtu úložiště myStorageAccount, volumes pole v šabloně Resource Manageru by vypadalo podobně jako v následujícím příkladu:

"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ů, ve 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, dříve definované:

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

Další kroky

Zjistěte, jak připojit jiné typy svazků ve službě Azure Container Instances: