غير قابل للنشر: التشكيل والنشر
(القسم: التكنولوجيا والهياكل الأساسية)
موجز موجز
Ansible هو تكوين إعلاني وأداة تنسيق مثالية للتكوين المتكرر لـ VMs/المضيفين والخدمات والتطبيقات عندما تكون البنية التحتية قد تم إنشاؤها بالفعل (Terraform/IaC) وتحتاج إلى «إحياء» البيئة: تثبيت الحزم، وطرح الإصدار، وطرح القوالب، وإعادة تشغيل الخدمات دون توقف، تطبيق السياسات الأمنية. مفتاح النجاح: الهيكل المعياري (الأدوار/المجموعات)، التطرف الصارم، العمل الأنيق مع الأسرار (Vault)، المخزون الديناميكي، الاختبار وانضباط GitOps.
متى يكون Ansible مناسبًا (وكيف يتناسب مع Terraform)
Terraform - يخلق الموارد (VPC، المجموعات، قواعد البيانات).
Ansible - يقوم بتكوين نظام التشغيل/البرنامج، ويطرح الإصدارات، ويقود عمليات الترحيل، ويحرر الملفات والخدمات.
الرابط: مخرجات Terraform «جرد »/IP/أسرار القطع الأثرية، يقرأها Ansible في خطوة CD.
هيكل المستودع (نموذج موصى به)
ansible/
inventories/
prod/
inventory. ini # or inventory. yaml group_vars/
all. yml web. yml db. yml host_vars/
web-01. yml stage/
...
roles/
webapp/
defaults/main. yml vars/main. yml tasks/main. yml handlers/main. yml templates/.j2 files/
meta/main. yml hardening/
...
playbooks/
site. yml deploy_webapp. yml hardening. yml collections/requirements. yml ansible. cfg
غير مقبول. cfg (الحد الأدنى):
ini
[defaults]
inventory = inventories/stage/inventory. ini stdout_callback = yaml callbacks_enabled = timer, profile_tasks interpreter_python = auto retry_files_enabled = False forks = 25 host_key_checking = True
قوائم الجرد: ثابتة ودينامية
ثابت (ini):ini
[web]
web-01 ansible_host=10. 0. 1. 10 web-02 ansible_host=10. 0. 1. 11
[db]
db-01 ansible_host=10. 0. 2. 10
[all:vars]
ansible_user=ansible ansible_ssh_common_args='-o ProxyJump=bastion@1. 2. 3. 4'
ديناميكي
استخدم الملحقات السحابية (أو النص الخاص بك) لوضع علامة على المضيفين. متغيرات البيئة/العلامات → 'group _ vars'.
الأدوار والمجموعات
الدور = وحدة إعادة الاستخدام المستقلة (المهام والملفات والنماذج والمعالجات).
المجموعات - مجموعة من الأدوار/الملحقات/الوحدات. أصلح دبابيس الإصدار في مجموعات/متطلبات. yml'.
yaml collections/requirements. yml collections:
- name: community. general version: ">=8. 0. 0,<9. 0. 0"
- name: ansible. posix
كتب اللعب: نصوص غبية
مثال على كتاب قواعد اللعبة العام:yaml playbooks/site. yml
- hosts: all gather_facts: true become: true roles:
- hardening
- hosts: web become: true roles:
- webapp
دور «Webapp» (شظايا):
yaml roles/webapp/tasks/main. yml
- name: Install packages:
name: ["nginx", "python3-venv"]
state: present
- name: Template configuration template:
src: nginx. conf. j2 dest: /etc/nginx/nginx. conf mode: "0644"
notify: Restart nginx
- name: unarchive artifact deploy:
src: "{{ webapp_package_url }}" # артефакт из CI dest: /opt/webapp remote_src: true creates: /opt/webapp/current
- name: Link to the current version of file:
src: "/opt/webapp/releases/{{ release_id }}"
dest: /opt/webapp/current state: link notify: Reload webapp
المتعاملون:
yaml roles/webapp/handlers/main. yml
- name: Restart nginx service: { name: nginx, state: restarted }
- name: Reload webapp systemd: { name: webapp, state: reloaded, daemon_reload: true }
Jinja2 القوالب والمتغيرات
تخزين المتغيرات الافتراضية في 'الافتراضات/الرئيسية. yml'، حساس - في Vault.
استخدم المرشحات («| to_nice_yaml',' | b64code»، «الافتراضي |») و «متى» الظروف.
jinja2 worker_processes auto;
http {
server {
listen 80;
server_name {{ inventory_hostname }};
location / {
proxy_pass http://127. 0. 0. 1:{{ webapp_port }};
}
}
}
الأسرار: Ansible Vault and Secret Managers
خزنة لتشفير الملفات المتغيرة ('group _ vars/all. قبو. yml').
من الأفضل قراءة الأسرار من المديرين الخارجيين (KMS/Secrets Manager/SSM) من خلال الوحدات المقابلة وتخزين الروابط/ARN فقط في Vault.
yaml group_vars/all. vault. yml (ansible-vault encrypted)
webapp_db_password: "..."
jwt_signing_key: "..."
التوصيات:
- الوصول إلى المشاركة: يرى المطورون التطوير/المرحلة، الدفع - فقط CI.
- تمكين التناوب السري وتدقيق الوصول.
الخصوصية والتغييرات الصحيحة
استخدم وحدات («حزمة»، «مستخدم»، «lineinfile»، «قالب»، «نظام») بدلاً من «غلاف/أمر».
علامة المهام «الصاخبة» «تغيرت _ عندما: خاطئة» إذا لم يغيروا أي شيء.
وضع فحص الدعم ('--check') و diff للأدوار.
بالنسبة للمهام غير المستقرة: «retries» و «disary» و «to».
yaml
- name: Wait for HTTP uri availability:
url: "http://localhost/health"
status_code: 200 register: health retries: 10 delay: 5 until: health. status == 200
الأداء: مزارع وقمم كبيرة
الشوك: رفع التزامن (تحذير: لا تفرط في تحميل الهدف).
الاستراتيجية = التنفيذ الحر للمهام دون انتظار الجيران.
pipelining = True в 'anansible. cfg 'يقلل RTT.
gather_facts: كاذبة حيث الحقائق غير ضرورية.
واستطلاعات الرأي للعمليات الطويلة الأجل ؛ خانق/مسلسل لنشر الموجات.
delegate_to run_once لإجراءات فردية (مثل نقل قاعدة البيانات).
صفر أنماط التوقف
Rolling Pospoy (20٪ لكل منهما)
yaml
- hosts: web serial: "20%"
max_fail_percentage: 10 roles: [webapp]
كناري
قم بتشغيل كتاب اللعب باستخدام «-- limit web-canary» (مجموعة فرعية من المجموعة)، وتحقق من المقاييس، ثم طرحها على المجموعة بأكملها.
أزرق أخضر
مجموعتان مضيفتان «ويب _ أزرق» و «ويب _ أخضر» ؛ قم بإعداد موجة جديدة مع كتاب قواعد اللعبة، ثم قم بتبديل حركة المرور (DNS/LB) مع «مهمة المجتمع». عامة. affiliate_lb'/API رصيدك.
الأمن والتشدد
دور التصلب: سياسات SSH، اللافتات، «sudo» بدون NOPASSWD، جدار الحماية، auditd/rsyslog، time-NTP، «fail2ban».
مكّن SELinux/AppArmor، وإدارة السياسات من خلال الوحدات.
معقل: قصر SSH على الأهداف عبر مضيف القفز فقط (انظر «ProxyJump»).
التقليل إلى أدنى حد من «أن تصبح: حقيقية» ؛ وضع RBAC على مستوى المخزون (من يمكنه تشغيل كتب اللعب).
ويندوز وأجهزة الشبكة
Windows: الوحدات «win _»، اتصال WinRM، نصوص PowerShell - كحجة أخيرة.
الشبكة: 'network _ cli '/' httpapi'، وحدات Cisco/Juniper/F5 ؛ الذرة عبر «حفظ _ عندما: تغير».
الاختبار والجودة
ansible-lint + yamllint в CI.
الجزيء: اختبارات دور المحلية/الحاوية، فحص الخصوصية (تشغيل مزدوج دون تغيير).
صندوق الرمل: مخزون/صور مؤقتة فردية VM.
yaml provisioner:
name: ansible verifier:
name: ansible scenario:
name: default
التكامل مع CI/CD و GitOps
خط الأنابيب النموذجي:1. Lint → Syntax check → Molecule.
2. القطع الأثرية لتطبيق البناء.
3. انشر: 'anansible-playbook -i instruction/prod site. yml -limit web -- نشر العلامات '.
4. تقرير عن المضيفين المتغيرين، قطعة أثرية من جذوع الأشجار.
خطوة (مفهوم) مثال:bash ansible-galaxy collection install -r collections/requirements. yml ansible-lint ansible-playbook playbooks/deploy_webapp. yml \
-i inventories/prod/inventory. ini \
-e release_id=${GIT_SHA} --diff
إمكانية الملاحظة ومراجعة الحسابات
اتصل بإضافات إعادة الاتصال (json/yaml/timer/profile_tasks) - تقارير عن الوقت والتغييرات.
احفظ سجلات قواعد اللعبة للتخزين المركزي.
علامات التسمية: مهام التشغيل الانتقائي وتسريع التحقيقات.
وصفات متكررة للألعاب
عقدة الويب/واجهة برمجة التطبيقات: وحدة نظام Nginx +، الفحوصات الصحية، أسرار المدير، إعادة التشغيل.
خدمات اللعبة: قوالب التهيئة حسب المنطقة/المستأجرين عبر "group _ vars'.
موصلات الدفع: صارمة للمفاتيح، إعادة التشغيل عن طريق الإخطار، بعد التحقق من نقاط النهاية.
وظائف ETL: نشر نصوص CronJob مع وحدة «cron»، ملف قفل غبي.
الرصد: تركيب عوامل (node_exporter/otelcol)، التسجيل التلقائي في الرصد.
Antipatterns
باستخدام «غلاف/أمر» حيث توجد وحدة.
كتب اللعب بدون «معالجين» → عمليات إعادة تشغيل غير ضرورية ونفخ الخدمة.
تخزين الأسرار في "المجموعة _ vars' العامة.
غياب «serial »/« max _ fail _ centre» أثناء استنفاد موجة الإنتاج.
«جمع _ حقائق عالمية: حقيقية» و «تصبح: حقيقية» دون داع.
أدوار بدون اختبارات الجزيء وبدون دعم '-check'.
أوامر طويلة بدون "async/poll' تمنع الموجة بأكملها.
قائمة التنفيذ المرجعية
1. الاتفاق على إطار المستودع واتفاقيات التسمية.
2. قم بتهيئة المخزون الديناميكي والمعقل.
3. إنشاء أدوار (webapp/تصلب/رصد) ونسخ دبوس من المجموعات.
4. تمكين قبو و/أو التكامل مع المدير السري.
5. تأكد من الخصوصية، «-- check/-diff»، المعالجات والعلامات.
6. قم بتوصيل وبر ansible-lint، yamllint، Molecule to CI.
7. وصف نمط الانتشار (rolling/canary/blue-green) والحدود «serial».
8. أضف ملحقات إعادة الاتصال، جمع السجلات، تقرير التغيير.
9. دفاتر تشغيل الوثائق وإجراءات الحوادث.
10. عقد بانتظام يوم اللعبة: كسر SSH، إسقاط العقدة، تراجع الإصدار.
النتائج
يغلق Ansible «الميل الأخير» بين البنية التحتية التي تم إنشاؤها والمبيعات التي تعمل: تغييرات سريعة وآمنة ويمكن التنبؤ بها في التكوينات والإصدارات. مع دور كوحدة إعادة الاستخدام الدنيا، والمخزون الديناميكي، والتعامل السري الصحيح، وأنماط التوقف الصفري التي تم التحقق منها، تساعد Ansible فرق iGaming على تقليل وقت النشر، وتقليل الحوادث الليلية، والحفاظ على p99 على مستوى SLO.