تحميل مشاركة ملف Azure في Azure Container Instances

بشكل افتراضي، تكون Azure Container Instances بدون حالة. إذا أُعيد تشغيل الحاوية أو تعطلت أو توقفت، فستفقد حالتها بالكامل. للاحتفاظ بالحالة بما يتجاوز مدة بقاء الحاوية، يجب تحميل وحدة تخزين من مخزن خارجي. كما هو موضح في هذه المقالة، يمكن لAzure Container Instances تحميل مشاركة ملف Azure تم إنشاؤها باستخدام ملفات Azure. تقدم Azure Files مشاركات ملفات مُدارة بالكامل مستضافة في Azure Storage والتي يمكن الوصول إليها عبر بروتوكول Server Message Block (SMB) القياسي في الصناعة. يوفر استخدام مشاركة ملف Azure مع Azure Container Instances ميزات مشاركة الملفات المشابهة لاستخدام مشاركة ملف Azure مع أجهزة Azure الظاهرية.

التقييدات

  • يمكنك فقط تحميل مشاركات ملفات Azure إلى حاويات Linux. راجع المزيد حول الاختلافات في دعم الميزات لمجموعات حاويات Linux و Windows في نظرة عامة.
  • يتطلب تحميل وحدة تخزين Azure File share تشغيل حاوية Linux كـ جذر.
  • تقتصر عمليات تحميل وحدة تخزين Azure File share على دعم CIFS.

ملاحظة

تحميل مشاركة ملفات Azure إلى مثيل حاوية مشابه لـ Docker ربط تحميل. إذا قمت بتحميل مشاركة في دليل الحاوية حيث توجد الملفات أو الدلائل، فإن التحميل يحجب الملفات أو الدلائل، مما يجعل الوصول إليها غير ممكن أثناء تشغيل الحاوية.

هام

إذا كنت تنشر مجموعات الحاويات في شبكة Azure الظاهرية، فيجب إضافة نقطة نهاية الخدمة إلى حساب تخزين Azure الخاص بك.

إنشاء مشاركة ملف Azure

قبل استخدام مشاركة ملف Azure مع Azure Container Instances، يجب عليك إنشاؤها. قم بتشغيل البرنامج النصي التالي لإنشاء حساب تخزين؛ لاستضافة مشاركة الملف والمشاركة نفسها. يجب أن يكون اسم حساب التخزين فريدًا بشكل عام؛ لذلك يضيف البرنامج النصي قيمة عشوائية إلى السلسلة الأساسية.

# 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

الحصول على بيانات اعتماد التخزين

لتحميل Azure File share كوحدة تخزين في Azure Container Instances، تحتاج إلى ثلاث قيم: اسم حساب التخزين، واسم المشاركة، ومفتاح الوصول إلى التخزين.

  • اسم حساب التخزين - إذا استخدمت النص البرمجي السابق، فسيتم تخزين اسم حساب التخزين في المتغير $ACI_PERS_STORAGE_ACCOUNT_NAME. لمشاهدة اسم الحساب، اكتب:

    echo $ACI_PERS_STORAGE_ACCOUNT_NAME
    
  • اسم المشاركة - هذه القيمة معروفة بالفعل (تم تعريفها على أنها acishareفي البرنامج النصي السابق)

  • مفتاح حساب التخزين - يمكن العثور على هذه القيمة باستخدام الأمر التالي:

    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
    

نشر الحاوية وحجم التحميل - CLI

لتحميل مشاركة ملف Azure كوحدة تخزين في حاوية باستخدام Azure CLI، حدد نقطة تحميل المشاركة ووحدة التخزين عند إنشاء الحاوية باستخدام إنشاء حاوية az. إذا اتبعت الخطوات السابقة، فيمكنك تحميل المشاركة التي قمت بإنشائها مسبقًا باستخدام الأمر التالي لإنشاء حاوية:

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/

يجب أن تكون قيمة --dns-name-label فريدة داخل منطقة Azure حيث تقوم بإنشاء مثيل الحاوية. قم بتحديث القيمة في الأمر السابق إذا تلقيت رسالة خطأ DNS name label عند تنفيذ الأمر.

إدارة الملفات في وحدة التخزين المركبة

بمجرد بدء الحاوية، يمكنك استخدام تطبيق الويب البسيط الذي تم نشره عبر صورة Microsoft aci-hellofiles لإنشاء ملفات نصية صغيرة في مشاركة ملف Azure في مسار التحميل الذي حددته. احصل على اسم المجال المؤهل بالكامل (FQDN) لتطبيق الويب باستخدام الأمر az container show:

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

بعد حفظ النص باستخدام التطبيق، يمكنك استخدام مدخل Azure أو أداة مثل Microsoft Azure Storage Explorer لاسترداد وفحص الملف، أو الملفات المكتوبة في file share.

نشر الحاوية وحجم التحميل - YAML

يمكنك أيضًا نشر مجموعة حاويات وتركيب وحدة تخزين في حاوية باستخدام Azure CLI و نموذج YAML. يُعد النشر بواسطة نموذج YAML طريقة مفضلة عند نشر مجموعات الحاويات التي تتكون من عدة حاويات.

يحدد نموذج YAML التالي مجموعة حاوية بحاوية واحدة تم إنشاؤها باستخدام صورةaci-hellofiles. تقوم الحاوية بتثبيت مشاركة ملف Azure acishare التي تم إنشاؤها مسبقًا كوحدة تخزين. عند الإشارة، أدخل الاسم ومفتاح التخزين لحساب التخزين الذي يستضيف مشاركة الملف.

كما في مثال CLI، يجب أن تكون قيمة dnsNameLabelفريدة داخل منطقة Azure؛ حيث تقوم بإنشاء مثيل الحاوية. قم بتحديث القيمة في ملف 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

للنشر باستخدام نموذج YAML، احفظ YAML السابق في ملف باسم deploy-aci.yaml، ثم نفذ الأمر az container create باستخدام المعلمة --file:

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

نشر الحاوي، ووحدة التخزين - Azure Resource Manager

بالإضافة إلى نشر CLI و YAML، يمكنك نشر مجموعة حاويات، وتركيب وحدة تخزين في حاوية باستخدام قالب إدارة الموارد في Azure.

أولًا- قم بملء المصفوفة volumesفي قسم مجموعة الحاويةproperties بالقالب.

بعد ذلك، لكل حاوية تريد تحميل وحدة التخزين فيها، قم بتعبئة المصفوفة volumeMountsفي قسمproperties من تعريف الحاوية.

يحدد قالب Resource Manager التالي مجموعة حاويات مع حاوية واحدة تم إنشاؤها باستخدام الصورةaci-hellofiles. تقوم الحاوية بتثبيت مشاركة ملف Azure acishare التي تم إنشاؤها مسبقًا كوحدة تخزين. عند الإشارة، أدخل الاسم ومفتاح التخزين لحساب التخزين الذي يستضيف مشاركة الملف.

كما في الأمثلة السابقة، يجب أن تكون قيمة dnsNameLabelفريدة داخل منطقة Azure حيث تقوم بإنشاء مثيل الحاوية. قم بتحديث القيمة في القالب إذا لزم الأمر.

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

للنشر باستخدام قالب Resource Manager، احفظ JSON السابق في ملف باسم deploy-aci.json ثم نفذ الأمر az publish group create باستخدام المعلمة--template-file:

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

تحميل وحدات تخزين متعددة

لتحميل وحدات تخزين متعددة في مثيل حاوية، يجب عليك النشر باستخدام قالب Azure Resource Manager أو ملف YAML أو طريقة برمجية أخرى. لاستخدام نموذج أو ملف YAML، قدم تفاصيل المشاركة، وحدد وحدات التخزين عن طريق ملء مصفوفة volumesفي قسمproperties من الملف.

على سبيل المثال، إذا أنشأت مشاركتي Azure Files باسم share1 و share2 في حساب التخزين myStorageAccount، فستظهر المصفوفة volumesفي قالب Resource Manager مشابهًا للآتي:

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

بعد ذلك، بالنسبة لكل حاوية في مجموعة الحاوية تريد تحميل وحدات التخزين فيها، قم بتعبئة المصفوفة volumeMounts في قسم properties من تعريف الحاوية. على سبيل المثال، يؤدي هذا إلى تحميل المجلدين، myvolume1 و myvolume2، المحددين مسبقًا:

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

الخطوات التالية

تعرف على كيفية تحميل أنواع وحدات التخزين الأخرى في Azure Container Instances: