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 zachować stan również wtedy, należy zainstalować wolumin z magazynu zewnętrznego. Jak pokazano w tym artykule, usługa Azure Container Instances może zainstalować udział plików platformy Azure utworzony za pomocą usługi Azure Files. Usługa 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 w usłudze 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

  • Usługa Azure Storage nie obsługuje instalowania protokołu SMB udziału plików przy użyciu tożsamości zarządzanej
  • Udziały usługi Azure Files można zainstalować tylko w kontenerach systemu Linux. Przejrzyj więcej informacji na temat różnic w obsłudze funkcji dla grup kontenerów systemów Linux i Windows w omówieniu.
  • Instalacja woluminu udziału plików platformy Azure wymaga uruchomienia kontenera systemu Linux jako głównego .
  • Instalacja woluminów udziału plików platformy Azure jest ograniczona do obsługi funkcji CIFS.

Uwaga

Instalowanie udziału usługi Azure Files w wystąpieniu kontenera jest podobne do instalacji powiązanej z platformą 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 połączenie wychodzące z Internetem jest zablokowane w delegowanej podsieci, musisz dodać punkt końcowy usługi do usługi Azure Strorage w delegowanej podsieci.

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źć za pomocą 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 instalowanie 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ść musi być unikatowa --dns-name-label 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żna 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 aplikacji internetowej (FQDN) 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ć witryny 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, wartość musi być unikatowa w regionie świadczenia usługi Azure, dnsNameLabel 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ć przy użyciu szablonu YAML, zapisz poprzedni kod 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 kontenera i instalowanie woluminu — Resource Manager

Oprócz wdrożenia 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 tablicę volumeMounts w properties sekcji definicji kontenera.

Poniższy szablon usługi 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, wartość musi być unikatowa w regionie świadczenia usługi Azure, dnsNameLabel 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ć przy użyciu szablonu usługi 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 volumes tablicę w properties sekcji pliku.

Jeśli na przykład utworzono dwa udziały usługi Azure Files o nazwie share1 i share2 na koncie magazynu myStorageAccount, tablica volumes w szablonie usługi 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 tablicę volumeMounts 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 usłudze Azure Container Instances: