Montar uma partilha de ficheiros do Azure no Azure Container Instances

Concluído

Por predefinição, o Azure Container Instances não tem monitorização de estado. Se o contentor 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 nesta unidade, as Instâncias de Contêiner do Azure podem montar um compartilhamento de arquivos do Azure criado com os Arquivos do Azure. Os Ficheiros do Azure oferecem partilhas de ficheiros totalmente geridas na cloud, que são acessíveis através do protocolo Server Message Block (SMB) norma 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

  • Você só pode montar compartilhamentos do Azure Files em contêineres do Linux.
  • 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.

Implementar o contentor 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 ponto de montagem de compartilhamento e volume ao criar o contêiner com az container createo . Segue-se 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 --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.

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 é 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 aci-hellofiles imagem. O contêiner monta o acishare de compartilhamento de arquivos do Azure criado anteriormente como um volume. A seguir está 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

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 ou um arquivo YAML. Para usar um modelo ou arquivo YAML, forneça os detalhes do compartilhamento e defina os volumes preenchendo a volumes matriz na properties seção do modelo.

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 à 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 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/"
}]