Partilhar via


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.yamle, 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.jsone, 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: