كيف صنعنا صداقات في البنية التحتية المصرفية باستخدام ManageIQ

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


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


صورة


كان الحل الأنسب هو ManageIQ . هذا هو المشروع الذي حصلت عليه ريد هات في عام 2012 وبناءً عليه ، قامت بإنشاء منتج ريد هات كلاود فورمز التجاري. في الوقت نفسه ، ظلت ManageIQ في حالة منتج مفتوح المصدر وتتطور بالتوازي مع CloudForms.


ManageIQ مكتوب بلغة Ruby وهو يدعم عددًا كبيرًا من مزودي الخدمات الافتراضية والسحب العامة والحاويات. في الوقت الحالي ، نستخدم إصدارًا من Gaprindashvili في تهيئة High-Availability في Home.


كيف تغيرت العملية


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


بعد دمج العملية بأكملها في ManageIQ ، حصلنا على النتائج التالية:


نوع المورد الظاهريقبل تقديم ManageIQبعد تنفيذ ManageIQ
لينكس آلة افتراضية في إم وير / أوفيرتإلى واحد~ 10 دقائق
بيئة الجهاز الظاهري Rancherالعمل~ 15 دقيقة
ويندوز الجهاز الظاهري في إم ويرالأسبوع~ 25 دقيقة

يرجع فارق التوقيت إلى حقيقة أنه في الحالة الثانية ، هناك حاجة إلى وقت إضافي لإعداد المضيف للعمل مع Docker وتنزيل الصور وربطها في حاويات البنية التحتية من Artifactory ، لأنه في هذه المرحلة لا يوجد حتى الآن وصول إلى Docker Hub. في حالة نظام التشغيل Windows ، يتم تحقيق الاختلاف بسبب حقيقة أن وقت إنشاء نظام Linux VM بدون تخصيص ، أولاً ، يستغرق حوالي دقيقتين ، ووقت تشغيل نظام التشغيل Windows VM مدته 6 دقائق. ثانياً ، يستغرق تخصيص Windows نفسه حوالي 10 دقائق ، مقابل دقيقتين لنظام Linux.


10 دقائق ليست بهذه السرعة ، بالنظر إلى أن ما يقرب من 2-3 دقائق تنفق مباشرة على عملية إنشاء VM. للوقت المتبقي ، ManageIQ تمكن من القيام بما يلي:


  1. يجمع النظام المعلمات التي يحددها المستخدم في نموذج الطلب ويتحللها إلى متغيرات.
  2. يتم إنشاء طلب تغيير جديد في نظام إدارة الحوادث ، والذي يعرض بيانات حول المورد الجديد.
  3. يرسل نظام استعلام اسم مورد ManageIQ قيمة لمورد جديد.
  4. يصدر نظام إدارة عنوان IP عنوانًا جديدًا استنادًا إلى المعلمات التي تم إدخالها.
  5. يتم تسجيل سجل DNS جديد على خادم DNS المحلي.
  6. استنادًا إلى المعلمات والبيئة وتحميل الموارد ، يتم تحديد نوع المحاكاة الافتراضية ونظام المجموعة للتنسيب.
  7. بعد ذلك ، عملية إنشاء جهاز افتراضي مع المعلمات المحددة.
  8. عند نشر الجهاز الظاهري من القالب ، تحتاج إلى تشغيل البرامج النصية التي ستجعل الإعدادات النهائية:
    • توسيع القرص إلى حجم معين ،
    • إنشاء كلمة مرور جذر جديدة وتغييرها على مضيف Linux والكتابة إلى مدير كلمات المرور ،
    • إنشاء ملف تكوين YAML لـ Puppet في GitLab ،
    • تشغيل سجلات التشغيل التي تجلب الإعدادات والتحديثات الضرورية لـ Windows VMs أو
    • إطلاق Puppet ، والتي ستقوم بتحديث وتكوين أجهزة Linux.
  9. بعد كل هذا ، يتم إغلاق طلب التغيير الذي تم إنشاؤه في الخطوة 2. تتم إضافة بيانات جديدة إليها ، مثل عنوان IP واسم المضيف.
  10. يتم تسجيل وحدة جديدة في قاعدة حساب إدارة الموارد (CMDB).
  11. يتم تسجيل الجهاز الظاهري في Zabbix وإضافته إلى المراقبة.
  12. يتلقى العميل والأطراف المعنية الأخرى رسالة بريد إلكتروني تحتوي على معلومات حول الوحدة الجديدة التي تم إنشاؤها باستخدام ManageIQ.

ما في الداخل


دعونا الخوض في التفاصيل الفنية للمنتج. بشكل افتراضي ، يمكن لـ ManageIQ إنشاء جهاز افتراضي من قالب. كيف يختلف هذا عما نفعله ، على سبيل المثال ، في vCenter؟ الجواب الصحيح هو لا شيء. تستخدم ManageIQ نفس الأساليب التي تستخدمها أنظمة المحاكاة الافتراضية ، ولكنها تفعل ذلك من مكان واحد. بالإضافة إلى ذلك ، يمكنك إضافة البرامج النصية الخاصة بك التي لا تنسجم مع مجموعة الميزات القياسية. وبالتالي ، إذا كان لديك موارد ، على سبيل المثال ، في Azure العامة ، في vCenter ، والتي يتم نشرها على أجهزتك الخاصة ، بالإضافة إلى أن مجموعة Kubernetes تدور في مكان آخر ، فيمكن إدارة كل هذا بشكل مناسب من ManageIQ.


بالإضافة إلى مجموعة واسعة من مزودي التكامل ، لدى ManageIQ أدوات ملائمة للتخصيص. هذا ، على سبيل المثال ، إنشاء نماذج ملائمة لحل مشكلتك:



بفضل هذا ، كان من الممكن بناء واجهة كاملة لطلب جهاز افتراضي ، مع تركيب جميع المعلمات اللازمة فيه:



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


لا تنس أن بإمكان الناس طلب الكثير من الموارد أو عدم طلب ما يحتاجونه حقًا. هنا يأتي نظام الطلبات والتأكيدات:



يجب اعتماد أي موارد يطلبها المستخدم من قبل الشخص المسؤول. في المنزل ، تقوم مجموعة من المهندسين المعماريين بذلك.


هيكل الأتمتة


إذا قمت بتحليل جميع عمليات التشغيل الآلي في ManageIQ إلى أجزاء صغيرة ، فستلاحظ وجود بنية معينة.


أتمتة المجال



يستضيف Datastore جميع المجالات التي لدى ManageIQ.


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


أتمتة مساحة الاسم



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


فكر في البنية بمزيد من التفاصيل باستخدام مثال عملية التزويد لجهاز ظاهري جديد. هو موصوف في Automate Class يسمى VMProvision_VM .


أتمتة الدرجة


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


التخطيط مشابه لخط الأنابيب في أنظمة CI / CD. وهو يصف الخطوات التي سيتم تنفيذها في عملية الأتمتة.


أتمتة مثيل



يحتوي الفصل الموصوف أعلاه على مثيلين تلقائيًا. يرث كل منهم من الدائرة المراحل التي تم تعيين القيمة الافتراضية لها . يتم وصف المراحل التي تحتوي على قيم فارغة في المثيل.



في المثال ، ظهرت القيم للخطوات التي كانت فارغة في وصف المخطط. يمكنك أيضًا معرفة من ومتى تم التغيير الأخير.


لنرى ما تمثله إحدى قيم القيمة:


هذه فئة تلقائية تسمى الأساليب ، والتي تحتوي على مثيل تلقائي واحد. يصف الرسم التخطيطي الخاص به سمة ipam_base_uri وطريقة التنفيذ . تقوم طريقة التنفيذ ، بدورها ، باستدعاء أسلوب التنفيذ التلقائي.


أتمتة الطريقة


هذا هو برنامج نصي Ruby يسمح لجهاز ظاهري بالاتصال عبر REST API مع أنظمة أخرى. على سبيل المثال ، كما هو الحال مع نظام إدارة مساحة عنوان IPAM. في IPAM نحصل على العنوان والقناع والشبكة الفرعية والشبكة المحلية الظاهرية الخاصة بـ VM. تكمن الصعوبة في إمكانية نشر الجهاز في بيئة اختبار أو إنتاجية للتطبيقات أو قواعد البيانات. أو ربما قررت خدمة الأمن وضعها في حلقة PCI-DSS. يتم جمع كل هذه المعلومات في مرحلة إنشاء VM أو إرسالها في معلمات المثيل المسمى (في لقطة الشاشة أعلاه ، يمكنك أن ترى أن المعلمة تحتوي على uri التي ستصل بها الطريقة إلى IPAM):


هنا بعض الرموز روبي
base_uri = $evm.object['ipam_base_uri'] prov = $evm.root["miq_provision"] site = prov.get_option(:site) app = prov.get_option(:dialog_dropdown_list_information_system) crq = prov.get_option(:crq) descr = prov.get_option(:dialog_textarea_box_usernotes) owner = $evm.root['user'].name scope = prov.get_option(:dialog_dropdown_scope) environment = prov.get_option(:landscape) 

$ evm.root هي طريقة تقوم بإرجاع كل شيء يمكن تخزينه في ManageIQ. يمكن أن تكون هذه معلومات عن المستخدم ، البيئة ، المتغيرات ، الطلب الحالي ('miq_request') ، إلخ. نحن مهتمون بعملية التوفير الحالية.


بعد ذلك ، يمكننا التقاط القيم اللازمة: get_option (: site) يستلم القيمة التي تم نقلها في إحدى المراحل السابقة ، على سبيل المثال ، get_option (: dialog_dropdown_list_information_system) تلتقط من النموذج الذي يملأه المستخدم عند طلب موارد جديدة.
يتم إرسال جميع القيم المستلمة بواسطة متغيرات في نص الطلب بتنسيق JSON:


 options = { verify: false, headers: {"Content-Type" => "application/json"}, body: { "site" => "#{site}", "env" => "#{env}", "app" => "#{app}", "scope" => "#{scope}", "role" => "#{role}", "crq" => "#{crq}", "descr" => "#{descr}", "owner" => "#{owner}", }.to_json, } 

باستخدام هذه المجموعة من المعلمات ، ستحدد IPAM بشكل لا لبس فيه الشبكة المحلية الظاهرية التي يجب تحديد موقع الجهاز الظاهري لها ، وستُرجع معلمات الشبكة.


بالإضافة إلى تلقي البيانات الخاصة بتكوين VM الصحيح ، يمكن لـ ManageIQ أيضًا إنشاء معلومات إضافية لجعل بعض الإعدادات في مرحلة ما بعد توفير ما بعد النشر (بعد نشر الجهاز الظاهري وتشغيله). في Home ، نستخدم Puppet لإدارة تكوينات مضيف Linux. لكل وحدة حسابية ، قم بإنشاء ملف GAML في YAML مع مجموعة من المجموعات:


بعض المزيد من رمز روبي
 options = { headers: {"Private-Token" => "#{api_token}", "Content-Type" => "application/json"}, } body = { "branch" => "#{branch}", "author_email" => "email@your.domain", "author_name" => "ManageIQ Bot", "content" => "", "commit_message" => "New host created by ManageIQ", } descr = prov.get_option(:long_description) if descr.include?('rancher') && descr.include?('test') then body[:content] = "---\ngroups:\n - #{yaml_server}\n - rancher\n - user-devops-UDCR" end unless descr.include?('test') then if descr.include?('rancher') then body[:content] = "---\ngroups:\n - #{yaml_server}\n - rancher\n" end end unless descr.include?('rancher') then body[:content] = "---\ngroups:\n - #{yaml_server}\n - #{$is_id}" end 

تعتمد المجموعات على نوع الجهاز الظاهري ، والبيئة التي يتم إنشاؤه فيها ، ونظام المعلومات.



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


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


تسجيل


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


لكل حدث في الدائرة ، يمكنك تكوين إدخال سجل من البداية والنهاية:


بالإضافة إلى ذلك ، يمكنك كتابة رسائلك في السجلات:


 $evm.log(:info, "Call job status uri: #{item_uri}/#{job_id}/api/json") 

هذا مفيد جدًا عند الوصول إلى الأنظمة بواسطة API لفهم سبب حدوث خطأ ما. أو لتتبع الحالة الحالية لعملية طويلة ، مثل تشغيل مهمة Jenkins أو SCCM Runbook:


 $evm.log(:info, "acquire_osname --- naming jobStatus: #{jobStatus}") break if jobStatus.to_s == "Completed" 

يمكنك استخدام الوظائف القياسية للاستثناءات للكتابة على السجلات:


 raise “VM not specified” if vm.nil? 

بشكل افتراضي ، يتم تخزين جميع السجلات في قسم / var / log / administiq / * ، ولكن من تجربتي الخاصة أستطيع أن أقول إن البحث عن مشكلة من خلال tail و grep ليس هو الحل الأكثر ملاءمة. نظرًا لأن ManageIQ يكتب الكثير من السجلات المختلفة ، فيجب عليك الانتباه إلى إعادة توجيه السجلات ، على سبيل المثال ، إلى مكدس ELK.


ManageIQ API


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


عند إنشاء VM:
 def get_template(vendor, os, ems) user = '#{user}' pass = '#{pass}' options = { verify: false, headers: {"Accept" => "*/*", "accept-encoding" => "gzip, deflate"}, basic_auth: { username: "#{user}", password: "#{pass}" }, } response = HTTParty.get("#{host}/api/templates?filter[]=vendor=%27#{vendor}%27&filter[]=name=%27%2A#{os}%2A%27&filter[]=ems_id=%27#{ems}%27", options).to_s link = JSON.parse(response) link["resources"].each do |r| $url = r["href"] end response = HTTParty.get($url,options).to_s template = ["#{JSON.parse(response)['id']}"+", "+"#{JSON.parse(response)['name']}"] return template end 

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


طلب ما بعد:
 curl -X POST \ http://Manageiq.hostname/api/service_catalogs/4/service_templates/31 \ -H 'Authorization: Basic Token-Value' \ -H 'Content-Type: application/json' \ -d '{ "action": "order", "resource": { "radio_button_vcpu": "a_2", "radio_button_vram": "a_2", "hdd_size": "40", "dropdown_os": "CentOS", "text_box_filter": "dns", "dropdown_list_information_system": "DNS ", "text_box_validator": "OK (DNS )", "textarea_box_usernotes": " ", "dropdown_env": "production", "date_control_retirement_dt": "2022-05-21", "dropdown_scope": "-" } }' 

استنتاج


الايجابيات:


  • مرونة لا تصدق: لا يتيح لك ManageIQ تخصيص عملية الأتمتة حسب حاجتك فحسب ، بل يتيح أيضًا تغيير الجزء المرئي من خلال إضافة أزرار وحقول إضافية ، إلخ.
  • المدمج في محرر رمز مع تسليط الضوء على بناء الجملة والتحقق من صحة رمز. بدا لي حلاً جيدًا للغاية ، إذا كنت بحاجة إلى إصلاح شيء بسرعة.
  • عدد كبير من المصادر التي يمكن للنظام العمل معها. السحب: أمازون EC2 ، Google Compute Engine ، Azure ، OpenStack ، VMware vCloud. البنية التحتية: Microsoft SCVMM ، مدير منصة OpenStack ، Red Hat Virtualization ، VMware vCenter. الحاويات: Kubernetes ، OpenShift.

سلبيات:


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

كما لدينا الآن:


نظرًا لحقيقة أن ManageIQ يمكنها الاستفادة بالكامل من لغة Ruby ، ​​تمكنا من دمجها للعمل مع واجهات برمجة التطبيقات التالية:


  • كلمة السر مدير يقوم بإنشاء كلمة مرور جذر وفقًا لمتطلبات خدمة الأمان ، ويكتبها في قاعدة البيانات الخاصة به ، ويستخدمها ManageIQ داخل نظام التشغيل ؛
  • خدمات Orchestration مركز الخدمة لإدارة سجلات DNS وأسماء المضيفين ؛
  • BMC علاج. يتم تسجيل العملية برمتها كتعليقات على الطلب. بعد التنفيذ الناجح ، يتم إغلاق الطلب ؛
  • CMDB. يتم إنشاء معلومات حول وحدات التكوين الجديدة في قاعدة البيانات مع جميع البيانات اللازمة.
  • Zabbix. اعتمادًا على الانتماء لنظام المعلومات والبيئة ، تتم إضافة المضيفين إلى مجموعات المراقبة المقابلة.
  • مربي ماشية. نفذت إنشاء بيئات جديدة ، وتركيب الوكلاء وتسجيل المضيفين في البيئات الحالية.
  • جنكينز. يدير Jenkins وظائف لتكوين أجهزة VM في oVirt ؛
  • LDAP. إنشاء مجموعات جديدة يتم استخدامها للتحكم في الوصول في بيئات Rancher وتكوين السياسات في Vault ؛
  • قبو. في المنزل ، بدأ للتو دمج هذا المنتج في العمليات المصرفية ، لكننا قمنا بالفعل بطرق لإنشاء مجموعات وسياسات وأقسام جديدة للتخزين ؛
  • تم ذكر الدمية و IPAM في وقت سابق.

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


ما تسعى جاهدة من أجل:


  • ترقية إلى إصدار Hammer ، حيث يمكنك في وضع HA محاولة العمل مع Ansible المضمّن.
  • الانتقال من التنسيق لكل وحدة من الموارد الافتراضية إلى الإدارة. ستتمكن الفرق من تلقي VMs جديدة بشكل أسرع إذا لم تستنفد الحصة.
  • تطوير طرق جديدة لتوفير المزيد من الأنظمة الخارجية.
  • على سبيل المثال ، SaaS المختلفة مثل jenkins ، logstash ، إلخ.
  • تنفيذ طرق API جديدة في بوابة حالية لأصحاب أنظمة المعلومات. لن يحتاج المستخدمون إلى التفكير في كيفية الاندماج مع عنصر البنية الأساسية الجديد ، بل سيستخدمونه كخدمة فقط للحصول على موارد جديدة أو تغيير الموارد الحالية.

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

Source: https://habr.com/ru/post/ar461891/


All Articles