Instalowanie udziału plików platformy Azure w usłudze Azure Container Instances

Domyślnie usługa Azure Container Instances jest bezstanowa. Jeśli kontener zostanie uruchomiony ponownie, ulegnie awarii lub zatrzymaniu, cały jego stan zostanie utracony. Aby w takim przypadku go zachować, należy zainstalować wolumin z magazynu zewnętrznego. Jak pokazano w tym artykule, Azure Container Instances można zainstalować udział plików platformy Azure utworzony przy użyciu Azure Files. Azure Files oferuje w pełni zarządzane udziały plików hostowane w usłudze Azure Storage, które są dostępne za pośrednictwem standardowego protokołu SMB (Industry Standard Server Message Block). Korzystanie z udziału plików platformy Azure z Azure Container Instances zapewnia funkcje udostępniania plików podobne do korzystania z udziału plików platformy Azure z maszynami wirtualnymi platformy Azure.

Ograniczenia

  • Udziały Azure Files można zainstalować tylko w kontenerach systemu Linux. Zapoznaj się z więcej o różnicach w obsłudze funkcji dla grup kontenerów systemu Linux i Windows w przeglądzie.
  • Instalacja woluminu udziału plików platformy Azure wymaga uruchomienia kontenera systemu Linux jako katalogu głównego .
  • Instalacja woluminu udziału plików platformy Azure jest ograniczona do obsługi systemu plików CIFS.

Uwaga

Instalowanie udziału Azure Files w wystąpieniu kontenera jest podobne do instalacji powiązania platformy Docker. Jeśli zainstalujesz udział w katalogu kontenera, w którym istnieją pliki lub katalogi, instalacja zaciemnia pliki lub katalogi, co czyni je niedostępnymi podczas uruchamiania kontenera.

Ważne

Jeśli wdrażasz grupy kontenerów w usłudze Azure Virtual Network, musisz dodać punkt końcowy usługi do konta usługi Azure Storage.

Tworzenie udziału plików platformy Azure

Przed rozpoczęciem korzystania z udziału plików platformy Azure za pomocą usługi Azure Container Instances należy go utworzyć. Uruchom następujący skrypt, aby utworzyć konto magazynu do hostowania udziału plików i sam udział. Nazwa konta magazynu musi być globalnie unikatowa, więc skrypt dodaje losową wartość do podstawowego ciągu.

# 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

Uzyskiwanie poświadczeń magazynu

Aby zainstalować udział plików platformy Azure jako wolumin w usłudze Azure Container Instances, potrzebujesz trzech wartości: nazwy konta magazynu, nazwy udziału i klucza dostępu do magazynu.

  • Nazwa konta magazynu — jeśli użyto poprzedniego skryptu, nazwa konta magazynu była przechowywana w zmiennej $ACI_PERS_STORAGE_ACCOUNT_NAME . Aby wyświetlić nazwę konta, wpisz:

    echo $ACI_PERS_STORAGE_ACCOUNT_NAME
    
  • Nazwa udziału — ta wartość jest już znana (zdefiniowana jako acishare w poprzednim skrycie)

  • Klucz konta magazynu — tę wartość można znaleźć przy użyciu następującego polecenia:

    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
    

Wdrażanie kontenera i instalacji woluminu — interfejs wiersza polecenia

Aby zainstalować udział plików platformy Azure jako wolumin w kontenerze przy użyciu interfejsu wiersza polecenia platformy Azure, określ udział i punkt instalacji woluminu podczas tworzenia kontenera za pomocą polecenia az container create. Jeśli wykonano poprzednie kroki, możesz zainstalować utworzony wcześniej udział, używając następującego polecenia, aby utworzyć kontener:

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/

Wartość --dns-name-label musi być unikatowa w regionie świadczenia usługi Azure, w którym tworzysz wystąpienie kontenera. Zaktualizuj wartość w poprzednim poleceniu, jeśli podczas wykonywania polecenia zostanie wyświetlony komunikat o błędzie etykiety nazwy DNS .

Zarządzanie plikami na woluminie zainstalowanym

Po uruchomieniu kontenera możesz użyć prostej aplikacji internetowej wdrożonej za pośrednictwem obrazu aci-hellofiles firmy Microsoft, aby utworzyć małe pliki tekstowe w udziale plików platformy Azure w określonej ścieżce instalacji. Uzyskaj w pełni kwalifikowaną nazwę domeny (FQDN) aplikacji internetowej za pomocą polecenia az container show :

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

Po zapisaniu tekstu przy użyciu aplikacji możesz użyć Azure Portal lub narzędzia, takiego jak Eksplorator usługi Microsoft Azure Storage, aby pobrać i sprawdzić plik lub pliki zapisane w udziale plików.

Wdrażanie woluminu kontenera i instalacji — YAML

Grupę kontenerów można również wdrożyć i zainstalować wolumin w kontenerze przy użyciu interfejsu wiersza polecenia platformy Azure i szablonu YAML. Wdrażanie przy użyciu szablonu YAML jest preferowaną metodą wdrażania grup kontenerów składających się z wielu kontenerów.

Poniższy szablon YAML definiuje grupę kontenerów z jednym kontenerem utworzonym za pomocą aci-hellofiles obrazu. Kontener instaluje udział plików platformy Azure utworzony wcześniej jako wolumin. W przypadku wskazania wprowadź nazwę i klucz magazynu dla konta magazynu, które hostuje udział plików.

Podobnie jak w przykładzie interfejsu wiersza polecenia, dnsNameLabel wartość musi być unikatowa w regionie świadczenia usługi Azure, w którym tworzysz wystąpienie kontenera. W razie potrzeby zaktualizuj wartość w pliku 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

Aby wdrożyć za pomocą szablonu YAML, zapisz poprzedni plik YAML w pliku o nazwie deploy-aci.yaml, a następnie wykonaj polecenie az container create za pomocą parametru --file :

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

Wdrażanie woluminu kontenera i instalacji — Resource Manager

Oprócz wdrażania interfejsu wiersza polecenia i yaML można wdrożyć grupę kontenerów i zainstalować wolumin w kontenerze przy użyciu szablonu usługi Azure Resource Manager.

Najpierw wypełnij tablicę volumes w sekcji grupy properties kontenerów szablonu.

Następnie dla każdego kontenera, w którym chcesz zainstalować wolumin, wypełnij volumeMounts tablicę w properties sekcji definicji kontenera.

Poniższy szablon Resource Manager definiuje grupę kontenerów z jednym kontenerem utworzonym za pomocą aci-hellofiles obrazu. Kontener instaluje udział plików platformy Azure utworzony wcześniej jako wolumin. W przypadku wskazania wprowadź nazwę i klucz magazynu dla konta magazynu, które hostuje udział plików.

Podobnie jak w poprzednich przykładach, dnsNameLabel wartość musi być unikatowa w regionie świadczenia usługi Azure, w którym tworzysz wystąpienie kontenera. W razie potrzeby zaktualizuj wartość w szablonie.

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

Aby wdrożyć za pomocą szablonu Resource Manager, zapisz poprzedni kod JSON w pliku o nazwie deploy-aci.json, a następnie wykonaj polecenie az deployment group create za pomocą parametru --template-file :

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

Instalowanie wielu woluminów

Aby zainstalować wiele woluminów w wystąpieniu kontenera, należy wdrożyć przy użyciu szablonu usługi Azure Resource Manager, pliku YAML lub innej metody programowej. Aby użyć szablonu lub pliku YAML, podaj szczegóły udziału i zdefiniuj woluminy, wypełniając tablicę volumes w properties sekcji pliku.

Jeśli na przykład utworzono dwa udziały Azure Files o nazwie share1 i share2 na koncie magazynu myStorageAccount, tablica volumes w szablonie Resource Manager będzie wyglądać podobnie do następującego:

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

Następnie dla każdego kontenera w grupie kontenerów, w której chcesz zainstalować woluminy, wypełnij volumeMounts tablicę w properties sekcji definicji kontenera. Na przykład spowoduje to zainstalowanie dwóch woluminów myvolume1 i myvolume2, wcześniej zdefiniowanych:

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

Następne kroki

Dowiedz się, jak zainstalować inne typy woluminów w Azure Container Instances: