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 Exemplos de uso
Sistema de arquivos de contêiner Armazenamento temporário com escopo para o contêiner local Escrevendo um cache de aplicativo local.
Armazenamento temporário Armazenamento temporário no escopo de uma réplica individual Compartilhando arquivos entre contêineres em uma réplica. Por exemplo, o contêiner do aplicativo principal pode gravar arquivos de log processados por um contêiner sidecar.
Arquivos do Azure Armazenamento permanente Gravar arquivos em um compartilhamento de arquivos para tornar os dados acessíveis por outros sistemas.

Observação

Os recursos de montagem de volume nos Aplicativos de Contêiner do Azure estão em versão prévia.

Sistema de arquivos 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.
  • Não há garantias de capacidade. O armazenamento disponível depende da quantidade de espaço em disco disponível no contêiner.

Armazenamento temporário

Você pode montar um volume efêmero equivalente ao emptyDir no Kubernetes. O armazenamento temporário tem o escopo de uma única réplica.

O armazenamento temporário 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 na réplica podem montar o mesmo volume.
  • Um contêiner pode montar vários volumes temporários.
  • Não há garantias de capacidade. O armazenamento disponível depende da quantidade de espaço em disco disponível na réplica.

Para configurar o armazenamento temporário, 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 usar o armazenamento temporário, você deverá usar a CLI do Azure com 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 temporário, 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.
      • O name é um identificador para o volume.
      • Use EmptyDir como o storageType.
    • Para cada contêiner no modelo que você deseja montar o armazenamento temporário, adicione uma matriz volumeMounts à definição de contêiner e defina uma montagem de volume.
      • 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_NAME>
          name: my-container
          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
    

Para criar um volume temporário 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.
    • O name é um identificador para o volume.
    • Use EmptyDir como o storageType.
  • Para cada contêiner no modelo que você deseja montar o armazenamento temporário, adicione uma matriz volumeMounts à definição de contêiner e defina uma montagem de volume.
    • 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"
            }
          ]
        }
      ],
      "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.

Arquivos do Azure

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

Para obter um tutorial passo a passo, consulte Criar uma montagem de armazenamento de Arquivos do Azure nos Aplicativos de Contêiner do Azure.

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.

Para habilitar o armazenamento de Arquivos do Azure em seu contêiner, você precisará configurar o contêiner das seguintes maneiras:

  • Crie uma definição de armazenamento do tipo AzureFile no ambiente de Aplicativos de Contêiner.
  • Defina um volume de armazenamento em uma 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.
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 usar Arquivos do Azure, você deverá usar a CLI do Azure com uma definição YAML para criar ou atualizar seu aplicativo de contêiner.

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

    az containerapp env storage set --name my-env --resource-group my-group \
        --storage-name mystorage \
        --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.
      • O name é um identificador para o volume.
      • Para storageType, use AzureFile.
      • 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, adicione uma matriz volumeMounts à definição de contêiner e defina uma montagem de volume.
      • 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 my-app.yaml
    

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": "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": "/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.
      • O name é um identificador para o volume.
      • Para storageType, use AzureFile.
      • 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, adicione uma matriz volumeMounts à definição de contêiner e defina uma montagem de volume.
      • 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.