قوالب نظام المجموعة

يستخدم Azure CycleCloud القوالب لتعريف تكوينات نظام المجموعة. يتم تضمين عدد من القوالب في CycleCloud بشكل افتراضي وتتوفر قائمة كاملة بالقوالب المدعومة في GitHub. يمكنك إنشاء قوالب جديدة أو يمكنك تخصيص القوالب الموجودة. على سبيل المثال، قد تحتاج إلى تخصيص قالب موجود للاستفادة من Spot VMs، أو قد ترغب في إضافة VPC لتوسيع شبكتك الخاصة.

تدوين التكوين

تحتوي جميع قوالب نظام مجموعة Azure CycleCloud على خيار وجود مقطع واحد أو أكثر [[[التكوين]] التي تنتمي إلى عقدة أو nodearray. تحدد هذه الأقسام خيارات تكوين البرامج حول العقد التي يتم تشغيلها بواسطة CycleCloud. يتم استخدام التدوين المنقط لتحديد السمات التي ترغب في تكوينها:

[[node scheduler]]
  [[[configuration]]]
  cycle_server.admin.name = poweruser
  cycle_server.admin.pass = super_secret
  cycle_server.http_port = 8080
  cycle_server.https_port = 8443

يمكنك أيضا تحديد قسم تكوين باستخدام prefix رمز لحفظ الكتابة. يمكن أيضا كتابة التكوين نفسه كما يلي:

[[node scheduler]]
  [[[configuration cycle_server]]]
  admin.name = poweruser
  admin.pass = super_secret
  http_port = 8080
  https_port = 8443

يمكن أن تحتوي العقدة/nodearray أيضا على أقسام تكوين متعددة إذا لزم الأمر:

[[node scheduler]]
  [[[configuration]]]
  run_list = role[sge_scheduler_node]

  [[[configuration cycle_server.admin]]]
  name = poweruser
  pass = super_secret

معلمات قالب نظام المجموعة

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

# template.txt
[cluster gridengine]

  [[node scheduler]]
  MachineType = $machine_type

    [[[configuration]]]
    gridengine.slots = $slots

يعرف هذا القالب معلمتين: $machine_type و $slots. باستخدام هذا القالب، يمكنك تعريف الملفات النصية التي تحتوي على قيم المعلمات في كل من بيئات التطوير و prod. يمكن أن يكون ملف المعلمات بتنسيق JSON أو تنسيق ملف خصائص Java:

# dev-params.json
{
  "machine_type": "H16r",
  "slots": 2
}

# prod-params.properties
machine_type = Standard_D4v3
slots = 8

سيؤدي ذلك إلى إنشاء ملف JSON يحتوي على معلمات التطوير وملف .properties الذي يحتوي على قيم الإنتاج.

ملاحظة

لاحقة اسم الملف لملف المعلمات مهم! إذا كنت تستخدم JSON، يجب تسمية foo.jsonالملف الخاص بك . إذا كنت تستخدم خصائص Java، يجب أن ينتهي ملفك ب .properties. لن يتم استيراد ملفات المعلمات المسماة بشكل غير صحيح بشكل صحيح.

يمكنك الآن استيراد القالب باستخدام ملف المعلمات لتعبئة القطع المفقودة:

cyclecloud import_cluster gridengine-dev -f template.txt -p dev-params.json -c gridengine

cyclecloud import_cluster gridengine-prod -f template.txt -p prod-params.properties -c gridengine

من الممكن أيضا تعريف بعض أو كافة المعلمات داخل قالب نظام المجموعة نفسه:

# template.txt
[cluster gridengine]

  [[node scheduler]]
  MachineType = $machine_type

    [[[configuration]]]
    gridengine.slots = $slots

[parameters]
  [[parameter machine_type]]
  DefaultValue = Standard_D4v3

  [[parameter slots]]
  DefaultValue = 2

يتم تعريف القيم الافتراضية لكل معلمة داخل القالب (استخدمنا قيم "dev" كقيم افتراضية).

من الممكن الآن استيراد القالب بدون ملف معلمات، وسيتم استخدام قيم "التطوير" تلقائيا. عندما حان الوقت لإنشاء مجموعة "prod"، يمكنك استخدام ملف prod-params.properties للكتابة فوق القيم المحددة داخل ملف القالب نفسه.

ملاحظة

يمكن أن تتضمن أسماء المعلمات أي أحرف وأرقام وتسطير أسفل السطر.

يمكن أن تأخذ مراجع المعلمات في القالب أحد النموذجين:

$param: يستخدم قيمة معلمة واحدة تسمى param

${expr}: يقيم expr في سياق جميع المعلمات، ما يتيح لك حساب القيم الديناميكية. على سبيل المثال:

Attribute = ${(a > b ? a : b) * 100}

قد يستغرق هذا أكبر من معلمتين، وb، a ويضربه في 100. يتم تفسير التعبير وتقييمه وفقا لمواصفات لغة ClassAd.

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

  • السمة1 = $param
  • Attribute2 = 123$param

ستكون قيمة الرقم Attribute1 ، ولكن قيمة Attribute2 ستكون السلسلة "123456".456 لاحظ أن ${param} مطابق ل $param، والذي يسمح لك بتضمين مراجع المعلمات في حالات أكثر تعقيدا:

  • السمة3 = 123$param789
  • السمة4 = 123${param}789

Attribute3 سيبحث عن المعلمة المسماة param789، ولكن Attribute4 سيستخدم قيمة param للحصول على "123456789".

أنواع الأجهزة

يدعم Azure CycleCloud أنواع أجهزة متعددة عبر السمة MachineType . سيحاول الحصول على السعة بالترتيب المدرج.

مواصفات مجموعة Init

يسمح تطبيق الويب Azure CycleCloud للمستخدمين بتحديد مواصفات مشروع cluster-init عند إنشاء نظام مجموعة جديد. يتم إعداد مواصفات المشروع داخل قالب نظام المجموعة:

[parameter ClusterInitSpecs]
Label = Cluster-Init
Description = Cluster init specs to apply to nodes
ParameterType = Cloud.ClusterInitSpecs

[cluster demo]

  [[node defaults]]
  AdditionalClusterInitSpecs = $ClusterInitSpecs

      [[[cluster-init myproject:myspec:1.0.0]]]

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

الأجهزة الظاهرية الموضعية

لتقليل تكلفة أحمال العمل الخاصة بك، يمكنك تعيين Interruptible = true. سيؤدي ذلك إلى وضع علامة على المثيل الخاص بك على أنه Spot، وسيستخدم السعة الفائضة عند توفرها. من المهم ملاحظة أن هذه المثيلات ليست متاحة دائما ويمكن استباقها في أي وقت، ما يعني أنها ليست مناسبة دائما لحمل العمل الخاص بك.

بشكل افتراضي، سيستخدم الإعداد Interruptible إلى صحيح المثيلات الموضعية مع تعيين السعر الأقصى إلى -1؛ وهذا يعني أنه لن يتم إخلاء المثيل بناء على السعر. سيكون سعر المثيل هو السعر الحالي لـ Spot أو سعر مثيل قياسي، أيهما أقل، ما دامت هناك سعة وحصة متوفرة. إذا كنت ترغب في تعيين الحد الأقصى للسعر المخصص، فاستخدم السمة MaxPrice على العقدة المطلوبة أو nodearray.

[cluster demo]

  [[nodearray execute]]
  Interruptible = true
  MaxPrice = 0.2

جداول البحث

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

[[parameter MachineImage]]
    Label = Image
    DefaultValue = image-1000
    Description = Ubuntu 22.04
    Config.Plugin = pico.control.AutoCompleteDropdown
    [[[list Config.Entries]]]
        Name = image-1000
        Label = Ubuntu 20.04
    [[[list Config.Entries]]]
        Name = image-2000
            Label = Ubuntu 22.04

يمكنك أيضا الحصول على إصدار نظام التشغيل للصورة المختارة واستخدامها لتكوين آخر عن طريق جعل e معلمة قيمتها هي جدول بحث للقيم:

[[parameter AmiLookup]]
  ParameterType = hidden
  [[[record DefaultValue]]]
      image-1000 = Ubuntu 20.04
      image-2000 = Ubuntu 22.04

لاحظ أن هذا مخفي، بحيث لا يظهر في واجهة المستخدم.

يمكنك الحصول على إصدار نظام التشغيل المستخدم للصورة المختارة في أي مكان آخر في تعريف نظام المجموعة:

[[node node]]
[[[configuration]]]
version = ${AmiLookup[MachineImage]}

تكامل واجهة المستخدم الرسومية

تحديد المعلمات داخل قالب نظام المجموعة يمكن المرء من الاستفادة من واجهة المستخدم الرسومية Azure CycleCloud. على سبيل المثال، عند تعريف المعلمات، يمكن استخدام السمات التالية للمساعدة في إنشاء واجهة المستخدم الرسومية:

# template.txt
[cluster gridengine]

  [[node scheduler]]
  MachineType = $machine_type

    [[[configuration]]]
    gridengine.slots = $slots

[parameters]
  [[parameter machine_type]]
  DefaultValue = Standard_D4v3
  Label = Machine Type
  Description = MachineType to use for the Grid Engine scheduler node
  ParameterType = Cloud.MachineType

  [[parameter slots]]
  DefaultValue = 2
  Description = The number of slots for Grid Engine to report for the node

يتم تضمين سمات "التسمية" و"الوصف" التي ستظهر في واجهة المستخدم الرسومية بالإضافة إلى السمة الاختيارية "ParameterType". يسمح "ParameterType" بعرض عناصر واجهة المستخدم المخصصة. في المثال أعلاه، ستعرض قيمة "Cloud.MachineType" قائمة منسدلة تحتوي على جميع أنواع الأجهزة المتوفرة. قيم ParameterType الأخرى هي:

نوع المعلمة الوصف
Cloud.MachineType يعرض قائمة منسدلة تحتوي على جميع أنواع الأجهزة المتوفرة.
Cloud.Credentials يعرض قائمة منسدلة تحتوي على جميع بيانات الاعتماد المتوفرة.
Cloud.Region يعرض قائمة منسدلة تحتوي على جميع المناطق المتوفرة.

دعم Chef Server

Azure CycleCloud suports ChefServer.

إنشاء الملف chefserver.json وإضافة بيانات الاعتماد الخاصة بك. ValidationKey يتوافق مع ملف validation.pem لخادم chef الخاص بك. يجب أيضا إثبات validation_client_name ما إذا قمت بتغييره من القيمة الافتراضية ل "chef-validator":

{
"AdType" : "Cloud.Locker",
"ValidationKey" : "YOURVALIDATION.PEMHERE",
"ValidationClientName" : "chef-validator",
"Credentials" : "default",
"Location" : "https://mychefserver",
"ChefRepoType" : "chefserver",
"LockerType" : "chefrepo",
"Name" : "chefrepo",
"AccountId" : "default",
"Shared" : false
}

بعد ذلك، ضع الملف في الدليل /opt/cycle_server/config/data. سيتم استيراده تلقائيا.

صور المستخدم المخصصة في القوالب

يدعم Azure CycleCloud الصور المخصصة في القوالب. حدد معرف الصورة (معرف المورد) مباشرة باستخدام ImageId، أو أضف الصورة إلى سجل الصور. عندما تكون الصورة في السجل، قم بالرجوع إليها إما مع أو ImageImageName على العقدة الخاصة بك. سيظهر في القائمة المنسدلة للصورة في صفحة إنشاء نظام المجموعة.

تتكون الصور في سجل الصور من Package سجل يحدد محتويات الصورة المنطقية وسجل واحد أو أكثر من السجلات المقابلة Artifact التي تحدد معرف الصورة الفعلي في موفر السحابة المناسب. على سبيل المثال، قد تتكون صورة مخصصة مع R مثبت عليها من سجل الحزمة هذا:

AdType = "Package"
Name = "r_execute"
Version = "2.1.1"
PackageType = "image"
Label = "R"

بمجرد إضافة هذا السجل، يمكنك تحديد هذه الصورة عن طريق تضمين إما Image = R أو ImageName = r_execute في قالب نظام المجموعة.

إذا كانت هذه الصورة موجودة كجهاز ظاهري واحد في useast بمعرف /subscriptions/xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/images/MyCustomImage، فستحتاج إلى تخزين البيانات الاصطناعية التالية:

AdType = "Artifact"
Package = "r_execute"
Version = "2.1.1"
Name = "az/useast"
Provider = "az"
ImageId = "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/images/MyCustomImage"

يجب تحديد Provider على البيانات الاصطناعية.

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

إذا أضفت أكثر من حزمة صور واحدة بنفس الاسم، فيجب أن يكون لها أرقام إصدارات مختلفة. عند بدء تشغيل مثيل، سيختار CycleCloud تلقائيا الصورة ذات أعلى رقم إصدار، من خلال معاملة رقم الإصدار كسلسلة منقطة ومقارنة كل جزء كرقم. لتجاوز ذلك، حدد ImageVersion على العقدة، إما كحرف حرفي (على سبيل المثال 1.2) أو حرف بدل (1.x).