مشاريع

المشروع هو مجموعة من الموارد التي تحدد تكوينات العقدة. تحتوي المشاريع على مواصفات. عند بدء تشغيل عقدة، يتم تكوينها عن طريق معالجة وتشغيل سلسلة من المواصفات.

يستخدم Azure CycleCloud المشاريع لإدارة التطبيقات المجمعة، مثل مجدولات الدفعات. في CycleCloud HPCPack، المشروع عبارة hn عن مواصفات ومواصفات cn تحدد التكوينات والوصفات لل عقدة الرأس والحوسبة HPCPack.

فيما يلي تعريف عقدة جزئية. ستقوم عقدة docker-registry بتشغيل ثلاث مواصفات: ربط المواصفات من إصدار مشروع okta 1.3.0، بالإضافة إلى مواصفات السجل والذاكرة الأساسية من إصدار مشروع docker 2.0.0:

[[node docker-registry]]
    Locker = base-storage
    [[[cluster-init okta:bind:1.3.0]]]
    [[[cluster-init docker:core:2.0.0]]]
    [[[cluster-init docker:registry:2.0.0]]]

العلامة اللاحقة هي رقم إصدار المشروع.

[[[cluster-init <project>:<spec>:<project version>]]]

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

يستخدم Azure CycleCloud اختصارا لحسابات التخزين، لذلك https://mystorage.blob.core.windows.net/mycontainer يمكن كتابته ك az://mystorage/mycontainer.

ستقوم العقدة بتنزيل كل مشروع تشير إليه من الخزانة باستخدام أداة pogo:

pogo get az://mystorage/mycontainer/projects/okta/1.3.0/bind

إذا تم تعريف مشروع على عقدة ولكنه غير موجود في موقع التخزين المتوقع، فستبلغ العقدة Software Installation Failure إلى CycleCloud.

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

المستخدم مسؤول عن عكس أي مشاريع إضافية إلى الخزانة. يحتوي CycleCloud CLI على أساليب لإنشاء المشاريع:

cyclecloud project init myproject

ومرآة:

cyclecloud project init mylocker

مشاريع إلى خزائن.

تتكون المواصفات من برامج python أو shell أو powershell النصية.

إنشاء مشروع جديد

لإنشاء مشروع جديد، استخدم الأمر cyclecloud project init myprojectCLI ، حيث myproject هو اسم المشروع الذي ترغب في إنشائه. سيؤدي ذلك إلى إنشاء مشروع يسمى "myproject"، مع مواصفات واحدة تسمى "default" يمكنك تغييرها. سيتم إنشاء شجرة الدليل مع ملفات الهيكل العظمي التي سيتم تعديلها لتضمين المعلومات الخاصة بك.

بنية الدليل

سيتم إنشاء الدلائل التالية بواسطة أمر المشروع:

      \myproject
          ├── project.ini
          ├── blobs
          ├── templates
          ├── specs
          │   ├── default
          │     └── cluster-init
          │        ├── scripts
          │        ├── files
          │        └── tests
          │     └── chef
          │         ├── site-cookbooks
          │         ├── data_bag
          │         └── roles

سيحتفظ دليل القوالب بقوالب نظام المجموعة، بينما ستحتوي المواصفات على المواصفات التي تحدد مشروعك. تحتوي المواصفات على دليلين فرعيين: cluster-init وstom chef. يحتوي cluster-init على دلائل لها معنى خاص، مثل دليل البرامج النصية (يحتوي على البرامج النصية التي يتم تنفيذها بترتيب معجمي على العقدة)، والملفات (سيتم وضع ملفات البيانات الأولية على العقدة)، والاختبارات (تحتوي على اختبارات ليتم تشغيلها عند بدء تشغيل نظام مجموعة في وضع الاختبار).

يحتوي الدليل الفرعي المخصص للطهاة على ثلاثة أدلة: كتب الطبخ للموقع (لتعريفات كتب التعليمات)، data_bags (تعريفات أكياس البيانات)، والأدوار (ملفات تعريف دور الشيف).

project.ini

project.ini هو الملف الذي يحتوي على جميع بيانات التعريف لمشروعك. يمكن أن يحتوي على:

المعلمة الوصف
الاسم اسم المشروع. يجب فصل الكلمات بشرطات، على سبيل المثال ترتيب-66-2018
تسمية اسم المشروع. الاسم الطويل (مع المسافات) للمجموعة لأغراض العرض.
النوع ثلاثة خيارات: المجدول، التطبيق، <فارغ>. تحديد نوع المشروع وإنشاء القالب المناسب. الافتراضي: التطبيق
الإصدار التنسيق: x.x.x

الخزائن

يتم تخزين محتويات المشروع داخل خزانة. يمكنك تحميل محتويات مشروعك إلى أي خزانة محددة في تثبيت CycleCloud عبر الأمر cyclecloud project upload (locker)، حيث (الخزانة) هو اسم خزانة تخزين السحابة في تثبيت CycleCloud. سيتم تعيين هذا الخزانة كهدف افتراضي. بدلا من ذلك، يمكنك معرفة الخزائن المتوفرة لك باستخدام الأمر cyclecloud locker list. يمكن عرض تفاصيل حول خزانة معينة باستخدام cyclecloud locker show (locker).

إذا قمت بإضافة أكثر من خزانة واحدة، يمكنك تعيين الافتراضي الخاص بك مع cyclecloud project default_target (locker)، ثم ببساطة تشغيل cyclecloud project upload. يمكنك أيضا تعيين خزانة افتراضية عمومية يمكن مشاركتها بواسطة المشاريع باستخدام الأمر cyclecloud project default locker (locker) -global.

ملاحظة

سيتم تخزين الخزانات الافتراضية في ملف تكوين cyclecloud (الموجود عادة في ~/.cycle/config.ini)، وليس في project.ini. يتم ذلك للسماح بالتحكم في الإصدار project.ini.

سيؤدي تحميل محتويات المشروع إلى ضغط دلائل chef ومزامنة كل من chef وs cluster init إلى المخزن الهدف. سيتم تخزينها في:

  • (locker)/projects/(project)/(version)/(spec_name)/cluster-init
  • (locker)/projects/(project)/(version)/(spec_name)/chef

تنزيل كائن ثنائي كبير الحجم

استخدم project download لتنزيل كافة الكائنات الثنائية كبيرة الحجم المشار إليها في project.ini إلى دليل blobs المحلي. يستخدم الأمر المعلمة [locker] وسيحاول تنزيل الكائنات الثنائية كبيرة الحجم المدرجة في project.ini من المخزن إلى التخزين المحلي. سيتم إرجاع خطأ إذا تعذر تحديد موقع الملفات.

إعداد المشروع

المواصفات

عند إنشاء مشروع جديد، يتم تعريف مواصفات افتراضية واحدة. يمكنك إضافة مواصفات إضافية إلى مشروعك عبر cyclecloud project add_spec الأمر .

تعيين الإصدار

بشكل افتراضي، تحتوي جميع المشاريع على إصدار 1.0.0. يمكنك تعيين إصدار مخصص أثناء تطوير المشاريع ونشرها عن طريق الإعداد version=x.y.z في ملف project.ini .

على سبيل المثال، إذا كان "locker_url" "az://my-account/my-container/projects"، وكان المشروع يسمى "Order66"، وكان الإصدار "1.6.9"، وكانت المواصفات "افتراضية"، فسيكون عنوان URL الخاص بك:

  • az://my-account/my-container/projects/Order66/1.6.9/default/cluster-init
  • az://my-account/my-container/projects/Order66/1.6.9/default/chef

الكائنات الثنائية كبيرة الحجم

هناك نوعان من الكائنات الثنائية كبيرة الحجم: كائنات ثنائية كبيرة الحجم للمشروعوالكائنات الثنائية كبيرة الحجم للمستخدم.

Project Blobs

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

لإضافة الكائنات الثنائية كبيرة الحجم إلى المشاريع، أضف الملف (الملفات) إلى project.ini:

[[blobs optionalname]]
  Files = projectblob1.tgz, projectblob2.tgz, projectblob3.tgz

يمكن فصل الكائنات الثنائية كبيرة الحجم المتعددة بفاوصلة. يمكنك أيضا تحديد المسار النسبي إلى دليل الكائن الثنائي كبير الحجم للمشروع.

الكائنات الثنائية كبيرة الحجم للمستخدم

الكائنات الثنائية كبيرة الحجم للمستخدم هي ملفات ثنائية لا يمكن لمؤلف المشروع إعادة توزيعها بشكل قانوني، مثل ثنائيات UGE. لا يتم حزم هذه الملفات مع المشروع، ولكن بدلا من ذلك يجب أن يتم تنظيمها إلى الخزانة يدويا. ستكون الملفات موجودة في /blobs/my-project/my-blob.tgz. لا يلزم تعريف الكائنات الثنائية كبيرة الحجم للمستخدم في project.ini.

لتنزيل أي كائن ثنائي كبير الحجم، استخدم jetpack download الأمر من CLI أو jetpack_download مورد Chef. سيبحث CycleCloud عن كائن ثنائي كبير الحجم للمستخدم أولا. إذا لم يكن هذا الملف موجودا، فسيتم استخدام كائن ثنائي كبير الحجم على مستوى المشروع.

ملاحظة

من الممكن تجاوز كائن ثنائي كبير الحجم لمشروع باستخدام كائن ثنائي كبير الحجم للمستخدم بنفس الاسم.

تحديد Project داخل قالب نظام المجموعة

يسمح لك بناء جملة المشروع بتحديد مواصفات متعددة على العقد الخاصة بك. لتعريف مشروع، استخدم ما يلي:

[[[cluster-init myspec]]]
  Project = myproject # inferred from name
  Version = x.y.z
  Spec = default  # (alternatively, you can name your own spec to be used here)
  Locker = default  # (optional, will use default locker for node)

ملاحظة

يمكن أن يكون الاسم المحدد بعد "المواصفات" أي شيء، ولكن يمكن ويجب استخدامه كاختصار لتعريف بعض > الخصائص الشائعة.

يمكنك أيضا تطبيق مواصفات متعددة على عقدة معينة كما يلي:

[[node scheduler]]
  [[[cluster-init myspec]]]
  Project = myproject
  Version = x.y.z
  Spec = default  # (alternatively, you can name your own spec to be used here)
  Locker = default  # (optional, will use default locker for node)

[[[cluster-init otherspec]]]
Project = otherproject
Version = a.b.c
Spec = otherspec  # (optional)

من خلال فصل اسم المشروع واسم المواصفات والإصدار مع النقطتين، يمكن ل CycleCloud تحليل هذه القيم في الإعدادات المناسبة Project/Version/Spec تلقائيا:

[[node scheduler]]
  AdditionalClusterInitSpecs = $ClusterInitSpecs
  [[[cluster-init myproject:myspec:x.y.z]]]
  [[[cluster-init otherproject:otherspec:a.b.c]]]

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

[[node defaults]]
[[[cluster-init my-project:common:1.0.0]]]
Order = 2 # optional
[[node scheduler]]
[[[cluster-init my-project:scheduler:1.0.0]]]
Order = 1 # optional

[[nodearray execute]]
[[[cluster-init my-project:execute:1.0.0]]]
   Order = 1 # optional

سيؤدي هذا إلى تطبيق كل من المواصفات common و scheduler على عقدة المجدول، مع تطبيق المواصفات common و execute فقط على nodearray التنفيذ.

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

إذا تم تحديد اسم واحد فقط في [[[cluster-init]]] التعريف، فسيتم افتراض أنه اسم المواصفات. على سبيل المثال:

[[[cluster-init myspec]]]
Project = myproject
Version = 1.0.0

هو إعداد Spec=myspec مواصفات صالح يتضمنه الاسم.

run_list

يمكنك تحديد قائمة تشغيل على مستوى المشروع أو المواصفات ضمن project.ini:

[spec scheduler]
run_list = role[a], recipe[b]

عندما تتضمن العقدة المواصفات "المجدول"، سيتم إلحاق run_list المعرفة تلقائيا بأي قائمة تشغيل معرفة مسبقا. على سبيل المثال، إذا كان run_list المحدد ضمن [configuration] ، run_list = recipe[test]فإن قائمة التشغيل النهائية ستكون run_list = recipe[cyclecloud], recipe[test], role[a], recipe[b], recipe[cluster_init].

يمكنك أيضا الكتابة فوق قائمة تشغيل على مستوى المواصفات على عقدة. سيؤدي ذلك إلى استبدال أي run_list مضمنة في project.ini. على سبيل المثال، إذا قمنا بتغيير تعريف العقدة إلى ما يلي:

[cluster-init test-project:scheduler:1.0.0]
run_list = recipe[different-test]

سيتم تجاهل قائمة التشغيل المحددة في المشروع، وسيتم استخدام ما سبق بدلا من ذلك. ستكون قائمة التشغيل النهائية على العقدة بعد ذلك run_list = recipe[cyclecloud], recipe[test], recipe[different-test], recipe[cluster_init].

ملاحظة

قوائم التشغيل خاصة ب chef ولا تنطبق بخلاف ذلك.

مواقع الملفات

سيتم تنزيل ملفات chef المضغوطة أثناء مرحلة تمهيد تشغيل العقدة. يتم تنزيلها إلى $JETPACK_HOME/system/chef/tarballs وفك ضغطها إلى $JETPACK_HOME/system/chef/chef-repo/، وتستخدم عند تقارب العقدة.

ملاحظة

لتشغيل كتب الطبخ المخصصة، يجب تحديدها في run_list للعقدة.

سيتم تنزيل ملفات cluster-init إلى /mnt/cluster-init/(project)/(spec)/. بالنسبة إلى "my-project" و"my-spec"، سترى البرامج النصية والملفات والاختبارات الموجودة في /mnt/cluster-init/my-project/my-spec.

مزامنة المشاريع

يمكن مزامنة مشاريع CycleCloud من النسخ المتطابقة إلى التخزين السحابي المحلي للمجموعة. تعيين سمة SourceLocker على [cluster-init] مقطع داخل القالب الخاص بك. سيتم استخدام اسم الخزانة المحدد كمصدر للمشروع، وستتم مزامنة المحتويات مع الخزانة عند بدء نظام المجموعة. يمكنك أيضا استخدام اسم الخزانة كالجزء الأول من اسم cluster-init. على سبيل المثال، إذا كان خزانة المصدر "cyclecloud"، فإن التعريفين التاليين متماثلان:

[cluster-init my-project:my-spect:1.2.3]
  SourceLocker=cyclecloud

[cluster-init cyclecloud/my-proect:my-spec:1.2.3]

تخزين الملفات الكبيرة

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

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

لإضافة كائن ثنائي كبير الحجم، ما عليك سوى وضع ملف في دليل "blobs" وتحرير project.ini للإشارة إلى هذا الملف:

[blobs]
  Files=big_file1.tgz

عند استخدام project upload الأمر، سيتم نقل جميع الكائنات الثنائية كبيرة الحجم المشار إليها في project.ini إلى التخزين السحابي.

ملفات السجل

توجد ملفات السجل التي تم إنشاؤها عند تشغيل cluster-init في $JETPACK_HOME/logs/cluster-init/(project)/(spec).

تشغيل الملفات

عند تشغيل برنامج نصي ل cluster-init بنجاح، يتم وضع ملف في /mnt/cluster-init/.run/(project)/(spec) للتأكد من عدم تشغيله مرة أخرى على تلاقي لاحق. إذا كنت تريد تشغيل البرنامج النصي مرة أخرى، فاحذف الملف المناسب في هذا الدليل.

دلائل البرنامج النصي

عندما ينفذ CycleCloud البرامج النصية في دليل البرامج النصية، فإنه سيضيف متغيرات البيئة إلى مسار واسم المواصفات ودلائل المشروع:

CYCLECLOUD_PROJECT_NAME
CYCLECLOUD_PROJECT_PATH
CYCLECLOUD_SPEC_NAME
CYCLECLOUD_SPEC_PATH

على linux، سيكون لمشروع يسمى "test-project" بمواصفات "افتراضي" مسارات على النحو التالي:

CYCLECLOUD_PROJECT_NAME = test-project
CYCLECLOUD_PROJECT_PATH = /mnt/cluster-init/test-project
CYCLECLOUD_SPEC_NAME = default
CYCLECLOUD_SPEC_PATH = /mnt/cluster-init/test-project/default

تشغيل البرامج النصية فقط

لتشغيل البرامج النصية ل cluster-init فقط:

jetpack converge --cluster-init

سينتقل الإخراج من الأمر إلى STDOUT بالإضافة إلى jetpack.log. سيتم أيضا تسجيل إخراج كل برنامج نصي إلى:

      $JETPACK_HOME/logs/cluster-init/(project)/(spec)/scripts/(script.sh).out

طاه مخصص ومواصفات قابلة للتأليف

تحتوي كل مواصفات على دليل chef فيه. قبل التقارب، سيتم إلغاء توجيه كل مواصفات واستخراجها في chef-repo المحلي، واستبدال أي كتب الطبخ والأدوار وأكياس البيانات الموجودة بنفس الاسم (الأسماء). يتم ذلك بالترتيب الذي يتم به تحديد المواصفات، لذلك في حالة اصطدام التسمية، فإن آخر مواصفات محددة ستفوز دائما.

تنزيل jetpack

لتنزيل كائن ثنائي كبير الحجم داخل برنامج نصي ل cluster-init، استخدم الأمر jetpack download (filename) لسحبه من دليل blobs. سيؤدي تشغيل هذا الأمر من برنامج نصي cluster-init إلى تحديد المشروع وعنوان URL الأساسي لك. لاستخدامه في سياق غير نظام المجموعة، ستحتاج إلى تحديد المشروع (راجع --help للحصول على مزيد من المعلومات).

بالنسبة لمستخدمي chef، jetpack_download تم إنشاء LWRP:

jetpack_download "big-file1.tgz" do
  project "my-project"
  end

في chef، يكون موقع التنزيل الافتراضي هو #{node[:jetpack][:downloads]}. لتغيير وجهة الملف، استخدم ما يلي:

jetpack_download "foo.tgz" do
  project "my-project"
  dest "/tmp/download.tgz"
end

عند استخدامها داخل chef، يجب تحديد المشروع.