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 contentor for reiniciado, falhar ou parar, todo o respetivo 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, Azure Container Instances pode montar uma partilha de ficheiros do Azure criada com Ficheiros do Azure. Ficheiros do Azure oferece partilhas de ficheiros totalmente geridas alojadas no Armazenamento do Azure que são acessíveis através do protocolo SMB (Server Message Block) padrão da indústria. A utilização de uma partilha de ficheiros do Azure com Azure Container Instances fornece funcionalidades de partilha de ficheiros semelhantes à utilização de uma partilha de ficheiros do Azure com máquinas virtuais do Azure.

Limitações

  • Só pode montar partilhas Ficheiros do Azure em contentores do Linux. Veja mais sobre as diferenças no suporte de funcionalidades para grupos de contentores do Linux e do Windows na descrição geral.
  • A montagem do volume da partilha de ficheiros do Azure requer que o contentor do Linux seja executado como raiz .
  • As montagens de volume da partilha de ficheiros do Azure estão limitadas ao suporte do CIFS.

Nota

Montar uma partilha de Ficheiros do Azure numa instância de contentor é semelhante a uma montagem de enlace do Docker. Se montar uma partilha num diretório de contentor no qual existem ficheiros ou diretórios, a montagem obscurece ficheiros ou diretórios, tornando-os inacessíveis enquanto o contentor é executado.

Importante

Se estiver a implementar grupos de contentores num Rede Virtual do Azure, tem de adicionar um ponto final de serviço à Sua Conta de Armazenamento do Azure.

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 seguinte script para criar uma conta de armazenamento para alojar a partilha de ficheiros e a própria partilha. 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 utilizou o script anterior, o nome da conta de armazenamento foi armazenado na $ACI_PERS_STORAGE_ACCOUNT_NAME variável. Para ver o nome da conta, escreva:

    echo $ACI_PERS_STORAGE_ACCOUNT_NAME
    
  • Nome da partilha – este valor já é conhecido (definido como acishare no script anterior)

  • Chave da conta de armazenamento – este valor pode ser encontrado com 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
    

Implementar o contentor e o volume de montagem - CLI

Para montar uma partilha de ficheiros do Azure como um volume num contentor com a CLI do Azure, especifique o ponto de montagem de partilha e volume quando criar o contentor com az container create. Se seguiu os passos anteriores, pode montar a partilha que criou anteriormente com o seguinte comando para criar um contentor:

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 tem de ser exclusivo na região do Azure onde cria a instância de contentor. Atualize o valor no comando anterior se receber uma mensagem de erro de etiqueta de nome DNS quando executar o comando.

Gerir ficheiros no volume montado

Assim que o contentor começar, pode utilizar a aplicação Web simples implementada através da imagem microsoft aci-hellofiles para criar pequenos ficheiros de texto na partilha de ficheiros do Azure no caminho de montagem que especificou. Obtenha o nome de domínio completamente qualificado (FQDN) da aplicação 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 guardar texto com a aplicação, pode utilizar a portal do Azure ou uma ferramenta como a Explorador de Armazenamento do Microsoft Azure para obter e inspecionar o ficheiro ou ficheiros escritos na partilha de ficheiros.

Implementar o contentor e o volume de montagem – YAML

Também pode implementar um grupo de contentores e montar um volume num contentor com a CLI do Azure e um modelo YAML. Implementar por modelo YAML é um método preferencial ao implementar grupos de contentores que consistem em vários contentores.

O seguinte modelo YAML define um grupo de contentores com um contentor criado com a aci-hellofiles imagem. O contentor monta o acishare da partilha de ficheiros do Azure criado anteriormente como um volume. Quando indicado, introduza o nome e a chave de armazenamento da conta de armazenamento que aloja a partilha de ficheiros.

Tal como no exemplo da CLI, o dnsNameLabel valor tem de ser exclusivo na região do Azure onde cria a instância de contentor. Atualize o valor no ficheiro 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 implementar com o modelo YAML, guarde o YAML anterior num ficheiro com o nome 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

Implementar o volume de contentor e montagem - Resource Manager

Além da implementação da CLI e do YAML, pode implementar um grupo de contentores e montar um volume num contentor com um modelo de Resource Manager do Azure.

Primeiro, preencha a volumes matriz na secção do grupo properties de contentores do modelo.

Em seguida, para cada contentor no qual pretende montar o volume, preencha a volumeMounts matriz na properties secção da definição de contentor.

O modelo de Resource Manager seguinte define um grupo de contentores com um contentor criado com a aci-hellofiles imagem. O contentor monta o acishare da partilha de ficheiros do Azure criado anteriormente como um volume. Quando indicado, introduza o nome e a chave de armazenamento da conta de armazenamento que aloja a partilha de ficheiros.

Tal como nos exemplos anteriores, o dnsNameLabel valor tem de ser exclusivo na região do Azure onde cria a instância de contentor. 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 implementar com o modelo Resource Manager, guarde o JSON anterior num ficheiro com o nome 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

Montar vários volumes

Para montar vários volumes numa instância de contentor, tem de implementar com um modelo de Resource Manager do Azure, um ficheiro YAML ou outro método programático. Para utilizar um modelo ou ficheiro YAML, forneça os detalhes da partilha e defina os volumes ao preencher a volumes matriz na properties secção do ficheiro.

Por exemplo, se tiver criado duas partilhas Ficheiros do Azure denominadas share1 e share2 na conta de armazenamento myStorageAccount, a volumes matriz num modelo de Resource Manager aparecerá semelhante à seguinte:

"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 contentor no grupo de contentores no qual pretende montar os volumes, preencha a volumeMounts matriz na properties secção da definição de contentor. Por exemplo, esta ação monta os dois volumes, myvolume1 e myvolume2, definidos anteriormente:

"volumeMounts": [{
  "name": "myvolume1",
  "mountPath": "/mnt/share1/"
},
{
  "name": "myvolume2",
  "mountPath": "/mnt/share2/"
}]

Passos seguintes

Saiba como montar outros tipos de volume no Azure Container Instances: