توفير ملحق التسلسل في مجموعات مقياس الجهاز الظاهري

توفر ملحقات جهاز Azure الظاهري إمكانات مثل تكوين وإدارة ما بعد النشر والمراقبة والأمان وغير ذلك. تستخدم عمليات نشر الإنتاج عادةً مجموعة من الملحقات المتعددة التي تم تكوينها لمثيلات الجهاز الظاهري من أجل تحقيق النتائج المرجوة.

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

توضح هذه المقالة بالتفصيل كيفية تسلسل الملحقات التي سيتم تكوينها لمثيلات الجهاز الظاهري في مجموعات مقياس الجهاز الظاهري.

المتطلبات الأساسية

تفترض هذه المقالة أنك على دراية بما يلي:

متى يتم استخدام تسلسل الملحقات

ملحقات التسلسل ليست إلزامية لمجموعات المقياس، وما لم يتم تحديدها، فيمكن توفير الملحقات على مثيل مجموعة مقياس بأي ترتيب.

على سبيل المثال، إذا كان نموذج مجموعة القياس يحتوي على ملحقين - ExtensionA وExtensionB - محددين في النموذج، فقد يحدث أي من تسلسلات التوفير التالية:

  • ExtensionA -> ExtensionB
  • ExtensionB -> ExtensionA

إذا كان تطبيقك يتطلب توفير الملحق A دائماً قبل الملحق B، فيجب عليك استخدام تسلسل الملحق كما هو موضح في هذه المقالة. مع تسلسل الملحق، سيحدث الآن تسلسل واحد فقط:

  • ExtensionA - > ExtensionB

يمكن توفير أي ملحقات غير محددة في تسلسل توفير محدد في أي وقت، بما في ذلك قبل تسلسل محدد أو بعده أو أثناءه. يحدد تسلسل الملحقات فقط أنه سيتم توفير ملحق معين بعد محلق أخر محدد. وهو لا يؤثر على توفير أي ملحق آخر محدد في النموذج.

على سبيل المثال، إذا كان نموذج مجموعة المقاييس يحتوي على ثلاثة ملحقات - الملحق A والملحق B والملحق C - المحددة في النموذج، وتم تعيين الملحق C ليتم توفيره بعد الملحق A، فقد يحدث أي من تسلسلات التوفير التالية:

  • ExtensionA -> ExtensionC -> ExtensionB
  • ExtensionB -> ExtensionA -> ExtensionC
  • ExtensionA -> ExtensionB -> ExtensionC

إذا كنت بحاجة إلى التأكد من عدم توفير أي ملحق آخر أثناء تنفيذ تسلسل الملحق المحدد، فإننا نوصي بتسلسل جميع الملحقات في نموذج مجموعة المقياس. في المثال أعلاه، يمكن تعيين الملحق B ليتم توفيره بعد الملحق C بحيث يمكن أن يحدث تسلسل واحد فقط:

  • ExtensionA -> ExtensionC -> ExtensionB

كيفية استخدام تسلسل الملحقات

لتسلسل توفير الملحقات، يجب تحديث تعريف الملحق في نموذج مجموعة المقاييس لتضمين الخاصية "provisionAfterExtensions" والتي تقبل صفيفاً من أسماء الملحقات. يجب تحديد الملحقات المذكورة في قيمة صفيف الخصائص بشكلٍ كامل في نموذج مجموعة المقياس.

توزيع القالب

يحدد المثال التالي قالباً حيث تضم مجموعة المقاييس ثلاثة ملحقات - ExtensionA وExtensionB وExtensionC - بحيث يتم توفير الملحقات بالترتيب:

  • ExtensionA -> ExtensionB -> ExtensionC
"virtualMachineProfile": {
  "extensionProfile": {
    "extensions": [
      {
        "name": "ExtensionA",
        "properties": {
          "publisher": "ExtensionA.Publisher",
          "settings": {},
          "typeHandlerVersion": "1.0",
          "autoUpgradeMinorVersion": true,
          "type": "ExtensionA"
        }
      },
      {
        "name": "ExtensionB",
        "properties": {
          "provisionAfterExtensions": [
            "ExtensionA"
          ],
          "publisher": "ExtensionB.Publisher",
          "settings": {},
          "typeHandlerVersion": "2.0",
          "autoUpgradeMinorVersion": true,
          "type": "ExtensionB"
        }
      }, 
      {
        "name": "ExtensionC",
        "properties": {
          "provisionAfterExtensions": [
            "ExtensionB"
          ],
          "publisher": "ExtensionC.Publisher",
          "settings": {},
          "typeHandlerVersion": "3.0",
          "autoUpgradeMinorVersion": true,
          "type": "ExtensionC"                   
        }
      }
    ]
  }
}

نظرا لأن الخاصية "provisionAfterExtensions" تقبل مجموعة من أسماء الملحقات، فيمكن تعديل المثال أعلاه بحيث يتم توفير الملحق C بعد الملحق A والملحق B، ولكن لا يلزم الترتيب بين الملحق A والملحق B. يمكن استخدام القالب التالي لتحقيق هذا السيناريو:

"virtualMachineProfile": {
  "extensionProfile": {
    "extensions": [
      {
        "name": "ExtensionA",
        "properties": {
          "publisher": "ExtensionA.Publisher",
          "settings": {},
          "typeHandlerVersion": "1.0",
          "autoUpgradeMinorVersion": true,
          "type": "ExtensionA"
        }
      },
      {
        "name": "ExtensionB",
        "properties": {
          "publisher": "ExtensionB.Publisher",
          "settings": {},
          "typeHandlerVersion": "2.0",
          "autoUpgradeMinorVersion": true,
          "type": "ExtensionB"
        }
      }, 
      {
        "name": "ExtensionC",
        "properties": {
          "provisionAfterExtensions": [
            "ExtensionA","ExtensionB"
          ],
          "publisher": "ExtensionC.Publisher",
          "settings": {},
          "typeHandlerVersion": "3.0",
          "autoUpgradeMinorVersion": true,
          "type": "ExtensionC"                   
        }
      }
    ]
  }
}

REST API

يضيف المثال التالي ملحقاً جديداً باسم ExtensionC إلى نموذج مجموعة المقياس. يحتوي ExtensionC على تبعيات على ExtensionA وExtensionB، والتي تم تعريفها بالفعل في نموذج مجموعة المقياس.

PUT on `/subscriptions/subscription_id/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet/extensions/ExtensionC?api-version=2018-10-01`
{ 
  "name": "ExtensionC",
  "properties": {
    "provisionAfterExtensions": [
      "ExtensionA","ExtensionB"
    ],
    "publisher": "ExtensionC.Publisher",
    "settings": {},
    "typeHandlerVersion": "3.0",
    "autoUpgradeMinorVersion": true,
    "type": "ExtensionC" 
  }                  
}

إذا تم تعريف ExtensionC مسبقاً في نموذج مجموعة المقاييس وتريد الآن إضافة تبعياته، فيمكنك تنفيذ الملحق a PATCH لتحرير خصائص الملحق الذي تم نشره بالفعل.

PATCH on `/subscriptions/subscription_id/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet/extensions/ExtensionC?api-version=2018-10-01`
{ 
  "properties": {
    "provisionAfterExtensions": [
      "ExtensionA","ExtensionB"
    ]
  }                  
}

يتم تطبيق التغييرات على مثيلات مجموعة المقاييس الحالية على الترقية التالية.

Azure PowerShell

استخدم الأمر cmdlet Add-AzVmssExtension لإضافة ملحق حماية التطبيق إلى تعريف نموذج مجموعة المقياس. يتطلب تسلسل الملحق استخدام Az PowerShell 1.2.0 أو أعلى.

يضيف المثال التالي ملحق Application Health إلى extensionProfile في نموذج مجموعة مقياس لمجموعة مقياس مستند إلى Windows. سيتم توفير ملحق سلامة التطبيق بعد توفير ملحق البرنامج النصي المخصص، المحدد بالفعل في مجموعة المقياس.

# Define the scale set variables
$vmScaleSetName = "myVMScaleSet"
$vmScaleSetResourceGroup = "myVMScaleSetResourceGroup"

# Define the Application Health extension properties
$publicConfig = @{"protocol" = "http"; "port" = 80; "requestPath" = "/healthEndpoint"};
$extensionName = "myHealthExtension"
$extensionType = "ApplicationHealthWindows"
$publisher = "Microsoft.ManagedServices"

# Get the scale set object
$vmScaleSet = Get-AzVmss `
  -ResourceGroupName $vmScaleSetResourceGroup `
  -VMScaleSetName $vmScaleSetName

# Add the Application Health extension to the scale set model
Add-AzVmssExtension -VirtualMachineScaleSet $vmScaleSet `
  -Name $extensionName `
  -Publisher $publisher `
  -Setting $publicConfig `
  -Type $extensionType `
  -TypeHandlerVersion "1.0" `
  -ProvisionAfterExtension "CustomScriptExtension" `
  -AutoUpgradeMinorVersion $True

# Update the scale set
Update-AzVmss -ResourceGroupName $vmScaleSetResourceGroup `
  -Name $vmScaleSetName `
  -VirtualMachineScaleSet $vmScaleSet

Azure CLI 2.0

استخدم az vmss extension set لإضافة ملحق سلامة التطبيق إلى تعريف نموذج مجموعة المقياس. يتطلب تسلسل الملحق استخدام Azure CLI 2.0.55 أو أعلى.

يضيف المثال التالي ملحق سلامة التطبيق إلى نموذج مجموعة المقاييس لمجموعة المقاييس المستندة إلى Windows. سيتم توفير ملحق سلامة التطبيق بعد توفير ملحق البرنامج النصي المخصص، المحدد بالفعل في مجموعة المقياس.

az vmss extension set \
  --name ApplicationHealthWindows \
  --publisher Microsoft.ManagedServices \
  --version 1.0 \
  --resource-group <myVMScaleSetResourceGroup> \
  --vmss-name <myVMScaleSet> \
  --provision-after-extensions CustomScriptExtension \
  --settings ./extension.json

استكشاف الأخطاء وإصلاحها

غير قادر على إضافة ملحق مع التبعيات؟

  1. تأكد من تخصيص الملحقات المحددة في ProvarAfterExtensions في نموذج مجموعة المقياس.
  2. تأكد من عدم وجود تبعيات دائرية يتم إدخالها. على سبيل المثال، التسلسل التالي غير مسموح به: ExtensionA -> ExtensionB -> ExtensionC -> ExtensionA
  3. تأكد أن أي ملحقات تستخدم تبعيات، تحتوي على خاصية "إعدادات" ضمن "خصائص" الملحق. على سبيل المثال، إذا كان من الضروري توفير ExtentionB بعد ExtensionA، فيجب أن يحتوي ExtensionA على حقل "الإعدادات" ضمن "خصائص" الملحق ExtensionA. يمكنك تحديد خاصية "إعدادات" فارغة إذا كان الملحق لا يفرض أي إعدادات مطلوبة.

غير قادر على إزالة الملحقات؟

تأكد أن الملحقات التي تتم إزالتها غير مدرجة ضمن provisionAfterExtensions لأي ملحقات أخرى.

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

تعرف على كيفية نشر التطبيق الخاص بك على مجموعات مقياس الجهاز الظاهري.