Einbinden einer Azure-Dateifreigabe in Azure Container Instances
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/"
}]