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.
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
Faça as seguintes alterações na especificação do aplicativo de contêiner.
- Adicione uma matriz
volumes
à seçãotemplate
da definição do aplicativo de contêiner e defina um volume. Se você já tiver uma matrizvolumes
, adicione um novo volume à matriz.- O
name
é um identificador para o volume. - Use
EmptyDir
como ostorageType
.
- O
- 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 matrizvolumes
. - É
mountPath
o caminho no contêiner para montar o volume.
- O
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
- Adicione uma matriz
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çãotemplate
da definição do aplicativo de contêiner e defina um volume. Se você já tiver uma matrizvolumes
, adicione um novo volume à matriz.- O
name
é um identificador para o volume. - Use
EmptyDir
como ostorageType
.
- O
- 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 matrizvolumes
. - É
mountPath
o caminho no contêiner para montar o volume.
- O
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.
No portal do Azure, navegue até seu aplicativo de contêiner.
Selecione Gerenciamento de revisão no menu esquerdo.
Selecione Criar nova revisão.
Selecione o contêiner no qual você deseja montar o volume.
No painel Contexto Editar um contêiner, selecione a guia Montagens de volume.
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.
Selecione Salvar para salvar as alterações e sair do painel Contexto.
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) ouNfsAzureFile
(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.
- Se você estiver usando o NFS, também deverá desabilitar a transferência segura. Para obter mais informações, consulte Compartilhamentos de arquivos NFS nos Arquivos do Azure e a seção Criar um compartilhamento de Arquivos do Azure do protocolo NFS neste tutorial.
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.
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ãoReadWrite
eReadOnly
.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
Faça as seguintes alterações na especificação do aplicativo de contêiner.
- Adicione uma matriz
volumes
à seçãotemplate
da definição do aplicativo de contêiner e defina um volume. Se você já tiver uma matrizvolumes
, adicione um novo volume à matriz.- O
name
é um identificador para o volume. - Para
storageType
, useAzureFile
para SMB ouNfsAzureFile
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.
- O
- 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 matrizvolumes
. - É
mountPath
o caminho no contêiner para montar o volume.
- O
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
- Adicione uma matriz
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.
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" } } } ] }
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çãotemplate
da definição do aplicativo de contêiner e defina um volume. Se você já tiver uma matrizvolumes
, adicione um novo volume à matriz.- O
name
é um identificador para o volume. - Para
storageType
, useAzureFile
para SMB ouNfsAzureFile
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.
- O
- 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 matrizvolumes
. - É
mountPath
o caminho no contêiner para montar o volume.
- O
- Adicione uma matriz
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.
No portal do Azure, navegue até a instância do Aplicativo de Contêiner.
Selecione Arquivos do Azure no menu à esquerda.
Selecione Adicionar.
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".
Selecione Adicionar para sair do painel Contexto.
Selecione Salvar para confirmar as alterações.
Navegue até seu aplicativo de contêiner.
Selecione Gerenciamento de revisão no menu esquerdo.
Selecione Criar nova revisão.
Selecione o contêiner no qual você deseja montar o volume.
No painel Contexto Editar um contêiner, selecione a guia Montagens de volume.
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.
Selecione Salvar para salvar as alterações e sair do painel Contexto.
Depois, selecione Criar para criar o grupo.