Memasang berbagi file Azure di Azure Container Instances

Secara default, Azure Container Instances tidak memiliki status. Jika kontainer dimulai ulang, crash, atau berhenti, semua statusnya hilang. Untuk mempertahankan status di luar masa pakai kontainer, Anda harus memasang volume dari penyimpanan eksternal. Seperti yang ditunjukkan dalam artikel ini, Azure Container Instances dapat memasang berbagi file Azure yang dibuat dengan Azure Files. Azure Files menawarkan berbagi file terkelola sepenuhnya yang dihosting di Azure Storage yang dapat diakses melalui protokol Server Message Block (SMB) standar industri. Menggunakan berbagi file Azure dengan Azure Container Instances menyediakan fitur berbagi file yang mirip dengan menggunakan berbagi file Azure dengan komputer virtual Azure.

Batasan

  • Anda hanya dapat memasang berbagi Azure Files ke kontainer Linux. Tinjau lebih lanjut tentang perbedaan dukungan fitur untuk grup kontainer Linux dan Windows di ringkasan.
  • Pemasangan volume berbagi file Azure memerlukan kontainer Linux berjalan sebagai root.
  • Pemasangan volume berbagi Azure Files terbatas pada dukungan CIFS.

Catatan

Memasang berbagi Azure Files ke instans kontainer mirip dengan pemasangan ikatan Docker. Jika Anda memasang berbagi ke direktori kontainer tempat file atau direktori ada, pemasangan mengaburkan file atau direktori, membuatnya tidak dapat diakses saat kontainer berjalan.

Penting

Jika Anda menyebarkan grup kontainer ke Azure Virtual Network, Anda harus menambahkan titik akhir layanan ke Akun Azure Storage Anda.

Buat berbagi file Azure

Sebelum menggunakan berbagi file Azure dengan Azure Container Instances, Anda harus membuatnya. Jalankan skrip berikut untuk membuat akun penyimpanan untuk menghosting berbagi file, dan berbagi itu sendiri. Nama akun penyimpanan harus unik secara global, sehingga skrip menambahkan nilai acak ke string dasar.

# 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

Mendapatkan info masuk penyimpanan

Untuk memasang berbagi file Azure sebagai volume dalam Azure Container Instances, Anda memerlukan tiga nilai: nama akun penyimpanan, nama berbagi, dan kunci akses penyimpanan.

  • Nama akun penyimpanan - Jika Anda menggunakan skrip sebelumnya, nama akun penyimpanan disimpan dalam variabel $ACI_PERS_STORAGE_ACCOUNT_NAME. Untuk melihat nama akun, ketik:

    echo $ACI_PERS_STORAGE_ACCOUNT_NAME
    
  • Nama berbagi - Nilai ini sudah diketahui (didefinisikan sebagai acishare di skrip sebelumnya)

  • Kunci akun penyimpanan - Nilai ini dapat ditemukan menggunakan perintah berikut:

    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
    

Menyebarkan kontainer dan memasang volume - CLI

Untuk memasang berbagi file Azure sebagai volume dalam kontainer dengan menggunakan Azure CLI, tentukan titik pemasangan berbagi dan volume saat Anda membuat kontainer dengan perintah az container create. Jika Anda mengikuti langkah-langkah sebelumnya, Anda bisa memasang berbagi yang Anda buat sebelumnya dengan menggunakan perintah berikut untuk membuat kontainer:

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/

Nilai --dns-name-label harus unik dalam wilayah Azure tempat Anda membuat instans kontainer. Perbarui nilai dalam perintah sebelumnya jika Anda menerima pesan kesalahan label nama DNS saat menjalankan perintah.

Mengelola file dalam volume yang dipasang

Setelah kontainer dimulai, Anda dapat menggunakan aplikasi web sederhana yang disebarkan melalui gambar aci-hellofiles Microsoft untuk membuat file teks kecil di berbagi file Azure di jalur pemasangan yang Anda tentukan. Dapatkan nama domain yang sepenuhnya memenuhi syarat (FQDN) untuk aplikasi web dengan perintah az container show:

az container show --resource-group $ACI_PERS_RESOURCE_GROUP \
  --name hellofiles --query ipAddress.fqdn --output tsv

Setelah menyimpan teks menggunakan aplikasi, Anda dapat menggunakan portal Azure atau alat seperti Microsoft Azure Storage Explorer untuk mengambil dan memeriksa file atau file yang ditulis ke berbagi file.

Menyebarkan kontainer dan memasang volume - YAML

Anda juga dapat menyebarkan grup kontainer dan memasang volume dalam kontainer dengan Azure CLI dan templat YAML. Menyebarkan dengan templat YAML adalah metode yang disukai saat menyebarkan grup kontainer yang terdiri dari beberapa kontainer.

Template YAML berikut mendefinisikan grup kontainer dengan satu kontainer yang dibuat dengan gambar aci-hellofiles. Kontainer ini memasang acishare berbagi file Azure yang dibuat sebelumnya sebagai volume. Jika ditunjukkan, masukkan nama dan kunci penyimpanan untuk akun penyimpanan yang menghosting berbagi file.

Seperti dalam contoh CLI, nilai dnsNameLabel harus unik dalam wilayah Azure tempat Anda membuat instans kontainer. Perbarui nilai dalam file YAML jika diperlukan.

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

Untuk menyebarkan dengan template YAML, simpan YAML sebelumnya ke file bernama deploy-aci.yaml, lalu jalankan perintah az container create dengan parameter --file:

# Deploy with YAML template
az container create --resource-group myResourceGroup --file deploy-aci.yaml

Menyebarkan kontainer dan memasang volume - Resource Manager

Selain penyebaran CLI dan YAML, Anda dapat menyebarkan grup kontainer dan memasang volume dalam kontainer menggunakan templat Azure Resource Manager.

Pertama, isi array volumes di bagian properties grup kontainer dari templat.

Kemudian, untuk setiap kontainer tempat Anda ingin memasang volume, isi array volumeMounts di bagian properties dari definisi kontainer.

Template Resource Manager berikut mendefinisikan grup kontainer dengan satu kontainer yang dibuat dengan gambar aci-hellofiles. Kontainer ini memasang acishare berbagi file Azure yang dibuat sebelumnya sebagai volume. Jika ditunjukkan, masukkan nama dan kunci penyimpanan untuk akun penyimpanan yang menghosting berbagi file.

Seperti dalam contoh sebelumnya, nilai dnsNameLabel harus unik dalam wilayah Azure tempat Anda membuat instans kontainer. Perbarui nilai dalam templat jika diperlukan.

{
  "$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>"
            }
          }
        ]
      }
    }
  ]
}

Untuk menyebarkan templat Resource Manager, simpan JSON sebelumnya ke file bernama deploy-aci.json, lalu jalankan perintah az deployment group create dengan parameter --template-file:

# Deploy with Resource Manager template
az deployment group create --resource-group myResourceGroup --template-file deploy-aci.json

Memasang beberapa volume

Untuk memasang beberapa volume dalam instans kontainer, Anda harus menyebarkan templat Azure Resource Manager, file YAML, atau metode terprogram lainnya. Untuk menggunakan templat atau file YAML, berikan detail berbagi dan tentukan volume dengan mengisi array volumes di bagian properties dari file.

Misalnya, jika Anda membuat dua berbagi Azure Files bernama share1 dan share2 di akun penyimpanan myStorageAccount, array volumes dalam templat Resource Manager akan tampak mirip dengan yang berikut ini:

"volumes": [{
  "name": "myvolume1",
  "azureFile": {
    "shareName": "share1",
    "storageAccountName": "myStorageAccount",
    "storageAccountKey": "<storage-account-key>"
  }
},
{
  "name": "myvolume2",
  "azureFile": {
    "shareName": "share2",
    "storageAccountName": "myStorageAccount",
    "storageAccountKey": "<storage-account-key>"
  }
}]

Lalu, untuk setiap kontainer dalam grup kontainer tempat Anda ingin memasang volume, isi array volumeMounts di bagian properties dari definisi kontainer. Misalnya, ini memasang dua volume, myvolume1 dan myvolume2, sebelumnya didefinisikan:

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

Langkah berikutnya

Pelajari cara memasang jenis volume lainnya di Azure Container Instances: