تسريع أنسبل

شاحن توربيني مقطعي


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



نناقش هنا والمزيد Ansible 2.9.x ، والذي تم تثبيته في Virtualenv الذي تم إنشاؤه حديثًا بالطريقة المفضلة لديك.



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



خطوط الأنابيب



يمكن لأي شخص أن يسمع بالفعل عن الحاجة إلى استخدام خطوط الأنابيب ، أي عدم نسخ الوحدات النمطية إلى FS للنظام الهدف ، ولكن نقل أرشيف مضغوط Base64 ملفوف مباشرة إلى stdin لمترجم Python ، لكن الحقيقة تبقى : هذا الإعداد لا يزال أقل من الواقع. لسوء الحظ ، استخدمت بعض توزيعات Linux الشائعة لتكوين sudo بشكل افتراضي ليس جيدًا - لذا فإن هذا الأمر يتطلب tty (Terminal) ، لذلك ترك Ansible هذا الإعداد المفيد جدًا معطلاً افتراضيًا.



pipelining = True


جمع الحقائق



هل تعلم أنه مع الإعدادات الافتراضية ، فإن Ansible لكل لعبة ستبدأ مجموعة من الحقائق من جميع المضيفين الذين يشاركون فيها؟ بشكل عام ، إذا كنت لا تعرف ، فأنت تعلم الآن. لمنع حدوث ذلك ، تحتاج إلى تمكين إما وضع الطلب الصريح لجمع الحقائق (الصريح) أو الوضع الذكي. في ذلك ، سيتم جمع الحقائق فقط من هؤلاء المضيفين الذين لم يتم مواجهتهم في المسرحيات السابقة.

محدث. عند النسخ ، سيتعين عليك اختيار أحد هذه الإعدادات.



gathering = smart|explicit


إعادة استخدام اتصالات ssh



إذا سبق لك أن بدأت Ansible في وضع التصحيح (الخيار "v" يتكرر مرة واحدة إلى تسع مرات) ، فربما تكون قد لاحظت أن اتصالات ssh يتم إنشاؤها وإسقاطها باستمرار. لذلك ، هناك أيضًا بعض التفاصيل الدقيقة هنا.



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

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



ssh_args = "-o ControlMaster=auto -o ControlPersist=15m"


لإعادة استخدام اتصال ssh مفتوح بالفعل عند نقل الملفات إلى مضيف مُدار ، يكفي تحديد إعداد ssh_tranfer_method غير معروف آخر. التوثيق حول هذا الأمر ضئيل للغاية ومضلل ، لأن هذا الخيار يعمل لنفسه! لكن قراءة الكود المصدري تسمح لك بفهم ما سيحدث بالضبط: سيتم تشغيل الأمر dd على المضيف المُدار ، والعمل مباشرةً مع الملف المطلوب.



transfer_method = piped


بالمناسبة ، في فرع "التطوير" هذا الإعداد موجود أيضًا ولم يذهب إلى أي مكان .



لا تخافوا من السكين ، تخافوا من الشوكة



إعداد مفيد آخر هو الشوك. يحدد عدد العمليات العاملة التي ستتصل في نفس الوقت بالمضيفين وتؤدي المهام. نظرًا لخصائص لغة Python ، تُستخدم العمليات على أنها PL ، وليس خيوط ، لأن Ansible لا تزال تدعم Python 2.7 - لا يوجد عدم التزامن بالنسبة لك ، فلا يوجد شيء يولد عدم التزامن هنا! بشكل افتراضي ، تطلق Ansible خمسة عمال ، ولكن إذا طُلبت بشكل صحيح ، فستعمل أكثر:



forks = 20


أنا فقط أحذرك على الفور من أنه قد تكون هناك بعض الصعوبات المرتبطة بحجم الذاكرة المتاح على جهاز التحكم. بمعنى آخر ، يمكنك بالطبع وضع شوكات = 100500 ، لكن من قال إنها ستنجح؟



ضع كل شيء معا



نتيجة لذلك ، بالنسبة لـ ansible.cfg (ini-format) ، قد تبدو الإعدادات الضرورية كما يلي:



[defaults]
gathering = smart|explicit
forks = 20
[ssh_connection]
pipelining = True
ssh_args = -o ControlMaster=auto -o ControlPersist=15m
transfer_method = piped


وإذا كنت تريد إخفاء كل شيء في قائمة YaML العادية للشخص السليم ، فقد يبدو الأمر كما يلي:



---
all:
  vars:
    ansible_ssh_pipelining: true
    ansible_ssh_transfer_method: piped
    ansible_ssh_args: -o ControlMaster=auto -o ControlPersist=15m


لسوء الحظ ، لن يعمل هذا مع إعدادات "التجمع = ذكي / صريح" و "forks = 20": لا توجد مكافئات YaML. إما أن نضعها في ansible.cfg ، أو نمررها عبر متغيرات البيئة ANSIBLE_GATHERING و ANSIBLE_FORKS.



حول ميتوجين
— Mitogen? — , . — . , Mitogen, Ansible , , — , Mitogen . , , — .



Mitogen? , . — , : , « , ». , « ».



تم اكتشاف بعض هذه الإعدادات أثناء قراءة الكود المصدري للمكوِّن الإضافي للاتصال تحت الاسم الموضح ذاتيًا "ssh.py". أشارك نتائج القراءة على أمل أن تلهم شخصًا آخر للنظر في المصدر ، وقراءتها ، والتحقق من التنفيذ ، والمقارنة مع الوثائق - بعد كل شيء ، عاجلاً أم آجلاً ، كل هذا سيجلب لك نتائج إيجابية. حظا سعيدا!



All Articles