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 Description Persistência Exemplo de utilização
Armazenamento com escopo de contêiner Armazenamento efêmero disponível para um contêiner em execução Os dados ficam 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 ficam disponíveis até que a réplica seja desligada O contêiner principal do aplicativo que grava arquivos de log que um contêiner sidecar processa.
Ficheiros do Azure Armazenagem permanente Os dados são mantidos 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 em 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 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 efêmero e temporário equivalente a EmptyDir (diretório vazio) no Kubernetes. Esse armazenamento tem como escopo uma única réplica. Use um EmptyDir volume 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.
  • Qualquer contêiner de inicialização ou aplicativo na réplica pode montar o mesmo volume.
  • Um contêiner pode montar vários EmptyDir volumes.

Para configurar o armazenamento com escopo de réplica, primeiro defina um EmptyDir volume na revisão. Em seguida, 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 uma, crie uma conta gratuitamente.
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 de YAML para criar ou atualizar seu aplicativo de contêiner.

  1. Para atualizar um aplicativo contêiner existente para usar o armazenamento com escopo de réplica, exporte a especificação do seu 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 seu aplicativo de contêiner.

    • Adicione uma volumes matriz à template seção de sua definição de aplicativo de contêiner e defina um volume. Se você já tiver uma volumes matriz, adicione um novo volume à matriz.
      • O name é um identificador para o volume.
      • Use EmptyDir como o storageTypearquivo .
    • Para cada contêiner no modelo que você deseja montar o volume, defina uma montagem de volume na volumeMounts matriz da definição de contêiner.
      • O volumeName é o nome definido na volumes matriz.
      • O 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 ARM:

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

Exemplo de trecho de modelo 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"
        }
      ]
    }
  }
}

Consulte a especificação da API do modelo 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 seu 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 à esquerda.

  3. Selecione Criar nova revisão.

  4. Selecione o recipiente onde deseja montar o volume.

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

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

    • 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 de contexto.

  8. Selecione Criar para criar a nova revisão.

Volume de Ficheiros do Azure

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

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

  • Os arquivos gravados sob o local de montagem são mantidos no compartilhamento de arquivos.
  • Os arquivos no compartilhamento estão disponíveis através do local de montagem.
  • Vários contêineres podem montar o mesmo compartilhamento de arquivos, incluindo aqueles 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 aos 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 definido no ambiente deve ser configurado com o mesmo protocolo usado pelo compartilhamento de arquivos na conta de armazenamento.

Nota

O suporte para montagem de compartilhamentos NFS em Aplicativos de Contêiner do Azure está em visualização.

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 Container Apps.
  • Se você estiver usando 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 em Arquivos do Azure .
  • Se o seu ambiente estiver configurado com uma rede virtual 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 do Azure Files usada deve estar acessível a partir da rede virtual do seu aplicativo de contêiner. Para obter mais informações, consulte Conceder acesso de uma rede virtual.

Pré-requisitos

Requisito Instruções
Conta do Azure Se você não tiver uma, crie uma conta gratuitamente.
Conta de 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 de 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 do Azure Files em Aplicativos de Contêiner do Azure.

  1. Adicione uma definição de armazenamento ao seu ambiente de 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 chave da sua conta de armazenamento. Substitua <STORAGE_SHARE_NAME> pelo nome do compartilhamento de arquivos na conta de armazenamento.

    Valores válidos para --access-mode are ReadWrite e ReadOnly.

  2. Para atualizar um aplicativo de contêiner existente para montar um compartilhamento de arquivos, exporte a especificação do seu 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 seu aplicativo de contêiner.

    • Adicione uma volumes matriz à template seção de sua definição de aplicativo de contêiner e defina um volume. Se você já tiver uma volumes matriz, 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 definido no ambiente.
    • Para cada contêiner no modelo que você deseja montar o armazenamento de Arquivos do Azure, defina uma montagem de volume na volumeMounts matriz da definição de contêiner.
      • O volumeName é o nome definido na volumes matriz.
      • O 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 seguintes trechos de modelo ARM demonstram como adicionar um compartilhamento do Azure Files a um ambiente de Aplicativos de Contêiner e usá-lo em um aplicativo de contêiner.

  1. Adicione um storages recurso filho ao ambiente Container Apps.

    {
      "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 volumes matriz à template seção de sua definição de aplicativo de contêiner e defina um volume. Se você já tiver uma volumes matriz, 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 definido no ambiente.
    • Para cada contêiner no modelo que você deseja montar o armazenamento de Arquivos do Azure, defina uma montagem de volume na volumeMounts matriz da definição de contêiner.
      • O volumeName é o nome definido na volumes matriz.
      • O mountPath é o caminho no contêiner para montar o volume.

Consulte a especificação da API do modelo 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 de Aplicativos de Contêiner e, em seguida, adicione uma montagem de volume ao seu aplicativo de contêiner criando uma nova revisão.

  1. No portal do Azure, navegue até seu ambiente de Aplicativos de Contêiner.

  2. Selecione Arquivos do Azure no menu à esquerda.

  3. Selecione Adicionar.

  4. No menu de contexto Adicionar compartilhamento de arquivos, 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 para a conta de armazenamento.
    • Compartilhamento de arquivos: o nome do compartilhamento de arquivos.
    • Modo de acesso: O modo de acesso para o compartilhamento de arquivos. Os valores válidos são "Leitura/Gravação" e "Somente leitura".
  5. Selecione Adicionar para sair do painel de contexto.

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

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

  8. Selecione Gerenciamento de revisões no menu à esquerda.

  9. Selecione Criar nova revisão.

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

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

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

    • Nome do compartilhamento de arquivos: o compartilhamento de arquivos 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 de contexto.

  14. Selecione Criar para criar a nova revisão.