Montar um compartilhamento de arquivos do Azure em Instâncias de Contêiner do Azure

Concluído

Por padrão, as Instâncias de Contêiner do Azure não têm estado. Se o contêiner falhar ou parar, todas as informações de estado serão perdidas. Para persistir o estado além do tempo de vida do contêiner, é necessário montar um volume em um repositório externo. Conforme mostrado nesta unidade, as Instâncias de Contêiner do Azure podem montar um compartilhamento de arquivos criado com os Arquivos do Azure. Os Arquivos do Azure oferecem compartilhamentos de arquivos totalmente gerenciados na nuvem que são acessíveis por meio do protocolo SMB padrão do setor. Usar um compartilhamento de arquivos do Azure com Instâncias de Contêiner do Azure fornece recursos de compartilhamento de arquivos semelhantes ao uso de um compartilhamento de arquivos do Azure com máquinas virtuais do Azure.

Limitações

  • O compartilhamento de Arquivos do Azure só pode ser montado para contêineres do Linux.
  • A montagem de volume de compartilhamento de arquivos do Azure requer que o contêiner Linux seja executado como raiz.
  • As montagens de volume de compartilhamento de Arquivos do Azure são limitadas ao suporte a CIFS.

Implantar o contêiner e montar o volume

Para montar um compartilhamento de arquivos do Azure como um volume em um contêiner usando a CLI do Azure, especifique o compartilhamento e o ponto de montagem de volume ao criar o contêiner com az container create. A seguir, um exemplo do comando:

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/

O valor --dns-name-label precisa ser exclusivo dentro da região do Azure quando você criar a instância de contêiner. Atualize o valor no comando anterior se você receber uma mensagem de erro do rótulo do nome DNS ao executar o comando.

Implantar o contêiner e montar o volume – YAML

Você também pode implantar um grupo de contêineres e montar um volume em um contêiner com a CLI do Azure e um modelo YAML. A implantação pelo modelo YAML é o método preferencial ao implantar grupos de contêineres que consistem em vários contêineres.

O modelo YAML a seguir define um grupo de contêineres com um contêiner criado com a imagem aci-hellofiles. O contêiner monta o compartilhamento de arquivos do Azure acishare criado anteriormente como um volume. A seguir, um exemplo de arquivo 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

Montar vários volumes

Para montar vários volumes em uma instância de contêiner, você deve implantar usando um modelo do Azure Resource Manager ou um arquivo YAML. Para usar um modelo ou arquivo YAML, forneça os detalhes do compartilhamento e defina os volumes preenchendo a matriz volumes na seção do modelo properties.

Por exemplo, se você criou dois compartilhamentos de Arquivos do Azure denominados share1 e share2 na conta de armazenamento myStorageAccount, a matriz volumes em um modelo do Resource Manager teria aparência semelhante a:

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

Em seguida, para cada contêiner do grupo de contêineres no qual você deseja montar os volumes, popule a matriz volumeMounts na seção properties da definição de contêiner. Por exemplo, isso monta os dois volumes, myvolume1 e myvolume2, definidos anteriormente:

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