Ansible على نطاق واسع
Ansible على نطاق واسع
تشغيل playbook على عشرة خوادم أمر سهل. أما تشغيل نفس الـ playbook على عشرة آلاف خادم — عبر مراكز بيانات متعددة وحسابات سحابية وقطاعات شبكة مختلفة، ضمن قيود نوافذ التغيير الصارمة — فهي مشكلة هندسية مختلفة جوهريًا. يتناول هذا الدرس الاستراتيجيات ومعاملات الضبط والأدوات التي تميّز إعداد Ansible الهاوي عن منصة أتمتة أسطول احترافية في بيئة الإنتاج.
فهم Forks: التوازي في Ansible
بشكل افتراضي، يعالج Ansible 5 خوادم فقط بالتوازي (إعداد forks). هذا الإعداد الافتراضي متحفظ عمدًا وغير مناسب لمعظم الأساطيل في بيئة الإنتاج. تتحكم الـ forks في عدد اتصالات SSH التي يفتحها عقدة التحكم في وقت واحد.
ثلاثة إعدادات تحقق أكبر تأثير على نطاق واسع:
forks— ارفعه إلى 50-200 لأساطيل السحابة. السقف العملي هو حد الملفات المفتوحة (ulimit -n) والذاكرة المتاحة (~10 MB لكل fork).pipelining = True— يجمع رفع الوحدة وتنفيذها في استدعاء SSH واحد بدلًا من ثلاثة. على playbook بـ 500 خادم يمكن أن يوفر 30-40% من وقت التشغيل.fact_caching— يتجنب إعادة تشغيل مهمةgather_factsفي كل تشغيل. مع Redis، تبقى الحقائق محتفظة بها بين التشغيلات لمدةfact_caching_timeoutثانية.
استراتيجيات التنفيذ
يأتي Ansible بثلاث استراتيجيات تنفيذ مدمجة تغيّر كيفية توزيع المهام عبر الخوادم.
max_fail_percentage: 0 للنشر الذي لا يتسامح مع أي فشل. استخدم قائمة serial متدرجة لاختبار دفعة صغيرة أولًا قبل التطبيق على بقية الأسطول.AWX وAnsible Automation Platform (Controller)
سير عمل ansible-playbook من سطر الأوامر لا يتوسع تنظيميًا. من شغّل آخر playbook؟ على أي خوادم؟ بأي متغيرات؟ هل نجح؟ هل يمكن لمهندس غير متخصص تشغيله بأمان؟ هذه الأسئلة بلا إجابات دون مستوى تحكم. هذا المستوى هو AWX (المصدر المفتوح) أو Red Hat Ansible Automation Platform / Automation Controller (المنتج المؤسسي).
الإمكانات الرئيسية التي يضيفها AWX على سطر الأوامر:
- RBAC — الفرق تحصل على صلاحيات لـ job templates محددة، لا وصول Shell لعقدة التحكم.
- إدارة بيانات الاعتماد — مفاتيح SSH وكلمات مرور Vault وبيانات السحابة مخزنة مشفرة في قاعدة بيانات AWX؛ لا تُكشف للمشغلين.
- Job templates — مجموعة مسمّاة وموثّقة من: playbook + inventory + credentials + متغيرات. أي شخص يملك الصلاحية يمكنه تشغيلها دون معرفة CLI.
- Surveys — نماذج ويب تطلب من المشغل إدخال متغيرات (مثل البيئة المستهدفة أو الإصدار) قبل تشغيل job. حقن متغيرات آمن وقابل للتدقيق.
- Workflow job templates — رسوم بيانية موجّهة (DAGs) من job templates: "شغّل التصلب، ثم النشر، ثم اختبارات الدخان؛ إذا فشلت الاختبارات، شغّل الاسترداد."
- سجل التدقيق — كل job يحفظ stdout الكامل والمستخدم الذي أطلقه والطوابع الزمنية والنتيجة. ضروري للامتثال (SOC 2، PCI-DSS).
- الجدولة — تنفيذ مدفوع بـ cron لتطبيق الامتثال الليلي.
الـ Inventory الديناميكي على نطاق واسع
ملفات inventory/hosts.ini الثابتة لا يمكن صيانتها بعد عشرات الخوادم. على نطاق واسع، يجب سحب الـ inventory ديناميكيًا من مصدر الحقيقة — مزود السحابة أو CMDB أو سجل الخدمات.
متى يكون Ansible الأداة الخاطئة: البنية التحتية الثابتة
يتميز Ansible في تهيئة الخوادم القابلة للتعديل — الأجهزة التي تعيش طويلًا بما يكفي لتستحق إدارة مستمرة. لكن الاتجاه الحديث في السحابة هو البنية التحتية الثابتة (Immutable Infrastructure): بناء صورة جهاز مرة واحدة ونشرها، ثم استبدالها بدلًا من تعديلها عند الحاجة للتغيير.
استخدم Ansible لإدارة الإعدادات عندما:
- تدير VMs طويلة العمر (خوادم قواعد البيانات، العقد القديمة، الخوادم المادية).
- وقت التشغيل مهم وبناء AMI جديدة لكل تغيير بطيء جدًا.
- لا يمكن استبدال النظام دون ترحيل بيانات (الخدمات ذات الحالة).
فضّل الصور الثابتة (Packer + Ansible، Docker، AMI-based ASG) عندما:
- تشغّل طبقات تطبيق بلا حالة — خوادم ويب، عقد API، workers.
- تريد سلوكًا متطابقًا في بيئة التطوير والاختبار والإنتاج (الصورة هي القطعة الفنية).
- نموذج تهديدك يتطلب خوادم إنتاج بلا وصول SSH كليًا.
- تستخدم بالفعل Kubernetes أو ECS — الحاويات هي الوحدة الثابتة؛ إعداد المضيف ضئيل.
ansible-playbook دون بوابة إدارة تغيير في الإنتاج. يمكن لـ playbook غير مختبر أن يُطلق على آلاف الخوادم في ثوانٍ. اختبر دومًا على مجموعة inventory للاختبار أولًا، استخدم --check (تشغيل جاف) و--diff لمعاينة التغييرات، وقيّد صلاحيات إطلاق job templates الإنتاجية لكبار المهندسين أو اشترط موافقة ثانية في AWX.تحليل الأداء
عندما يكون playbook كبير بطيئًا، قِسه قبل الضبط العشوائي. إضافتا profile_tasks وprofile_roles callback تُشحن مع Ansible ولا تُضيف أي تكلفة في التشغيل العادي.
على نطاق التقنية الكبيرة، يُعتمد إضافة Mitogen على نطاق واسع لتحسينها الجذري في السرعة. تستبدل SSH ثم Shell ثم تشغيل Python bootstrap بقناة Python مستمرة داخل العملية، مما يخفض تكلفة كل مهمة لكل خادم من ~200 ملّيثانية إلى ~5 ملّيثانية. المقايضة هي اعتمادية إضافية وتعارضات عرضية مع وحدات المجتمع التي تستخدم Python غير اعتيادية — دائمًا اختبر في بيئة الاختبار أولًا.