Ansible: конфигуратсия ва густариш
(Қисм: Технология ва инфрасохтор)
Хулосаи мухтасар
Ansible воситаи конфигуратсияи декларативӣ ва оркестрӣ мебошад, ки барои конфигуратсияи такрории VM/ҳостҳо, хидматҳо ва барномаҳое, ки инфрасохтор аллакай сохта шудааст (Terraform/IA), беҳтарин аст ва ба шумо лозим аст, ки муҳитро "эҳё" кунед: бастаҳо насб кунед, релизро паҳн кунед, қолибҳоро паҳн кунед, хидматҳоро бидуни вақти корӣ оғоз кунед, сиёсати амниятро татбиқ кунед. Калиди муваффақият: сохтори модулӣ (нақшҳо/маҷмӯаҳо), idempotence қатъӣ, кори тозаву озода бо асрори (Vault), инвентаризатсияи динамикӣ, санҷиш ва интизоми Git
Кай Ansible мувофиқ аст (ва он чӣ гуна бо Terraform мувофиқат мекунад)
Terraform - захираҳо эҷод мекунад (VPC, кластерҳо, пойгоҳи додаҳо).
Ansible - OS/нармафзорро танзим мекунад, версияҳоро паҳн мекунад, муҳоҷиратро таҳрир мекунад, файлҳо ва хидматҳоро таҳрир мекунад.
Истинод: 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
ansible. 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
Китобҳои бозӣ: Скриптҳои Idempotent
Намунаи китоби умумии бозӣ: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 ', ҳассос - дар 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 ва махфӣ
Vault барои рамзгузории файлҳои тағйирёбанда ('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: "..."
Тавсияҳо:
- Дастрасии мубодила: таҳиягарон дев/марҳила, prod - танҳо CI-ро мебинанд.
- Фаъол кардани гардиши махфӣ ва аудити дастрасӣ.
Номутобиқатӣ ва тағиротҳои дуруст
Модулҳоро ('баста', 'корбар', 'lineinfile', 'shaplate', 'systemd') ба ҷои 'shell/command' истифода баред.
Вазифаҳои "ғавғо" -ро тағир диҳед _ вақте ки: 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
Иҷро: Хоҷагиҳои калон ва қуллаҳо
ғилдиракчаҳо: баланд бардоштани мувофиқат (эҳтиёт: ҳадафи изофаборро напартоед).
стратегия = Вазифаҳои озодро бидуни интизории ҳамсояҳо иҷро кунед.
лӯлаи = Ҳақиқӣ v 'ansible. cfg 'РТТ-ро коҳиш медиҳад.
gather_facts: дурӯғ, ки далелҳо нолозиманд.
async/пурсиш барои амалиёти дарозмуддат; дроссель/сериал барои ҷойгиркунии мавҷҳо.
delegate_to ва run_once барои амалҳои ягона (масалан, муҳоҷирати пойгоҳи додаҳо).
Намунаҳои пастшавии сифр
Ҷойгиркунии Rolling (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, баннерҳо, 'sudo' бе NOPASSWD, firewall, auditd/rsyslog, time-NTP, 'fail2ban'.
Даргиронидани SEL .inux/App-Armor, идоракунии сиёсатҳо тавассути модулҳо.
Bastion: SSH-ро ба ҳадафҳо танҳо тавассути мизбон-секунҷа маҳдуд кунед (нигаред ба 'Proxy' Jump ').
Кам кардани 'шудан: ҳақиқӣ'; тартиб додани RBAC дар сатҳи инвентаризатсия (ки метавонад кадом дафтарҳои бозиро идора кунад).
Windows ва сахтафзорҳои шабакавӣ
Windows: модулҳои 'win _', пайвасти Win
Шабака: 'network _ cli '/' httpapi', модулҳо барои Cisco/Juniper/F5; атомизм тавассути 'захира _ вақте: тағир ёфт'.
Озмоиш ва сифат
ansible-lint + yamllint в CI.
Молекула: санҷишҳои нақши маҳаллӣ/контейнер, санҷиши idempotency (дучандон бетағйир).
Қуттии қуттӣ: инвентаризатсияи/тасвирҳои муваққатии VM.
yaml provisioner:
name: ansible verifier:
name: ansible scenario:
name: default
Ҳамгироӣ бо CI/CD ва GIT
Лӯлаи маъмулӣ:1. Lint → Санҷиши синтаксис → Молекула.
2. Сохтани артефактҳои ариза.
3. Ҷойгиркунӣ: 'ansible-playbook -i inventories/сайти prod. yml --limit web --tags ҷойгир '.
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) - ҳисоботҳо дар бораи вақт ва тағйирот.
Захира кардани дафтарчаҳои бозӣ дар нигаҳдории мутамарказ.
Нишонҳои 'барчаспҳо:' вазифаҳо барои даврҳои интихобӣ ва тезонидани тафтишот.
Дорухатҳои зуд-зуд барои IGaming
Гиреҳи веб/API: Nginx + systemd-unit, санҷиши саломатӣ, асрори менеҷер, бозоғоз.
Хидматҳои бозӣ: қолибҳои конфигуратсияро аз рӯи минтақа/иҷорагирон тавассути 'group _ vars'.
Пайвасткунакҳои пардохт: тугмаҳои қатъӣ барои калидҳо, бозоғоз тавассути огоҳӣ, пас аз санҷиши нуқтаҳои ниҳоӣ.
Ҷойҳои кории ETL: густариши скриптҳои Cronjob бо модули 'cron', файли қулфи idempotent.
Мониторинг: насби агентҳо (node_exporter/otelcol), бақайдгирии худкор дар мониторинг.
Антипаттернҳо
Истифодаи 'shell/command' дар ҷое ки модул мавҷуд аст.
Китобҳои бозӣ бе 'коркардкунандагон' → бозоғозии нолозим ва ҷиттери хидматӣ.
Нигоҳ доштани асрори ҷамъиятӣ 'group _ vars'.
Набудани 'serial '/' max _ fail _ фоизи' фарсудашавии мавҷи истеҳсолӣ.
Глобалии 'ҷамъоварии _ далелҳо: ҳақиқӣ' ва 'табдил: ҳақиқӣ' нолозим.
Нақшҳо бе санҷишҳои молекула ва бе дастгирии '--check'.
Фармонҳои дароз бидуни 'async/poll' тамоми мавҷро бозмедоранд.
Рӯйхати назоратии татбиқ
1. Дар бораи чаҳорчӯбаи анбор ва конвенсияҳои номгузорӣ розӣ шавед.
2. Танзими инвентаризатсияи динамикӣ ва таҳхона.
3. Офаридани нақшҳо (webapp/hardening/monitoring) ва нусхаҳои пинҳонии маҷмӯаҳо.
4. Даргиронидани Vault ва/ё ҳамгироӣ бо Менеҷери Махфӣ.
5. idempotency, '--check/--diff', коркардкунандагон ва барчаспҳоро таъмин кунед.
6. Пайвасти ansible-lint, yamllint, Молекула ба CI.
7. Намунаи ҷойгиркуниро (ғелонда/канарӣ/кабуд-сабз) ва маҳдудиятҳои 'serial' -ро тавсиф кунед.
8. Илова кардани плагинҳои зангзанӣ, ҷамъоварии журнал, тағир додани гузориш.
9. Ҳуҷҷатҳои баргардонидани ҳуҷҷатҳо ва амалҳои ҳодиса.
10. Мунтазам рӯзи бозиро баргузор кунед: танаффуси SSH, тарки гиреҳ, гардиши версия.
Натиҷаҳо
Ansible "мили охирин" -ро дар байни инфрасохтори эҷодшуда ва фурӯшҳое, ки кор мекунанд, пӯшонад: тағироти зуд, бехатар ва пешгӯишаванда ба конфигуратсияҳо ва релизҳо. Бо нақш ҳамчун воҳиди ҳадди аққали истифодаи дубора, инвентаризатсияи динамикӣ, коркарди дурусти махфӣ ва намунаҳои тасдиқшудаи сифр, Ansible ба гурӯҳҳои IGaming кӯмак мекунад, ки вақти-ба-ҷойгиркуниро коҳиш диҳанд, ҳодисаҳои шабро коҳиш диҳанд ва p99-ро дар сатҳи SLO нигоҳ доранд.