CloudStack
الموقع في لوحة الإدارة: Infrastructure › Cloud provider › CloudStack › API connection (
/infra/cloudstack?tab=connect). يمكن أيضاً إجراء الاتصال الأول في معالج الإعداد، الخطوة 2.
الوظيفة
يبيع NexCMP أجهزة افتراضية تعمل على سحابة Apache CloudStack لديك. فهو ينشر أجهزة VMs ويشغلها ويوقفها ويغير حجمها ويأخذ Snapshots لها ويحذفها عبر CloudStack API، ويوزع عناوين IP عامة من المنطقة، ويقرأ بيانات الاستخدام للفوترة وحركة البيانات، ويعرض السعة والحالة التشغيلية في لوحة تحكم الإدارة. يبقى CloudStack هو المصدر المعتمد لـ hypervisors؛ بينما يوفر NexCMP واجهة البيع والفوترة والبوابة للعملاء.
استخدم هذه الصفحة عندما يكون CloudStack (أو سيكون) مصدر أجهزة VM الرئيسي لديك. ولمصدر ثانٍ إلى جانبه، راجع Proxmox VE.
المتطلبات
| العنصر | المتطلب |
|---|---|
| إصدار CloudStack | الإصدار 4.23 هو الإصدار المختبر. تتطلب وحدة تحكم VM الإصدار 4.18 أو أحدث، بينما يتطلب تغيير حجم CPU/RAM المباشر لجهاز VM قيد التشغيل الإصدار 4.23 مع KVM. |
| نوع المنطقة | منطقة تحتوي على شبكة ضيف (guest network) واحدة على الأقل لأجهزة VMs الخاصة بالعملاء ونطاق IP عام بعناوين متاحة. |
| Hypervisor | يُعد KVM هو برنامج Hypervisor المختبَر. |
| الحساب | نطاق وحساب مخصصان تم إنشاؤهما لـ NexCMP. لا تستخدم أبدًا مفتاح مسؤول ROOT. |
| إمكانية الوصول إلى API | يجب أن يتمكن خادم اللوحة من الوصول إلى عنوان URL الخاص بـ API لخادم الإدارة (https://cloudstack.example.com/client/api) عبر HTTP(S). وتستخدم وحدة تحكم الأجهزة الافتراضية وميزات عرض النطاق الترددي وKubernetes نقطة النهاية ذاتها. |
| مفتاح اختياري للقراءة فقط | يتيح مفتاح ثانٍ للقراءة فقط لوحدة تحكم الإدارة عرض المضيفين ووحدات التخزين والأجهزة الافتراضية للنظام ونطاقات IP العامة. وهو غير مطلوب لبيع الأجهزة الافتراضية. |
| عنوان IP عام | عناوين IPv4 عامة خالية في المنطقة. وتتم تهيئة البادئة التي يمكن لـ NexCMP بيعها ضمن Sales IP pools. |
| القوالب | قالب واحد على الأقل جاهز ومفعّل به كلمة المرور وعرض خدمة واحد يمكن لحسابك رؤيته. راجع Templates. |
| التخزين | وحدة التخزين الأساسية لأحجام الحساب، والتخزين الثانوي في حال كنت تبيع Snapshots أو الصور. |
| يعتمد على | لا شيء. تعتمد ميزات Kubernetes وPrivate Cloud وImages وBandwidth على هذه الصفحة. |
لا تستخدم مفتاح مسؤول ROOT
أنشئ نطاقًا وحسابًا مخصصين لـ NexCMP. سيتيح المفتاح حينئذٍ الوصول إلى هذا النطاق فقط، ولن يؤثر أي مفتاح مسرّب على بقية السحابة الخاصة بك. كما يتحقق معالج الإعداد من أن الشبكة التي تختارها تنتمي إلى المنطقة وإلى الحساب الذي يمتلك المفتاح.
تجهيز البنية التحتية
تستخدم الأوامر CloudMonkey (cmk) مع تسجيل الدخول كمسؤول CloudStack. استبدل الأسماء النموذجية والعناصر النائبة بين الأقواس الزاوية.
إنشاء حساب ومفتاح API مخصصين
أنشئ النطاق الذي سيحتوي على كل ما يمتلكه NexCMP.
bashcmk create domain name=nexcmpلاحظ
idفي المخرجات؛ حيث يتم استخدامه كـ<domain-id>أدناه.ابحث عن الدور الذي تريد تعيينه للحساب.
bashcmk list roles type=DomainAdmin filter=id,nameالدور متى تختاره Domain Admin (موصى به) مجموعة الميزات الكاملة: الأجهزة الافتراضية والشبكات ومشاريع Kubernetes وVPC والصور. ويتوقف نطاق وصوله عند نطاق nexcmp.User دورة حياة الأجهزة الافتراضية فقط. لا يمكن للمستخدم العادي حذف الأجهزة الافتراضية نهائيًا ما لم يكن الإعداد العام allow.user.expunge.recover.vmمضبوطًا على true؛ حيث يقوم NexCMP عندئذٍ بإيقاف الجهاز الافتراضي ويقوم CloudStack بحذفه نهائيًا بعدexpunge.delay.أنشئ الحساب ومستخدمه الأول. استخدم كلمة مرور عشوائية طويلة، فلن تحتاج إلى إدخالها مجددًا.
bashcmk create account name=nexcmp-api username=nexcmp-api \ password='CHANGE-ME-LONG-RANDOM' email=ops@example.com \ firstname=NexCMP lastname=API roleid=<role-id> domainid=<domain-id>إنشاء زوج مفاتيح API للمستخدم الجديد.
bashcmk list users domainid=<domain-id> username=nexcmp-api filter=id,username cmk generate userkeys id=<user-id>انسخ
apikeyوsecretkey. فهما API key وSecret key اللذان تدخلهما في NexCMP. يخزنهما NexCMP مشفرين ولا يعرض سوى الأحرف الأربعة الأخيرة بعد ذلك.تأكد من أن النطاق لا يحتوي على قيود موارد مقيدة (Instances، ووحدات التخزين، وعناوين IP العامة، والشبكات، وSnapshots، والقوالب، والمشاريع).
bashcmk list resourcelimits domainid=<domain-id>
إنشاء شبكة الضيف للأجهزة الافتراضية للعملاء
يتم نشر الأجهزة الافتراضية للعملاء داخل شبكة ضيف واحدة تابعة للحساب الجديد. وتعمل الشبكة المعزولة المزودة بموجّه افتراضي (VR) وخدمات Static NAT وFirewall وPort Forwarding بكفاءة، لأن NexCMP يربط عنوان IP عامًا بكل جهاز افتراضي باستخدام static NAT.
bash
cmk list networkofferings state=Enabled guestiptype=Isolated filter=id,name
cmk create network name=customers displaytext=customers zoneid=<zone-id> \
networkofferingid=<offering-id> account=nexcmp-api domainid=<domain-id>تحقق من سياسة egress الافتراضية للعرض: إذا كانت "deny"، فلن تمتلك الأجهزة الافتراضية للعملاء وصولًا صادرًا حتى تتم إضافة قواعد جدار الحماية لحركة المرور الصادرة.
إظهار العروض والقوالب
- يجب أن تكون عروض الخدمة وعروض الشبكة عامة أو مخصصة لنطاق
nexcmp، وإلا فلن يتمكن الحساب من عرضها أو استخدامها. - قم بتسجيل أو مشاركة قالب واحد على الأقل (راجع Templates). يعرض NexCMP القوالب الجاهزة والمميزة.
اختياري: مفتاح للقراءة فقط لصفحات البنية التحتية
تستخدم علامات التبويب Capacity وHost وStorage وSystem VM وقائمة نطاقات IP العامة مفتاحاً ثانياً يحتاج فقط إلى صلاحية القراءة لستة أوامر. أنشئ دوراً محدوداً بدلاً من إعادة استخدام مفتاح مسؤول كامل الصلاحيات:
bash
cmk create role name=nexcmp-readonly type=Admin
# <role-id> is the id printed above
for api in listHosts listCapacity listSystemVms listVlanIpRanges listClusters listStoragePools; do
cmk create rolepermission roleid=<role-id> rule=$api permission=allow
done
cmk create rolepermission roleid=<role-id> rule='*' permission=denyثم أنشئ حساباً بهذا الدور (في النطاق ROOT، لأنه يقرأ بيانات على مستوى المنطقة بأكملها)، وأنشئ مفاتيحه كما في الخطوة 4، وأدخلها كـ RO API key في القسم التالي.
التحقق من مسار الشبكة
من خادم اللوحة:
bash
curl -fsS -o /dev/null -w '%{http_code}\n' https://cloudstack.example.com/client/apiأي استجابة HTTP (حتى 4xx) تثبت إمكانية الوصول إلى المنفذ. تعني مهلة الانتظار وجود مشكلة في جدار الحماية أو نظام DNS من جانبك.
الربط في NexCMP
في معالج الإعداد
تطلب الخطوة 2 من معالج الإعداد نفس القيم. يعرض Test connection المناطق والشبكات التي يمكن للمفتاح رؤيتها؛ اختر المنطقة وشبكة الضيف، واسماً معروضاً للمنطقة والدولة، ثم انقر على Save CloudStack. سيرفض المعالج أي شبكة لا تنتمي إلى تلك المنطقة أو لا تظهر للمفتاح.

لاحقاً، في لوحة تحكم المسؤول
افتح Infrastructure › Cloud provider › CloudStack واختر علامة التبويب API connection.
املأ بطاقة Connection:
الحقل مثال للقيمة نقطة نهاية API https://cloudstack.example.com/client/apiمفتاح API (صلاحية كتابة) XXXX(اتركه فارغاً للاحتفاظ بالمفتاح المحفوظ)المفتاح السري XXXXمفتاح RO API / المفتاح السري RO اختياري، من الحساب المخصص للقراءة فقط معرّف المنطقة (Zone ID) معرّف UUID الخاص بمنطقتك 
انقر على Test connection قبل الحفظ. يختبر ذلك المفاتيح التي أدخلتها دون حفظها: مفتاح الكتابة مع
listZonesوlistCapabilities، ومفتاح القراءة فقط معlistSystemVms.انقر على Save connection. أبقِ خيار Enable CloudStack connection مفعلاً؛ إذ يؤدي إيقافه إلى إيقاف العامل لجميع مهام CloudStack دون فقدان أي بيانات.
افتح Services › Virtual Machines › Policy › Provisioning لتعيين شبكة الضيف الافتراضية، والعروض المخصصة، وزوج المفاتيح الافتراضي للأجهزة الافتراضية الجديدة.

افتح Infrastructure › Cloud provider › Sales IP pools، وضمن Configure sales ranges، حدد Sellable IP range prefixes (على سبيل المثال
203.0.113.) وExcluded IP prefixes إذا كانت هناك عناوين معينة في المنطقة يجب عدم بيعها أبداً. اترك البادئة فارغة للسماح بجميع العناوين المتاحة.
ما يقرأه NexCMP وما يكتبه
| المجال | عمليات القراءة | التغييرات |
|---|---|---|
| VMs | القائمة، الحالات، سجل الاستخدام، نقطة نهاية وحدة التحكم | النشر، والتشغيل، والإيقاف، وإعادة التشغيل، وإعادة التثبيت، والإتلاف، وتغيير الحجم، وإعادة تعيين كلمة المرور ومفتاح SSH |
| الأقراص واللقطات | وحدات التخزين، لقطات VM، النسخ الاحتياطية | الإنشاء، والإرفاق، وفصل الاتصال، وتعديل الحجم، والحذف، والتقاط اللقطات، والاستعادة |
| الشبكات | الشبكات، والموجهات، وعناوين public IPs، والجدار الناري، وتوجيه المنافذ، وقواعد موازن التحميل | ربط وتحرير عناوين public IPs، وstatic NAT، والجدار الناري، وتوجيه المنافذ، وقواعد egress، والشبكات وقوائم ACLs لـ Private Cloud |
| الكتالوج | عروض الخدمة والقرص والشبكة، والقوالب، وملفات ISOs، وأنواع أنظمة التشغيل | تسجيل وحذف القوالب وملفات ISOs (Images)، وعروض الخدمة عند إنشاء خطط مخصصة |
| Kubernetes | الإصدارات المدعومة، والعناقيد، والتكوين | المشاريع، وحدود الموارد، والشبكات، والعناقيد (وحدة Kubernetes) |
| مفتاح للقراءة فقط | المضيفات، والعناقيد، ومجمعات التخزين، وأجهزة system VMs، والسعة، ونطاقات عناوين VLAN IP | لا شيء |
معالجة وذاكرة RAM فورية، وعرض النطاق الترددي
- التبديل السريع (Hot-plug). لا يمكن تغيير حجم VM قيد التشغيل دون إعادة تشغيل إلا عندما يتيح قالبها ذلك (قابلة للتوسع ديناميكيًا) ويقوم النظام الضيف بتشغيل معالجات CPU وذاكرة RAM الجديدة فورياً. يفعّل NexCMP ميزة Auto Scaling للقوالب التي ينتهي اسمها بـ
vNمع N بقيمة 6 أو أكثر، أو عند تعيينها يدويًا في حقل vCPU/RAM hot-plug الخاص بالقالب. راجع القوالب. - مصدر عرض النطاق الترددي. بالإعدادات الافتراضية، يقيس NexCMP حركة المرور من إحصاءات CloudStack VM (
listVirtualMachinesUsageHistory، ويتم استطلاعها كل 5 دقائق وجمعها لكل واجهة شبكة لـ VM). تتضمن الأرقام حركة المرور بين أجهزة VM، لذا قد تكون أعلى قليلاً مما قد يحصيه موجه الحافة. حافظ على تمكين جمع إحصاءات CloudStack VM؛ يتم تخطي الفجوات الأطول من فترة الاحتفاظ بالإحصاءات. راجع عرض النطاق الترددي.
التحقق
- يُرجع Test connection النتيجة "Write key: OK" مع منطقتك وإصدار CloudStack.
- يُظهر Infrastructure › Cloud provider › Providers المزود كنشط مع وقت اختبار حديث. ولم تعد لوحة حالة لوحة التحكم تعرض "CloudStack: not connected".
- يسرد Sales IP pools العناوين المتاحة (يتم تحديثه مرة كل دقيقة تقريبًا).
- اطلب VM صغيرة من بوابة العملاء أو وحدة تحكم المسؤول وتأكد من وصولها إلى الحالة Running، وامتلاكها عنوان public IP، وإمكانية فتح وحدة التحكم.
القيود والملاحظات
- يمكن ربط عنقود CloudStack واحد في هذا الإصدار من NexCMP. يمكن لمربع الحوار Add cloud provider اختبار مفاتيح عنقود ثانٍ ولكنه لا يستطيع حفظه.
- ترتبط منطقة CloudStack واحدة بمنطقة NexCMP الافتراضية؛ ويقتصر CloudStack ذو المناطق المتعددة على المنطقة التي تدخلها، مع تجاهل أجهزة VMs وعناوين IPs والشبكات للمناطق الأخرى.
- يؤدي حذف شبكة الضيف في CloudStack إلى فشل كل عملية نشر جديدة. وتعرض وحدة تحكم المسؤول إشعارًا أحمر عند اختفاء الشبكة.
- لا تغادر بيانات الاعتماد الخادم أبدًا. ولا تُرجع API سوى الأحرف الأربعة الأخيرة.
استكشاف الأخطاء وإصلاحها
| العَرَض | السبب | الحل |
|---|---|---|
listCapabilities: cloudstack 401: unable to verify user credentials and/or request signature | مفتاح API أو سر غير صحيح، أو مفتاح من مستخدم آخر، أو مشكلة في توقيت خادم اللوحة | أنشئ المفاتيح مجددًا باستخدام cmk generate userkeys والصق كليهما. وتحقق من وقت خادم اللوحة. |
الاختبار: listZones: … أو انتهاء المهلة | لا يمكن لخادم اللوحة الوصول إلى عنوان URL الخاص بـ API | تحقق من DNS والجدار الناري والمسار الدقيق لـ /client/api. |
| المعالج: "network not found in that zone for this API key" | الشبكة المحددة تنتمي إلى حساب أو منطقة أخرى | أنشئ الشبكة في الحساب المخصص (انظر أعلاه) وشغّل Test connection مجددًا. |
| المعالج: "pick a zone and a network" | لم يتم إجراء الاختبار، أو لم يتم تحديد منطقة أو شبكة | انقر فوق Test connection وحدد من كلتا القائمتين. |
| شريط التنبيه "CloudStack key not configured" | لم يتم حفظ أي مفتاح بعد ("Connect later") | املأ بطاقة Connection، ثم Save connection، وبعدها Test connection. |
| شريط الإشعار "CloudStack connection is OFF" | مفتاح التبديل Enable CloudStack connection معطّل | قم بتفعيله ثم احفظ. |
| مفتاح القراءة فقط: "unusable …" في الاختبار | صلاحية دور مفقودة أو حساب غير صحيح | تحقق من الأوامر الستة المسموح بها وتأكد من أن الحساب في نطاق ROOT. |
| "Zone public IP ranges not measured yet" أو "no public IP ranges declared" | لا يوجد مفتاح قراءة فقط، أو أن المنطقة لا تحتوي فعليًا على نطاق عام | أضف مفتاح القراءة فقط، أو أضف نطاق IP عام في CloudStack. |
| "المجمع فارغ — انتظر 60 ثانية لمزامنة vmd" | يحدّث worker قائمة IP مرة كل دقيقة | انتظر دقيقة ثم أعد التحميل. |
| "نفاد عناوين IP المجانية في النطاق 203.0.113." | جميع العناوين في البادئة القابلة للبيع محجوزة | أضف عناوين إلى المنطقة، أو وسّع البادئة، أو حرّر عناوين IP غير المستخدمة. |
| "فشل جلب بيانات الشبكة (CloudStack لا يستجيب أو المفتاح يفتقر إلى الأذونات)" | فقد المفتاح صلاحية الوصول، أو أن CloudStack لا يستجيب | شغّل Test connection؛ وتحقق من تفعيل الحساب. |
| "شبكة Guest network غير موجودة" | تم حذف الشبكة في CloudStack | أنشئ الشبكة مجددًا وعيّنها كشبكة افتراضية ضمن Provisioning. |