Montar uma partilha de ficheiros do Azure no Azure Container Instances
Por predefinição, o Azure Container Instances não tem monitorização de estado. Se o contêiner for reiniciado, falhar ou parar, todo o seu estado será perdido. Para manter as informações de estado para além da duração do contentor, tem de montar um volume a partir de um arquivo externo. Conforme mostrado neste artigo, as Instâncias de Contêiner do Azure podem montar um compartilhamento de arquivos do Azure criado com os Arquivos do Azure. O Azure Files oferece compartilhamentos de arquivos totalmente gerenciados hospedados no Armazenamento do Azure que podem ser acessados por meio do protocolo SMB (Server Message Block) padrão do setor. O uso de um compartilhamento de arquivos do Azure com as 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 Armazenamento do Azure não suporta a montagem SMB de partilha de ficheiros utilizando identidade gerida
- Você só pode montar compartilhamentos do Azure Files em contêineres do Linux. Analise mais sobre as diferenças no suporte a recursos para grupos de contêineres Linux e Windows na visão geral.
- A montagem do 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.
Nota
A montagem de um compartilhamento de Arquivos do Azure em uma instância de contêiner é semelhante a uma montagem de associação do Docker. Se você montar um compartilhamento em um diretório de contêiner no qual existam arquivos ou diretórios, a montagem obscurecerá arquivos ou diretórios, tornando-os inacessíveis enquanto o contêiner é executado.
Importante
Se a conexão de saída com a Internet estiver bloqueada na sub-rede delegada, você deverá adicionar um ponto de extremidade de serviço ao Azure Strorage em sua sub-rede delegada.
Criar uma partilha de ficheiros do Azure
Antes de utilizar uma partilha de ficheiros do Azure com o Azure Container Instances, tem de criá-la. Execute o script a seguir para criar uma conta de armazenamento para hospedar o compartilhamento de arquivos e o próprio compartilhamento. O nome da conta de armazenamento deve ser globalmente exclusivo, pelo que o script adiciona um valor aleatório à cadeia de base.
# Change these four parameters as needed
ACI_PERS_RESOURCE_GROUP=myResourceGroup
ACI_PERS_STORAGE_ACCOUNT_NAME=mystorageaccount$RANDOM
ACI_PERS_LOCATION=eastus
ACI_PERS_SHARE_NAME=acishare
# Create the storage account with the parameters
az storage account create \
--resource-group $ACI_PERS_RESOURCE_GROUP \
--name $ACI_PERS_STORAGE_ACCOUNT_NAME \
--location $ACI_PERS_LOCATION \
--sku Standard_LRS
# Create the file share
az storage share create \
--name $ACI_PERS_SHARE_NAME \
--account-name $ACI_PERS_STORAGE_ACCOUNT_NAME
Obter as credenciais de armazenamento
Para montar uma partilha de ficheiros do Azure como um volume no Azure Container Instances, precisa de três valores: o nome da conta de armazenamento, o nome da partilha e a chave de acesso ao armazenamento.
Nome da conta de armazenamento - Se você usou o script anterior, o nome da
$ACI_PERS_STORAGE_ACCOUNT_NAME
conta de armazenamento foi armazenado na variável. Para ver o nome da conta, digite:echo $ACI_PERS_STORAGE_ACCOUNT_NAME
Nome do compartilhamento - Este valor já é conhecido (definido como
acishare
no script anterior)Chave da conta de armazenamento - Este valor pode ser encontrado usando o seguinte comando:
STORAGE_KEY=$(az storage account keys list --resource-group $ACI_PERS_RESOURCE_GROUP --account-name $ACI_PERS_STORAGE_ACCOUNT_NAME --query "[0].value" --output tsv) echo $STORAGE_KEY
Implantar contêiner e volume de montagem - CLI
Para montar um compartilhamento de arquivos do Azure como um volume em um contêiner usando a CLI do Azure, especifique o ponto de montagem de compartilhamento e volume ao criar o contêiner com az container. Se você seguiu as etapas anteriores, poderá montar o compartilhamento criado anteriormente usando o seguinte comando para criar um contêiner:
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 --dns-name-label
valor deve ser exclusivo dentro da região do Azure onde você cria a instância de contêiner. Atualize o valor no comando anterior se receber uma mensagem de erro de rótulo de nome DNS ao executar o comando.
Gerenciar arquivos no volume montado
Depois que o contêiner for iniciado, você poderá usar o aplicativo Web implantado por meio da imagem ACCI-hellofiles da Microsoft para criar pequenos arquivos de texto no compartilhamento de arquivos do Azure no caminho de montagem especificado. Obtenha o FQDN (nome de domínio totalmente qualificado) do aplicativo Web com o comando az container show :
az container show --resource-group $ACI_PERS_RESOURCE_GROUP \
--name hellofiles --query ipAddress.fqdn --output tsv
Depois de salvar texto usando o aplicativo, você pode usar o portal do Azure ou uma ferramenta como o Gerenciador de Armazenamento do Microsoft Azure para recuperar e inspecionar o arquivo ou arquivos gravados no compartilhamento de arquivos.
Implantar contêiner e volume de montagem - 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 é um 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 aci-hellofiles
imagem. O contêiner monta o acishare de compartilhamento de arquivos do Azure criado anteriormente como um volume. Quando indicado, insira o nome e a chave de armazenamento da conta de armazenamento que hospeda o compartilhamento de arquivos.
Como no exemplo da CLI, o dnsNameLabel
valor deve ser exclusivo dentro da região do Azure onde você cria a instância do contêiner. Atualize o valor no arquivo YAML, se necessário.
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
Para implantar com o modelo YAML, salve o YAML anterior em um arquivo chamado deploy-aci.yaml
e, em seguida, execute o comando az container create com o --file
parâmetro:
# Deploy with YAML template
az container create --resource-group myResourceGroup --file deploy-aci.yaml
Implantar contêiner e volume de montagem - Resource Manager
Além da implantação da CLI e do YAML, você pode implantar um grupo de contêineres e montar um volume em um contêiner usando um modelo do Azure Resource Manager.
Primeiro, preencha a volumes
matriz na seção de grupo properties
de contêineres do modelo.
Em seguida, para cada contêiner no qual você deseja montar o volume, preencha a volumeMounts
properties
matriz na seção da definição de contêiner.
O modelo do Gerenciador de Recursos a seguir define um grupo de contêineres com um contêiner criado com a aci-hellofiles
imagem. O contêiner monta o acishare de compartilhamento de arquivos do Azure criado anteriormente como um volume. Quando indicado, insira o nome e a chave de armazenamento da conta de armazenamento que hospeda o compartilhamento de arquivos.
Como nos exemplos anteriores, o dnsNameLabel
valor deve ser exclusivo dentro da região do Azure onde você cria a instância de contêiner. Atualize o valor no modelo, se necessário.
{
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"variables": {
"container1name": "hellofiles",
"container1image": "mcr.microsoft.com/azuredocs/aci-hellofiles"
},
"resources": [
{
"name": "file-share-demo",
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2019-12-01",
"location": "[resourceGroup().location]",
"properties": {
"containers": [
{
"name": "[variables('container1name')]",
"properties": {
"image": "[variables('container1image')]",
"resources": {
"requests": {
"cpu": 1,
"memoryInGb": 1.5
}
},
"ports": [
{
"port": 80
}
],
"volumeMounts": [
{
"name": "filesharevolume",
"mountPath": "/aci/logs"
}
]
}
}
],
"osType": "Linux",
"ipAddress": {
"type": "Public",
"ports": [
{
"protocol": "tcp",
"port": "80"
}
],
"dnsNameLabel": "aci-demo"
},
"volumes": [
{
"name": "filesharevolume",
"azureFile": {
"shareName": "acishare",
"storageAccountName": "<Storage account name>",
"storageAccountKey": "<Storage account key>"
}
}
]
}
}
]
}
Para implantar com o modelo do Gerenciador de Recursos, salve o JSON anterior em um arquivo chamado deploy-aci.json
e, em seguida, execute o comando az deployment group create com o --template-file
parâmetro:
# Deploy with Resource Manager template
az deployment group create --resource-group myResourceGroup --template-file deploy-aci.json
Monte 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, um arquivo YAML ou outro método programático. Para usar um modelo ou arquivo YAML, forneça os detalhes do compartilhamento e defina os volumes preenchendo a volumes
properties
matriz na seção do arquivo.
Por exemplo, se você criou dois compartilhamentos de Arquivos do Azure chamados share1 e share2 na conta de armazenamento myStorageAccount, a volumes
matriz em um modelo do Gerenciador de Recursos será semelhante ao exemplo a seguir:
"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 no grupo de contêineres no qual você deseja montar os volumes, preencha a volumeMounts
properties
matriz na seção da definição de contêiner. Por exemplo, isso monta os dois volumes, myvolume1 e myvolume2, previamente definidos:
"volumeMounts": [{
"name": "myvolume1",
"mountPath": "/mnt/share1/"
},
{
"name": "myvolume2",
"mountPath": "/mnt/share2/"
}]
Próximos passos
Saiba como montar outros tipos de volume em Instâncias de Contêiner do Azure: