Usar montagens de armazenamento em Aplicativos de Contêiner do Azure

Um aplicativo de contêiner tem acesso a diferentes tipos de armazenamento. Um único aplicativo pode aproveitar mais de um tipo de armazenamento, se necessário.

Tipo de armazenamento Descrição Persistência Exemplo de uso
Armazenamento com escopo de contêiner Armazenamento efêmero disponível para um contêiner em execução Os dados estão disponíveis até que o contêiner seja desligado Escrevendo um cache de aplicativo local.
Armazenamento com escopo de réplica Armazenamento efêmero para compartilhar arquivos entre contêineres na mesma réplica Os dados estão disponíveis até que a réplica seja desligada O contêiner do aplicativo principal que grava arquivos de log que um contêiner sidecar processa.
Arquivos do Azure Armazenamento permanente Os dados são persistidos nos Arquivos do Azure Gravar arquivos em um compartilhamento de arquivos para tornar os dados acessíveis por outros sistemas.

Armazenamento efêmero

Um aplicativo de contêiner pode ler e gravar dados temporários no armazenamento efêmero. O armazenamento efêmero pode ter como escopo um contêiner ou uma réplica. A quantidade total de armazenamento com escopo de contêiner e escopo de réplica disponível para cada réplica depende do número total de vCPUs alocadas para a réplica.

vCPUs Armazenamento efêmero total
0,25 ou inferior 1 GiB
0,5 ou inferior 2 GiB
1 ou inferior 4 GiB
Mais de 1 8 GiB

Armazenamento com escopo de contêiner

Um contêiner pode gravar em seu próprio sistema de arquivos.

O armazenamento do sistema de arquivos de contêiner tem as seguintes características:

  • O armazenamento é temporário e desaparece quando o contêiner é desligado ou reiniciado.
  • Os arquivos gravados nesse armazenamento só são visíveis para processos em execução no contêiner atual.

Armazenamento com escopo de réplica

Você pode montar um volume temporário efêmero equivalente ao EmptyDir (diretório vazio) no Kubernetes. Esse armazenamento tem o escopo de uma única réplica. Use um volume EmptyDir para compartilhar dados entre contêineres na mesma réplica.

O armazenamento com escopo de réplica tem as seguintes características:

  • Os arquivos são mantidos durante o tempo de vida da réplica.
    • Se um contêiner em uma réplica for reiniciado, os arquivos no volume permanecerão.
  • Todos os contêineres de inicialização ou aplicativo na réplica podem montar o mesmo volume.
  • Um contêiner pode montar vários volumes EmptyDir.

Para configurar o armazenamento com escopo de réplica, primeiro defina um volume EmptyDir na revisão. Defina uma montagem de volume em um ou mais contêineres na revisão.

Pré-requisitos

Requisito Instruções
Conta do Azure Se você não tiver, crie uma conta gratuita.
Ambiente de Aplicativos de Contêiner do Azure Crie um ambiente de aplicativos de contêiner.

Configuração

Ao configurar o armazenamento com escopo de réplica usando a CLI do Azure, você deve usar uma definição YAML para criar ou atualizar seu aplicativo de contêiner.

  1. Para atualizar um aplicativo de contêiner existente para usar o armazenamento com escopo de réplica, exporte a especificação do aplicativo para um arquivo YAML chamado app.yaml.

    az containerapp show -n <APP_NAME> -g <RESOURCE_GROUP_NAME> -o yaml > app.yaml
    
  2. Faça as seguintes alterações na especificação do aplicativo de contêiner.

    • Adicione uma matriz volumes à seção template da definição do aplicativo de contêiner e defina um volume. Se você já tiver uma matriz volumes, adicione um novo volume à matriz.
      • O name é um identificador para o volume.
      • Use EmptyDir como o storageType.
    • Para cada contêiner no modelo que você deseja montar o volume, defina uma montagem de volume na matriz volumeMounts da definição de contêiner.
      • O volumeName nome é definido na matriz volumes.
      • É mountPath o caminho no contêiner para montar o volume.
    properties:
      managedEnvironmentId: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.App/managedEnvironments/<ENVIRONMENT_NAME>
      configuration:
        activeRevisionsMode: Single
      template:
        containers:
        - image: <IMAGE_NAME1>
          name: my-container-1
          volumeMounts:
          - mountPath: /myempty
            volumeName: myempty
        - image: <IMAGE_NAME_2>
          name: my-container-2
          volumeMounts:
          - mountPath: /myempty
            volumeName: myempty
        volumes:
        - name: myempty
          storageType: EmptyDir
    
  3. Atualize seu aplicativo de contêiner usando o arquivo YAML.

    az containerapp update --name <APP_NAME> --resource-group <RESOURCE_GROUP_NAME> \
        --yaml app.yaml
    

Consulte a especificação YAML para obter um exemplo completo.

Para criar um volume com escopo de réplica e montá-lo em um contêiner, faça as seguintes alterações no recurso de aplicativos de contêiner em um modelo do ARM:

  • Adicione uma matriz volumes à seção template da definição do aplicativo de contêiner e defina um volume. Se você já tiver uma matriz volumes, adicione um novo volume à matriz.
    • O name é um identificador para o volume.
    • Use EmptyDir como o storageType.
  • Para cada contêiner no modelo que você deseja montar o volume, defina uma montagem de volume na matriz volumeMounts da definição de contêiner.
    • O volumeName nome é definido na matriz volumes.
    • É mountPath o caminho no contêiner para montar o volume.

Exemplo de trecho de modelo do ARM:

{
  "apiVersion": "2022-03-01",
  "type": "Microsoft.App/containerApps",
  "name": "[parameters('containerappName')]",
  "location": "[parameters('location')]",
  "properties": {

    ...

    "template": {
      "revisionSuffix": "myrevision",
      "containers": [
        {
          "name": "main",
          "image": "[parameters('container_image')]",
          "resources": {
            "cpu": 0.5,
            "memory": "1Gi"
          },
          "volumeMounts": [
            {
              "mountPath": "/myempty",
              "volumeName": "myempty"
            }
          ]
        },
        {
          "name": "sidecar",
          "image": "[parameters('sidecar_image')]",
          "resources": {
            "cpu": 0.5,
            "memory": "1Gi"
          },
          "volumeMounts": [
            {
              "mountPath": "/myempty",
              "volumeName": "myempty"
            }
          ]
        }
      ],
      "scale": {
        "minReplicas": 1,
        "maxReplicas": 3
      },
      "volumes": [
        {
          "name": "myempty",
          "storageType": "EmptyDir"
        }
      ]
    }
  }
}

Confira a especificação da API de modelo do ARM para obter um exemplo completo.

Para criar um volume com escopo de réplica e montá-lo em um contêiner, implante uma nova revisão do aplicativo de contêiner usando o portal do Azure.

  1. No portal do Azure, navegue até seu aplicativo de contêiner.

  2. Selecione Gerenciamento de revisão no menu esquerdo.

  3. Selecione Criar nova revisão.

  4. Selecione o contêiner no qual você deseja montar o volume.

  5. No painel Contexto Editar um contêiner, selecione a guia Montagens de volume.

  6. Na seção Armazenamento efêmero, crie um novo volume com as informações a seguir.

    • Nome do volume: um nome para o volume efêmero.
    • Caminho de montagem: o caminho absoluto no contêiner para montar o volume.
  7. Selecione Salvar para salvar as alterações e sair do painel Contexto.

  8. Depois, selecione Criar para criar o grupo.

Volume de Arquivos do Azure

Você pode montar um compartilhamento de arquivos pelos Arquivos do Azure como um volume em um contêiner.

O armazenamento dos Arquivos do Azure tem as seguintes características:

  • Os arquivos gravados sob o local de montagem são persistidos no compartilhamento de arquivos.
  • Os arquivos no compartilhamento estão disponíveis por meio do local de montagem.
  • Vários contêineres podem montar o mesmo compartilhamento de arquivos, incluindo os que estão em outra réplica, revisão ou aplicativo de contêiner.
  • Todos os contêineres que montam o compartilhamento podem acessar arquivos gravados por qualquer outro contêiner ou método.
  • Mais de um volume de Arquivos do Azure pode ser montado em um único contêiner.

Os Arquivos do Azure dão suporte a protocolos SMB (Server Message Block) e NFS (Network File System). Você pode montar um compartilhamento de Arquivos do Azure usando qualquer um dos protocolos. O compartilhamento de arquivos que você define no ambiente deve ser configurado com o mesmo protocolo usado pelo compartilhamento de arquivos na conta de armazenamento.

Observação

O suporte para montar compartilhamentos NFS nos Aplicativos de Contêiner do Azure está em versão prévia.

Para habilitar o armazenamento de Arquivos do Azure em seu contêiner, você precisa configurar seu ambiente e aplicativo de contêiner da seguinte maneira:

  • Crie uma definição de armazenamento no ambiente de Aplicativos de Contêiner do Azure.
  • Se estiver usando o NFS, seu ambiente deverá ser configurado com uma VNet personalizada e a conta de armazenamento deverá ser configurada para permitir o acesso a partir da VNet. Para obter mais informações, consulte Compartilhamentos de arquivos NFS nos Arquivos do Azure.
  • Se o ambiente estiver configurado com uma VNet personalizada, você deverá permitir as portas 445 e 2049 no NSG (grupo de segurança de rede) associado à sub-rede.
  • Defina um volume do tipo AzureFile (SMB) ou NfsAzureFile (NFS) em uma revisão.
  • Defina uma montagem de volume em um ou mais contêineres na revisão.
  • A conta de armazenamento dos Arquivos do Azure usada deve estar acessível na rede virtual do seu aplicativo de contêiner. Para obter mais informações, confira Permitir acesso em uma rede virtual.

Pré-requisitos

Requisito Instruções
Conta do Azure Se você não tiver, crie uma conta gratuita.
Conta do Armazenamento do Azure Criar uma conta de armazenamento.
Ambiente de Aplicativos de Contêiner do Azure Crie um ambiente de aplicativos de contêiner.

Configuração

Ao configurar um aplicativo de contêiner para montar um volume de Arquivos do Azure usando a CLI do Azure, você deve usar uma definição YAML para criar ou atualizar seu aplicativo de contêiner.

Para obter um tutorial passo a passo sobre como montar um compartilhamento de arquivos SMB, consulte Criar uma montagem de armazenamento de Arquivos do Azure nos Aplicativos de Contêiner do Azure.

  1. Adicione uma definição de armazenamento em seu ambiente dos Aplicativos de Contêiner.

    az containerapp env storage set --name my-env --resource-group my-group \
        --storage-name mystorage \
        --storage-type AzureFile \
        --azure-file-account-name <STORAGE_ACCOUNT_NAME> \
        --azure-file-account-key <STORAGE_ACCOUNT_KEY> \
        --azure-file-share-name <STORAGE_SHARE_NAME> \
        --access-mode ReadWrite
    

    Substitua <STORAGE_ACCOUNT_NAME> e <STORAGE_ACCOUNT_KEY> pelo nome e pela chave de sua conta de armazenamento. Substitua <STORAGE_SHARE_NAME> pelo nome do compartilhamento de arquivos na conta de armazenamento.

    Os valores válidos para --access-mode são ReadWrite e ReadOnly.

  2. Para atualizar um aplicativo de contêiner existente para montar um compartilhamento de arquivo, exporte a especificação do aplicativo para um arquivo YAML chamado app.yaml.

    az containerapp show -n <APP_NAME> -g <RESOURCE_GROUP_NAME> -o yaml > app.yaml
    
  3. Faça as seguintes alterações na especificação do aplicativo de contêiner.

    • Adicione uma matriz volumes à seção template da definição do aplicativo de contêiner e defina um volume. Se você já tiver uma matriz volumes, adicione um novo volume à matriz.
      • O name é um identificador para o volume.
      • Para storageType, use AzureFile para SMB ou NfsAzureFile para NFS. Esse valor deve corresponder ao tipo de armazenamento definido no ambiente.
      • Para storageName, use o nome do armazenamento que você definiu no ambiente.
    • Para cada contêiner no modelo que você deseja montar o armazenamento de Arquivos do Azure, defina uma montagem de volume na matriz volumeMounts à definição de contêiner.
      • O volumeName nome é definido na matriz volumes.
      • É mountPath o caminho no contêiner para montar o volume.
    properties:
      managedEnvironmentId: /subscriptions/<SUBSCRIPTION_ID>/resourceGroups/<RESOURCE_GROUP_NAME>/providers/Microsoft.App/managedEnvironments/<ENVIRONMENT_NAME>
      configuration:
      template:
        containers:
        - image: <IMAGE_NAME>
          name: my-container
          volumeMounts:
          - volumeName: azure-files-volume
            mountPath: /my-files
        volumes:
        - name: azure-files-volume
          storageType: AzureFile
          storageName: mystorage
    
  4. Atualize seu aplicativo de contêiner usando o arquivo YAML.

    az containerapp update --name <APP_NAME> --resource-group <RESOURCE_GROUP_NAME> \
        --yaml app.yaml
    

Consulte a especificação YAML para obter um exemplo completo.

Os snippets do modelo do ARM a seguir demonstram como adicionar um compartilhamento de Arquivos do Azure a um ambiente de Aplicativos de Contêiner e usá-lo em um aplicativo de contêiner.

  1. Adicione um recurso filho storages ao ambiente de Aplicativos de Contêiner.

    {
      "type": "Microsoft.App/managedEnvironments",
      "apiVersion": "2022-03-01",
      "name": "[parameters('environment_name')]",
      "location": "[parameters('location')]",
      "properties": {
        "daprAIInstrumentationKey": "[parameters('dapr_ai_instrumentation_key')]",
        "appLogsConfiguration": {
          "destination": "log-analytics",
          "logAnalyticsConfiguration": {
            "customerId": "[parameters('log_analytics_customer_id')]",
            "sharedKey": "[parameters('log_analytics_shared_key')]"
          }
        }
      },
      "resources": [
        {
          "type": "storages",
          "name": "myazurefiles",
          "apiVersion": "2022-03-01",
          "dependsOn": [
            "[resourceId('Microsoft.App/managedEnvironments', parameters('environment_name'))]"
          ],
          "properties": {
            "azureFile": {
              "accountName": "[parameters('storage_account_name')]",
              "accountKey": "[parameters('storage_account_key')]",
              "shareName": "[parameters('storage_share_name')]",
              "accessMode": "ReadWrite"
            }
          }
        }
      ]
    }
    
  2. Atualize o recurso do aplicativo de contêiner para adicionar um volume e uma montagem de volume.

    {
      "apiVersion": "2023-05-01",
      "type": "Microsoft.App/containerApps",
      "name": "[parameters('containerappName')]",
      "location": "[parameters('location')]",
      "properties": {
    
        ...
    
        "template": {
          "revisionSuffix": "myrevision",
          "containers": [
            {
              "name": "main",
              "image": "[parameters('container_image')]",
              "resources": {
                "cpu": 0.5,
                "memory": "1Gi"
              },
              "volumeMounts": [
                {
                  "mountPath": "/myfiles",
                  "volumeName": "azure-files-volume"
                }
              ]
            }
          ],
          "scale": {
            "minReplicas": 1,
            "maxReplicas": 3
          },
          "volumes": [
            {
              "name": "azure-files-volume",
              "storageType": "AzureFile",
              "storageName": "myazurefiles"
            }
          ]
        }
      }
    }
    
    • Adicione uma matriz volumes à seção template da definição do aplicativo de contêiner e defina um volume. Se você já tiver uma matriz volumes, adicione um novo volume à matriz.
      • O name é um identificador para o volume.
      • Para storageType, use AzureFile para SMB ou NfsAzureFile para NFS. Esse valor deve corresponder ao tipo de armazenamento definido no ambiente.
      • Para storageName, use o nome do armazenamento que você definiu no ambiente.
    • Para cada contêiner no modelo que você deseja montar o armazenamento de Arquivos do Azure, defina uma montagem de volume na matriz volumeMounts à definição de contêiner.
      • O volumeName nome é definido na matriz volumes.
      • É mountPath o caminho no contêiner para montar o volume.

Confira a especificação da API de modelo do ARM para obter um exemplo completo.

Para configurar uma montagem de volume para o armazenamento de Arquivos do Azure no portal do Azure, adicione um compartilhamento de arquivos ao seu ambiente dos Aplicativos de Contêiner e adicione uma montagem de volume ao seu aplicativo de contêiner criando uma nova revisão.

  1. No portal do Azure, navegue até a instância do Aplicativo de Contêiner.

  2. Selecione Arquivos do Azure no menu à esquerda.

  3. Selecione Adicionar.

  4. No menu de contexto Adicionar compartilhamento de arquivo, insira as seguintes informações:

    • Nome: um nome para o compartilhamento de arquivos.
    • Nome da conta de armazenamento: o nome da conta de armazenamento que contém o compartilhamento de arquivos.
    • Chave da conta de armazenamento: a chave de acesso da conta de armazenamento.
    • Compartilhamento de arquivo: o nome do compartilhamento de arquivo.
    • Modo de acesso: o modo de acesso ao compartilhamento de arquivos. Os valores válidos são "Leitura/Gravação" e "Somente leitura".
  5. Selecione Adicionar para sair do painel Contexto.

  6. Selecione Salvar para confirmar as alterações.

  7. Navegue até seu aplicativo de contêiner.

  8. Selecione Gerenciamento de revisão no menu esquerdo.

  9. Selecione Criar nova revisão.

  10. Selecione o contêiner no qual você deseja montar o volume.

  11. No painel Contexto Editar um contêiner, selecione a guia Montagens de volume.

  12. Na seção Compartilhamentos de arquivos, crie um novo volume com as informações a seguir.

    • Nome do compartilhamento de arquivo: o compartilhamento de arquivo que você adicionou.
    • Caminho de montagem: o caminho absoluto no contêiner para montar o volume.
  13. Selecione Salvar para salvar as alterações e sair do painel Contexto.

  14. Depois, selecione Criar para criar o grupo.