غیر ممکن: پیکربندی و استقرار
(بخش: تکنولوژی و زیرساخت)
خلاصه ای کوتاه
Ansible یک ابزار پیکربندی اعلانی و ارکستراسیون ایده آل برای پیکربندی مکرر VM ها/میزبان ها، خدمات و برنامه های کاربردی است که زیرساخت ها از قبل ایجاد شده اند (Terraform/IaC) و شما باید محیط را «احیا» کنید: نصب بسته ها، انتشار نسخه، پخش قالب ها، راه اندازی مجدد خدمات بدون خرابی، اعمال سیاست های امنیتی. کلید موفقیت: ساختار مدولار (نقش/مجموعه)، idempointence سخت، کار شسته و رفته با اسرار (خرک)، موجودی پویا، تست و نظم و انضباط GitOps.
هنگامی که Ansible مناسب است (و چگونه آن را با Terraform مناسب)
Terraform - ایجاد منابع (VPC، خوشه ها، پایگاه داده ها).
Ansible - سیستم عامل/نرم افزار را پیکربندی می کند، نسخه ها را رول می کند، مهاجرت ها را هدایت می کند، فایل ها و خدمات را ویرایش می کند.
لینک: خروجی Terraform 'inventory '/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'
دینامیک
از پلاگین های ابر (یا اسکریپت خود) برای برچسب زدن میزبان استفاده کنید. Environment/tag variables → 'group _ vars'.
نقش ها و مجموعه ها
نقش = ماژول استفاده مجدد مستقل (وظایف، فایل ها، قالب ها، گرداننده ها).
Collections - مجموعه ای از نقش ها/پلاگین ها/ماژول ها. پین های نسخه را در 'collections/requirements اصلاح کنید. YL '.
yaml collections/requirements. yml collections:
- name: community. general version: ">=8. 0. 0,<9. 0. 0"
- name: ansible. posix
کتاب های بازی: اسکریپت های Idempotent
نمونه ای از یک playbook: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 قالب ها و متغیرها
متغیرهای پیشفرض را در "پیشفرض/اصلی ذخیره کنید. yml '، حساس - در طاق.
استفاده از فیلترها («| 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 }};
}
}
}
دانلود بازی Secrets: Ansible Vault and Secret Manager برای کامپیوتر
خرک برای رمزگذاری پروندههای متغیر) "group _ vars/all. طاق. YL ').
بهتر است اسرار مدیران خارجی (KMS/Secrets Manager/SSM) را از طریق ماژول های مربوطه بخوانید و فقط لینک ها/ARN را در Vault ذخیره کنید.
yaml group_vars/all. vault. yml (ansible-vault encrypted)
webapp_db_password: "..."
jwt_signing_key: "..."
توصیه ها:
- دسترسی به اشتراک بگذارید: توسعه دهندگان dev/stage, prod - only CI.
- فعال کردن چرخش مخفی و حسابرسی دسترسی.
عدم توانایی و تغییرات صحیح
استفاده از ماژولها ('package', 'user', 'lineinfile', 'template', 'systemd') به جای «shell/command».
علامت گذاری به عنوان «پر سر و صدا» tasks 'changed _ when: false' if آنها چیزی را تغییر نمی دهند.
حالت بررسی پشتیبانی («--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
عملکرد: مزارع بزرگ و قله
فورک ها: همزمانی را بالا ببرید (احتیاط: هدف را اضافه بار نکنید).
استراتژی = اجرای آزاد وظایف بدون انتظار برای همسایگان.
pipelining = в واقعی 'ansible. CFG 'RTT را کاهش می دهد.
gather_facts: نادرست که در آن حقایق غیر ضروری است.
async/نظرسنجی برای عملیات طولانی مدت ؛ دریچه گاز/سریال برای استقرار امواج.
delegate_to و run_once برای اقدامات واحد (به عنوان مثال، مهاجرت پایگاه داده).
الگوهای خرابی صفر
نورد استقرار (هر 20٪)
yaml
- hosts: web serial: "20%"
max_fail_percentage: 10 roles: [webapp]
قناری
playbook را با «-limit web-canary» (زیر مجموعه ای از گروه) اجرا کنید، معیارها را بررسی کنید، سپس به کل گروه بروید.
آبی سبز
دو گروه میزبان 'web _ blue' و 'web _ green'; یک موج جدید را با playbook آماده کنید، سپس ترافیک (DNS/LB) را با «وظیفه جامعه» تغییر دهید. ژنرال. تعادل دهنده خود را affiliate_lb'/API کنید
امنیت و سخت شدن
نقش سخت: سیاست های SSH، آگهی ها، sudo بدون NOPASSWD، فایروال، auditd/rsyslog، زمان NTP، fail2ban.
SELinux/AppArmor را فعال کنید، سیاست ها را از طریق ماژول ها مدیریت کنید.
Bastion: محدود کردن SSH به اهداف تنها از طریق میزبان پرش (نگاه کنید به 'ProxyJump').
به حداقل رساندن «تبدیل شدن: درست» ؛ ترسیم RBAC در سطح موجودی (چه کسی می تواند کدام playbooks را اجرا کند).
ویندوز و سخت افزار شبکه
ویندوز: ماژول های 'win _'، اتصال WinRM، اسکریپت های PowerShell - به عنوان آخرین آرگومان.
شبکه: 'network _ cli '/' httpapi'، ماژولهایی برای Cisco/Juniper/F5 ؛ atomicity از طریق save _ when: changed.
تست و کیفیت
ansible-lint + yamllint в CI.
مولکول: تست نقش محلی/ظرف، بررسی توانایی (دو بار بدون تغییر).
Sandbox: موجودی/تصاویر موقت VM فردی.
yaml provisioner:
name: ansible verifier:
name: ansible scenario:
name: default
ادغام با CI/CD و GitOps
خط لوله معمولی:1. Lint → Syntax check → مولکول.
2. مصنوعات کاربردی ساختمان.
3. استقرار: 'ansible-playbook -i موجودی/سایت تولید. yml --limit web --tags deploy '.
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) - گزارش در زمان و تغییرات.
ذخیره سیاهههای مربوط به playbook به ذخیره سازی متمرکز.
برچسب 'برچسب ها:' وظایف برای اجرای انتخابی و تسریع تحقیقات.
دستور العمل های مکرر برای iGaming
گره وب/API: Nginx + systemd-unit، بررسی سلامت، اسرار از مدیر، راه اندازی مجدد رول.
خدمات بازی: پیکربندی قالب ها بر اساس منطقه/مستاجران از طریق 'group _ vars'.
اتصالات پرداخت: آنهایی که سخت برای کلید، راه اندازی مجدد با اطلاع، پس از چک از endpoints.
مشاغل ETL: استقرار اسکریپت CronJob با ماژول «کرون»، فایل قفل idempotent.
نظارت: نصب و راه اندازی عوامل (node_exporter/otelcol)، خودکار ثبت نام در نظارت.
ضد ضربه
با استفاده از «shell/command» که در آن یک ماژول وجود دارد.
Playbooks without «handlers» → راه اندازی مجدد غیر ضروری و jitter سرویس.
ذخیره اسرار در «group _ vars» عمومی.
عدم وجود 'سریال '/' max _ fail _ percentage' during production wave depletion.
جهانی «جمع آوری _ حقایق: درست» و «تبدیل شدن به: درست» غیر ضروری است.
نقش بدون آزمایش مولکول و بدون پشتیبانی «--check».
دستورات طولانی بدون «async/poll» کل موج را مسدود می کند.
چک لیست پیاده سازی
1. در مورد چارچوب مخزن و قراردادهای نامگذاری توافق کنید.
2. پیکربندی موجودی پویا و سنگر.
3. ایجاد نقش ها (webapp/hardening/monitoring) و نسخه های پین مجموعه ها.
4. Vault و/یا ادغام با مدیر مخفی را فعال کنید.
5. اطمینان از idempotency، «- - چک/- - diff»، گرداننده ها و برچسب ها.
6. اتصال ansible-lint، yamllint، مولکول به CI.
7. الگوی استقرار (نورد/قناری/آبی سبز) و محدودیت های «سری» را توصیف کنید.
8. اضافه کردن پلاگین مخاطبین، مجموعه ورود به سیستم، تغییر گزارش.
9. سند رولبک و اقدامات حادثه.
10. به طور منظم روز بازی را نگه دارید: شکستن SSH، رها کردن گره، نسخه برگشت.
نتایج به دست آمده
Ansible «آخرین مایل» را بین زیرساخت های ایجاد شده و فروش که کار می کند، می بندد: تغییرات سریع، ایمن و قابل پیش بینی در تنظیمات و انتشار. با نقش به عنوان یک واحد استفاده مجدد حداقل، موجودی پویا، دست زدن به راز درست، و الگوهای صفر خرابی تایید شده، Ansible کمک می کند تا تیم های iGaming کاهش زمان به استقرار، کاهش حوادث شب، و نگه داشتن P99 در سطح SLO.