Einbinden einer Azure-Dateifreigabe in Azure Container Instances

Abgeschlossen

Standardmäßig ist Azure Container Instances zustandslos. Wenn der Container abstürzt oder beendet wird, gehen alle Zustände verloren. Sie müssen ein Volume aus einem externen Speicher einbinden, um den Zustand nach Ablauf der Lebensdauer des Containers abzurufen. Wie in dieser Lerneinheit gezeigt, können Azure Container Instances eine Azure-Dateifreigabe einbinden, die mit Azure Files erstellt wurde. Azure Files bietet vollständig verwaltete Dateifreigaben in der Cloud, auf die über das Branchenstandardprotokoll Server Message Block (SMB) zugegriffen werden kann. Durch das Verwenden einer Azure-Dateifreigabe mit Azure Container Instances werden Dateifreigabefeatures bereitgestellt, die Azure-Dateifreigaben mit virtuellen Azure-Computern ähneln.

Einschränkungen

  • Sie können Azure Files-Freigaben nur in Linux-Container einzulegen.
  • Das Einbinden einer Azure-Dateifreigabe als Volume erfordert, dass der Linux-Container als root ausgeführt wird.
  • Die Volumemounts der Azure-Dateifreigabe sind auf die CIFS-Unterstützung beschränkt.

Bereitstellen des Containers und Einbinden des Volumes

Um eine Azure-Dateifreigabe als Volume in einem Container mithilfe der Azure CLI einzubinden, geben Sie die Freigabe und den Einbindepunkt des Volumes bei der Erstellung des Containers mit az container create an. Es folgt ein Beispiel des Befehls:

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/

Der --dns-name-label-Wert muss in der Azure-Region, in der Sie die Containerinstanz erstellen, eindeutig sein. Aktualisieren Sie den Wert im vorherigen Befehl, wenn Sie beim Ausführen des Befehls eine Fehlermeldung bezüglich der DNS-Namensbezeichnung erhalten.

Bereitstellen des Containers und Einbinden des Volumes – YAML

Sie können auch eine Containergruppe bereitstellen und mit der Azure CLI und einer YAML-Vorlage ein Volume in einen Container einbinden. Die Bereitstellung der YAML-Vorlage ist die bevorzugte Methode bei der Bereitstellung von Containergruppen, die aus mehreren Containern bestehen.

Die folgende YAML-Vorlage definiert eine Containergruppe mit einem Container, der ein aci-hellofiles-Image einbindet. Der Container bindet die zuvor als Volume erstellte Azure-Dateifreigabe acishare ein. Es folgt eine YAML-Beispieldatei.

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

Einbinden mehrerer Volumes

Sie können mehrere Volumes in eine Containerinstanz einbinden, indem Sie zum Bereitstellen eine Azure Resource Manager-Vorlage oder eine YAML-Datei verwenden. Stellen Sie zum Verwenden einer Vorlage oder YAML-Datei die Freigabedetails bereit, und definieren Sie die Volumes, indem Sie das Array volumes im Abschnitt properties der Vorlage auffüllen.

Wenn Sie z.B. zwei Azure Files-Freigaben mit den Namen share1 und share2 im Speicherkonto myStorageAccount erstellt haben, wird das Array volumes in einer Resource Manager-Vorlage ähnlich wie im folgenden Beispiel aussehen:

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

Füllen Sie als Nächstes für jeden Container in der Containergruppe, in den Sie die Volumes einbinden möchten, das Array volumeMounts im Abschnitt properties der Containerdefinition auf. Dadurch werden beispielsweise die beiden zuvor definierten Volumes myvolume1 und myvolume2 eingebunden:

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