Montar um compartilhamento de arquivos do Azure em Instâncias de Contêiner do Azure
Por padrão, as Instâncias de Contêiner do Azure não têm estado. Se o contêiner falhar ou parar, todas as informações de estado serão perdidas. Para persistir o estado além do tempo de vida do contêiner, é necessário montar um volume em um repositório externo. Conforme mostrado nesta unidade, as Instâncias de Contêiner do Azure podem montar um compartilhamento de arquivos criado com os Arquivos do Azure. Os Arquivos do Azure oferecem compartilhamentos de arquivos totalmente gerenciados na nuvem que são acessíveis por meio do protocolo SMB padrão do setor. Usar um compartilhamento de arquivos do Azure com 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 compartilhamento de Arquivos do Azure só pode ser montado para contêineres do Linux.
- A montagem de 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.
Implantar o contêiner e montar o volume
Para montar um compartilhamento de arquivos do Azure como um volume em um contêiner usando a CLI do Azure, especifique o compartilhamento e o ponto de montagem de volume ao criar o contêiner com az container create
. A seguir, um exemplo do comando:
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 valor --dns-name-label
precisa ser exclusivo dentro da região do Azure quando você criar a instância de contêiner. Atualize o valor no comando anterior se você receber uma mensagem de erro do rótulo do nome DNS ao executar o comando.
Implantar o contêiner e montar o volume – 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 é o 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 imagem aci-hellofiles
. O contêiner monta o compartilhamento de arquivos do Azure acishare criado anteriormente como um volume. A seguir, um exemplo de arquivo YAML.
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
Montar 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 ou um arquivo YAML. Para usar um modelo ou arquivo YAML, forneça os detalhes do compartilhamento e defina os volumes preenchendo a matriz volumes
na seção do modelo properties
.
Por exemplo, se você criou dois compartilhamentos de Arquivos do Azure denominados share1 e share2 na conta de armazenamento myStorageAccount, a matriz volumes
em um modelo do Resource Manager teria aparência semelhante a:
"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 do grupo de contêineres no qual você deseja montar os volumes, popule a matriz volumeMounts
na seção properties
da definição de contêiner. Por exemplo, isso monta os dois volumes, myvolume1 e myvolume2, definidos anteriormente:
"volumeMounts": [{
"name": "myvolume1",
"mountPath": "/mnt/share1/"
},
{
"name": "myvolume2",
"mountPath": "/mnt/share2/"
}]