أصبح Ansible أحد أكثر أنظمة إدارة التكوين شعبية. بعد شراء Red Hat في عام 2015 ، تجاوز عدد المشاركين في المشروع الآلاف وربما كان Ansible أكثر أنظمة النشر والتنسيق استخدامًا. تطبيقاته الواسعة مؤثرة جدا.
يعمل Ansible من خلال اتصالات SSH للمضيفين عن بُعد. يفتح جلسة SSH ، ويقوم بتسجيل الدخول ، وينسخ رمز Python عبر الشبكة ويكتبه في ملف مؤقت منفصل. بعد ذلك ، يقوم بتشغيل هذا الملف على الجهاز البعيد. هذه السلسلة الكاملة من العمليات طويلة ومملة للغاية ، لذلك هناك طرق مختلفة لتحسينها.
تتمثل إحدى هذه الطرق في خطوط أنابيب SSH التي تتيح لك استخدام جلسة SSH واحدة لتنفيذ التعليمات ، بدلاً من فتح جلسة جديدة في كل مرة ، مما يوفر لنا الكثير من الوقت. (فقط تذكر أن تقوم بتعطيل إعداد requiretty
لـ sudo في ملف /etc/sudoers
على الجهاز البعيد)
طريقة جديدة ل "رفع تردد التشغيل" Ansible هي مع مكتبة بيثون تسمى Mitogen . إذا لم يسمع أحد بذلك ، فسوف أصف باختصار وظيفته. إنها تتيح التنفيذ السريع لرمز الثعبان على جهاز بعيد ، و Ansible هو مجرد حالة استخدام واحدة. يستخدم Mitogen أنبوب UNIX على جهاز بعيد ويمرر zyib مضغوط رمز بيثون وتسلسلها باستخدام المخلل. هذا يساعد على تنفيذه بشكل أسرع ويوفر حركة المرور. إذا كنت مهتمًا بتفسير أكثر تفصيلًا ، فمن الأفضل أن تقرأ عنه في صفحة كيف تعمل . لكن اليوم سنركز فقط على المكتبة مع Ansible.
يمكن للميتوجين في ظروف معينة تسريع رمز Ansible الخاص بك عدة مرات وتقليل استهلاك حركة المرور بشكل كبير. دعونا نتحقق من أكثر حالات الاستخدام شيوعًا ونرى كيف يساعدنا ذلك.
الأهم من ذلك كله أنني استخدم Ansible من أجل: إنشاء ملفات التكوين على جهاز بعيد ، تثبيت الحزم ، نسخ الملفات من وإلى جهاز بعيد. ربما لديك أمثلة أخرى - اكتب في التعليقات.
دعنا نذهب!
تكوين Mitogen لـ Ansible بسيط للغاية:
تثبيت مكتبة Mitogen:
pip install mitogen
يوجد الآن طريقتان مكافئتان - إما لتكوين الخيارات في ملف التكوين ansible.cfg ، أو لتعيين متغيرات البيئة الضرورية.
لنفترض أن المسار إلى Mitogen المثبت هو /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy. ثم:
export ANSIBLE_STRATEGY_PLUGINS=/usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy export ANSIBLE_STRATEGY=mitogen_linear
أو
[defaults] strategy = mitogen_linear strategy_plugins = /usr/lib/python2.7/site-packages/ansible_mitogen/plugins/strategy
تثبيت Ansible في virtualenv ، مع وبدون Mitogen:
virtualenv mitogen_ansible ./mitogen_ansible/bin/pip install ansible==2.7.10 mitogen virtualenv pure_ansible ./pure_ansible/bin/pip install ansible==2.7.10
يرجى ملاحظة أن Mitogen 0.2.7 لا يعمل مع Ansible 2.8 (اعتبارًا من مايو 2019)
نحن نفعل الأسماء المستعارة:
alias pure-ansible-playbook='$(pwd)/pure_ansible/bin/ansible-playbook' alias mitogen-ansible-playbook='ANSIBLE_STRATEGY_PLUGINS=$(pwd)/mitogen_ansible/lib/python3.7/site-packages/ansible_mitogen/plugins/strategy ANSIBLE_STRATEGY=mitogen_linear $(pwd)/mitogen_ansible/bin/ansible-playbook'
حاول الآن تشغيل playbook لإنشاء ملفات على الجهاز البعيد:
--- - hosts: all gather_facts: false tasks: - name: Create files with copy content module copy: content: | test file {{ item }} dest: ~/file_{{ item }} with_sequence: start=1 end={{ n }}
وتشغيل مع وبدون Mitogen لإنشاء 10 ملفات:
time mitogen-ansible-playbook file_creation.yml -i hosts -en=10 &>/dev/null real 0m2.603s user 0m1.152s sys 0m0.096s time pure-ansible-playbook file_creation.yml -i hosts -en=10 &>/dev/null real 0m5.908s user 0m1.745s sys 0m0.643s
نرى تحسنا 2 أضعاف. دعونا نتحقق من 20 ، 30 ، ... ، 100 ملف:
time pure-ansible-playbook file_creation.yml -i hosts -en=100 &>/dev/null real 0m51.775s user 0m8.039s sys 0m6.305s time mitogen-ansible-playbook file_creation.yml -i hosts -en=100 &>/dev/null real 0m4.331s user 0m1.903s sys 0m0.197s
نتيجة لذلك ، قمنا بتسريع التنفيذ بأكثر من 10 مرات!
الآن دعونا نجرب سيناريوهات مختلفة ونرى كيف يعمل كل شيء بشكل أسرع بالنسبة لنا:
برنامج نصي لنسخ الملفات إلى مضيف بعيد من محلي (مع وحدة copy
):

برنامج نصي لإنشاء ملفات على مضيف بعيد مع وحدة copy
:

سيناريو مع تنزيل الملفات من مضيف بعيد إلى مضيف محلي:

البرنامج النصي مع إنشاء قوالب على مضيف مخصص مع بعض المتغيرات والحسابات في Jinja

لنجرب سيناريو يتضمن العديد من الأجهزة البعيدة ، على سبيل المثال ، سيناريو مع نسخ الملفات إلى مضيف بعيد:

كما ترون ، Mitogen يوفر لنا الوقت وحركة المرور في هذه السيناريوهات. ولكن إذا لم يكن "عنق الزجاجة" موجودًا في Ansible ، ولكن على سبيل المثال في قرص أو شبكة I / O أو في أي مكان آخر ، فمن الصعب توقع أن Mitogen سوف يساعدنا.
دعنا نجرب برنامج نصي لتثبيت الحزم مع وحدات yum / dnf و python باستخدام النقطة. تم تخزين الحزم مؤقتًا حتى لا تعتمد على مواطن الخلل في الشبكة:
--- - hosts: all gather_facts: false tasks: - name: Install packages become: true package: name: - samba - httpd - nano - ruby state: present - name: Install pip modules become: true pip: name: - pytest-split-tests - bottle - pep8 - flask state: present
مع Mitogen ، استغرق الأمر 12 ثانية ، كما لو كانت بدونه.
في صفحة Mitogen for Ansible ، يمكنك رؤية معايير واختبارات أخرى. كما هو مذكور في الصفحة:
لا يمكن لميتوجين تسريع الوحدة عند تنفيذها. يمكن أن تجعل فقط تنفيذ هذه الوحدة في أسرع وقت ممكن.
لذلك ، من المهم أن تجد الاختناقات في عملية النشر ، وإذا كانت بسبب Ansible ، فإن Mitogen سوف تساعدك على حلها وتسريع بشكل كبير تنفيذ كتب اللعب الخاصة بك.
تحرير: أضيفت النصي مع القوالب