Montaje de un recurso compartido de archivos de Azure en Azure Container Instances
De forma predeterminada, Azure Container Instances no tiene estado. Si el contenedor se bloquea o se detiene, se pierde todo su estado. Para conservar el estado más allá de la vigencia del contenedor, debe montar un volumen desde un almacén externo. Como se muestra en esta unidad, Azure Container Instances puede montar un recurso compartido de archivos de Azure creado con Azure Files. Azure Files ofrece recursos compartidos de archivos totalmente administrados en la nube a los que se puede acceder mediante el protocolo estándar del sector Bloque de mensajes del servidor (SMB). El uso de un recurso compartido de archivos de Azure con Azure Container Instances ofrece características de uso compartido de archivos similares al uso de un recurso compartido de archivo de Azure con Azure Virtual Machines.
Limitaciones
- Solo puede montar los recursos compartidos de archivos en los contenedores Linux.
- Para montar el volumen del recurso compartido de archivos de Azure, es necesario que el contenedor de Linux se ejecute como raíz.
- Los montajes de volúmenes de recursos compartidos de archivos de Azure se limitan a la compatibilidad con CIFS.
Implementación de un contenedor y montaje del volumen
Para montar un recurso compartido de archivos de Azure como volumen en un contenedor mediante la CLI de Azure, especifique el recurso compartido y el punto de montaje del volumen al crear el contenedor con az container create
. A continuación, se muestra un comando de ejemplo:
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/
El valor --dns-name-label
debe ser único dentro de la región de Azure en la que se crea la instancia de contenedor. Actualice el valor del comando anterior si recibe un mensaje de error de etiqueta de nombre DNS al ejecutar el comando.
Implementar contenedor y montar volumen: YAML
También puede implementar un grupo de contenedores y montar un volumen en un contenedor con la CLI de Azure y una plantilla de YAML. La implementación mediante la plantilla YAML es el método preferido al implementar grupos de contenedores que constan de varios contenedores.
La siguiente plantilla de YAML define un grupo de contenedores con un contenedor creado con la imagen aci-hellofiles
. El contenedor monta el recurso compartido de archivos de Azure acishare creado anteriormente como un volumen. A continuación, se muestra un archivo XML de ejemplo.
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
Montaje de varios volúmenes
Para montar varios volúmenes en una instancia del contenedor, debe realizar la implementación con una plantilla de Azure Resource Manager o un archivo YAML. Para usar una plantilla o un archivo YAML, proporcione los detalles del recurso compartido y defina los volúmenes al rellenar la matriz volumes
de la sección properties
de la plantilla.
Por ejemplo, si ha creado dos recursos compartidos de Azure Files denominados share1 y share2 en la cuenta de almacenamiento myStorageAccount, la matriz volumes
de la plantilla de Resource Manager sería similar a la siguiente:
"volumes": [{
"name": "myvolume1",
"azureFile": {
"shareName": "share1",
"storageAccountName": "myStorageAccount",
"storageAccountKey": "<storage-account-key>"
}
},
{
"name": "myvolume2",
"azureFile": {
"shareName": "share2",
"storageAccountName": "myStorageAccount",
"storageAccountKey": "<storage-account-key>"
}
}]
A continuación, para cada contenedor del grupo de contenedores en el que desea montar los volúmenes, rellene la matriz volumeMounts
en la sección properties
de la definición del contenedor. Por ejemplo, esto monta los dos volúmenes, myvolume1 y myvolume2 definidos previamente:
"volumeMounts": [{
"name": "myvolume1",
"mountPath": "/mnt/share1/"
},
{
"name": "myvolume2",
"mountPath": "/mnt/share2/"
}]