הגדרה ופריסה
(סעיף: טכנולוגיה ותשתיות)
תקציר
Ansible היא תצורה הצהרתית וכלי תזמור אידיאלי לתצורה חוזרת של VMs/מארחים, שירותים ויישומים כאשר התשתית כבר נוצרה (Terraform/IAC) ואתה צריך ”להחיות” את הסביבה: להתקין חבילות, לגלגל את השחרור, לגלגל תבניות, לשקם שירותים ללא הפסקה, ליישם מדיניות אבטחה. מפתח להצלחה: מבנה מודולרי (תפקידים/אוספים), אידמפוטנטיות קפדנית, עבודה מסודרת עם סודות (Vault), מלאי דינמי, בדיקות ודיסציפלינות GitOps.
מתי הוא Anable מתאים (ואיך זה מתאים עם Terraform)
Terraform - יוצר משאבים (VPC, אשכולות, מסדי נתונים).
Ansible - הגדרות מערכת ההפעלה/תוכנה, מגלגל גרסאות, מניע נדודים, עורך קבצים ושירותים.
קישור: תפוקות Terraform 'מלאי '/IP/סודות לחפצים, Ansible קורא אותם בצעד תקליטור.
מבנה המאגר (תבנית מומלצת)
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' role (שברים):
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 תבניות ומשתנים
אחסן משתני ברירת מחדל ברירות מחדל/ראשי. כן, רגיש בכספת.
השתמש במסננים (”| 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 }};
}
}
}
סודות: כספת סודית ומנהלים סודיים
כספת להצפנת קבצים משתנים ("group _ vars/all. כספת. yml').
עדיף לקרוא סודות ממנהלים חיצוניים (KMS/Secrets Manager/SSM) דרך המודולים המתאימים ולאחסן רק קישורים/ARN בכספת.
yaml group_vars/all. vault. yml (ansible-vault encrypted)
webapp_db_password: "..."
jwt_signing_key: "..."
המלצות:
- גישה משותפת: המפתחים רואים dev/stage, prod - רק CI.
- אפשר סיבוב סודי וביקורת גישה.
אידמפוטנטיות ושינויים נכונים
השתמש במודולים ("חבילה", "משתמש", "lineinfile", "תבנית", "systemd') במקום" מעטפת/פקודה ".
מארק "רועש" משימות "השתנה _ כאשר: כוזב אם הם לא משנים דבר.
מצב סימון תמיכה (”- - check”) ודיפ לתפקידים.
למשימות לא יציבות: ”חזרה”, ”עיכוב”, ”עד”.
yaml
- name: Wait for HTTP uri availability:
url: "http://localhost/health"
status_code: 200 register: health retries: 10 delay: 5 until: health. status == 200
ביצועים: חוות גדולות ופסגות
מזלגות: להעלות במקביל (זהירות: לא להעמיס יעד).
אסטרטגיה = משימות ללא ביצוע ללא המתנה לשכנים.
הצנרת = ממש בלתי הפיך. Cfg 'מפחית RTT.
gather_facts: עובדות כוזבות אינן נחוצות.
אסינק/סקר למבצעים ארוכי טווח; מצערת/סדרתי לפרוס גלים.
delegate_to run_once לפעולות בודדות (למשל, נדידת מסדי נתונים).
אפס דפוסי זמן השבתה
פריסה מתגלגלת (20% כל אחד)
yaml
- hosts: web serial: "20%"
max_fail_percentage: 10 roles: [webapp]
קנרית
הפעל את ספר המהלכים עם '- limit web-canary' (תת-קבוצה של הקבוצה), בדוק את המדדים, ולאחר מכן גלגל החוצה לכל הקבוצה.
כחול-ירוק
שתי קבוצות מארחים "web _ blue 'ו-" web _ green "; להכין גל חדש עם ספר משחקים, ואז לעבור תנועה (DNS/LB) עם 'המשימה הקהילתית. גנרל. affiliate_lb'/API המאזן שלך.
ביטחון והתקשות
תפקיד מקשה: מדיניות SSH, כרזות, 'סודו' ללא NOPASWD, חומת אש, שמע/רסילוג, זמן NTP, 'כשל'.
אפשר SELinux/AppArmor, מנהל מדיניות באמצעות מודולים.
Bastion: הגבלת SSH למטרות באמצעות מנחה קפיצה בלבד (ראה ”ProxyJump”).
למזער ”להיות: אמיתי”; לצייר RBAC ברמת המלאי (מי יכול להפעיל אילו ספרי משחק).
חלונות וחומרת רשת
חלונות: מודולים ”win _”, חיבור WinRM, תסריטי PowerShell - כטיעון האחרון.
רשת: ”network _ cli ”/” httpapi”, מודולים עבור Cisco/Juniper/F5; אטומיטי באמצעות 'להציל _ כאשר: השתנה'.
בדיקה ואיכות
מוך אנטי + יאמלינט CI.
מולקולה: בדיקות תפקידים מקומיות/מכולות, בדיקת אידמפוטנטיות (ריצה כפולה ללא שינוי).
ארגז חול: רשימת מלאי זמנית של VM/תמונות.
yaml provisioner:
name: ansible verifier:
name: ansible scenario:
name: default
אינטגרציה עם CI/CD ו GitOps
קו צינור טיפוסי:1. Syntax Syntax לבדוק את המולקולה.
2. בניית חפצי יישום.
3. פריסה: "Ansible-playbook - i מלאי/prod אתר. 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
תצפית וביקורת חשבונות
חבר תוסף callback (json/yaml/timer/profile_tasks) - דיווחים על זמן ושינויים.
שמור יומני משחק לאחסון מרוכז.
תגי תווית: "משימות לריצות סלקטיביות וזירוז חקירות.
מתכונים תכופים עבור iGaming
צומת Web/API: Nginx + systemd-unit, בדיקות בריאות, סודות מהמנהל, הפעלה מחדש.
שירותי משחק: הגדרות תבניות על ידי אזור/דיירים באמצעות 'group _ vars'.
מחברים תשלום: אלה קפדניים עבור מפתחות, להפעיל מחדש על ידי להודיע, לאחר בדיקה של נקודות קצה.
עבודות ETL: פריסת תסריטי CronJob עם 'cron' מודול, קובץ מנעול idempotent.
ניטור: התקנת סוכנים (node_exporter/otelcol), רישום אוטומטי בניטור.
Antipatterns
משתמש ב ”מעטפת/פקודה” היכן שיש מודול.
חוברות משחקים ללא ”מפעילים”.
מאחסן סודות בפומבי 'group _ vars'.
היעדר 'serial '/' max _ fall _ אחוז' during גל ייצור דלדול.
Global 'לאסוף _ עובדות: נכון' ו 'להיות: נכון' שלא לצורך.
תפקידים בלי מבחני מולקולה ובלי תמיכה.
פקודות ארוכות בלי ”אסינק/סקר” חוסמות את כל הגל.
רשימת יישומים
1. מסכים על מסגרת המאגר ומוסכמות שמות.
2. הגדרת מלאי דינמי ובסיס.
3. צור תפקידים (webapp/hardening/neuter) וגרסאות סיכות של אוספים.
4. אפשר כספת ו/או אינטגרציה עם המנהל הסודי.
5. ודא אידמפוטנטיות, '- צ' ק/- diff ', מפעילים ותגים.
6. לחבר מוך-קצה, יאמלינט, מולקולה למודיעה.
7. תאר את תבנית הפריסה (גלגול/קנרית/כחול-ירוק) ואת גבולות ה ”סריאל”.
8. הוסף תוספי קריאה לאחור, אוסף רישומים, דוח שינוי.
9. מסמכי גלגול חשבונות ופעולות תקרית.
10. יום משחק קבוע: הפסקת SSH, צומת טיפה, גירסה רולבק.
תוצאות
ניתן לסגור את ”הקילומטר האחרון” בין התשתית שנוצרה לבין המכירות שפועלות: שינויים מהירים, מאובטחים וצפויים לתצורות ולשחרורים. עם תפקיד כיחידת שימוש חוזר מינימלי, מלאי דינמי, טיפול סודי נכון, ודפוסי אפס-השבתה מאומתים, Ansible עוזר לצוותי iGaming להפחית זמן-לפרוס, להפחית תקריות לילה, ולשמור p99 ברמת SLO.