مشاريع
المشروع هو مجموعة من الموارد التي تحدد تكوينات العقدة. تحتوي المشاريع على مواصفات. عند بدء تشغيل عقدة، يتم تكوينها عن طريق معالجة وتشغيل سلسلة من المواصفات.
يستخدم 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 myproject
CLI ، حيث 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، يجب تحديد المشروع.