Montaje de un recurso compartido de archivos de Azure en Azure Container Instances

Completado

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/"
}]