Ansible: konfigurasiýa we deplow
(Bölüm: Tehnologiýalar we infrastruktura)
Gysgaça gysgaça
"Ansible", infrastruktura eýýäm döredilen we gurşawy "janlandyrmaly" (Terraform/IaC) bolsa, VM/hostlary, hyzmatlary we programmalary gaýtalamak üçin amatly konfigurasiýa we orkestr deklaratiw guralydyr: paketleri oturtmak, goýbermek, şablonlary togalamak, aşaklatmazdan hyzmatlary täzeden başlamak, howpsuzlyk syýasatlaryny ulanmak Üstünligiň açary: modully gurluş (rollar/kolleksiýalar), berk idempotentlik, syrlar bilen takyk işlemek (Vault), dinamiki inwentarlar, synag we GitOps-düzgün.
Ansible ýerlikli bolanda (we Terraform bilen nähili birleşýär)
Terraform - çeşmeleri döredýär (VPC, klasterler, DB).
Ansible - OS/programma üpjünçiligini konfigurasiýa edýär, wersiýalary çykarýar, migrasiýalary kowýar, faýllary we hyzmatlary dolandyrýar.
Baglanyşyk: Terraform 'inventory '/IP/syrlary artefaktlara çykarýar, Ansible olary CD ädiminde okaýar.
Repozitoryň gurluşy (maslahat berilýän şablon)
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 (iň az):
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
Inwentarlar: statiki we dinamiki
Statik (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'
Dinamiki
Hostlary belliklere çekmek üçin bulut pluginlerini (ýa-da öz skriptiňizi) ulanyň. Gurşaw/taglaryň üýtgemeleri → 'group _ vars'.
Rollar we kolleksiýalar
Rol = gaýtadan ulanmagyň garaşsyz moduly (meseleler, faýllar, şablonlar, hendlerler).
Kolleksiýalar - rollaryň/pluginleriň/modullaryň toplumy. Pin wersiýalary 'collections/requirements. yml`.
yaml collections/requirements. yml collections:
- name: community. general version: ">=8. 0. 0,<9. 0. 0"
- name: ansible. posix
Playbooks: idempotent ssenarileri
Umumy pleýbukyň mysaly:yaml playbooks/site. yml
- hosts: all gather_facts: true become: true roles:
- hardening
- hosts: web become: true roles:
- webapp
'Webapp' (bölekler):
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
Hendlerler:
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 we üýtgeýän şablonlar
Defolt üýtgewlerini 'defaults/main' -de saklaň. yml ', duýgur - Vault.
Süzgüçleri ('| to_nice_yaml',' | b64encode ',' | default ') we' when 'şertlerini ulanyň.
jinja2 worker_processes auto;
http {
server {
listen 80;
server_name {{ inventory_hostname }};
location / {
proxy_pass http://127. 0. 0. 1:{{ webapp_port }};
}
}
}
Syrlar: Ansible Vault we gizlin dolandyryjylar
Üýtgeýän faýllary şifrlemek üçin Vault ('group _ vars/all. vault. yml`).
Daşarky dolandyryjylaryň (KMS/Secrets Manager/SSM) syrlaryny degişli modullar arkaly okamak we Vault-da diňe baglanyşyklary/ARN saklamak has gowudyr.
yaml group_vars/all. vault. yml (ansible-vault encrypted)
webapp_db_password: "..."
jwt_signing_key: "..."
Teklipler:
- Elýeterliligi bölüň: işläp düzüjiler dev/stage görýärler, diňe CI.
- Syrlaryň aýlanmagyny we giriş barlagyny goşuň.
Idempotentlik we dogry üýtgeşmeler
'shell/command' ýerine modullary ('package', 'user', 'lineinfile', 'template', 'systemd') ulanyň.
"Şowhunly" meseleleri 'changed _ when: false' diýip belläň.
Rollar üçin "check mode" ('--check') we "diff" -ni saklaň.
Durnuksyz meseleler üçin: 'retries', 'delay', 'until'.
yaml
- name: Wait for HTTP uri availability:
url: "http://localhost/health"
status_code: 200 register: health retries: 10 delay: 5 until: health. status == 200
Öndürijilik: uly fermalar we pikler
forks: paralelligi ýokarlandyryň (seresaplylyk bilen: nyşany artykmaç ýüklemäň).
strategy = free - goňşularyňyza garaşman ýerine ýetiriň.
pipelining = True в `ansible. cfg 'RTT-ni azaldar.
gather_facts gerek bolmadyk ýerinde: false.
uzak amallar üçin async/poll; deploi tolkunlary üçin throttle/serial.
Aýry-aýry hereketler üçin delegate_to we run_once (mysal üçin, DB migrasiýasy).
Nol downtaým patternleri
Rolling-deploy (hersi 20%)
yaml
- hosts: web serial: "20%"
max_fail_percentage: 10 roles: [webapp]
Canary
Playbuky '-limit web-canary' (toparyň kiçi köplügi) bilen açyň, metriklere göz aýlaň, soňra tutuş topara ýaýlaň.
Blue-Green
Hostlaryň iki topary 'web _ blue' we 'web _ green'; täze tolkuny pleýbukda taýýarlaň, soň bolsa 'community' meselesi bilen traffigi (DNS/LB) geçiriň. general. Balanslaýjyňyzyň affiliate_lb'/API.
Howpsuzlyk we hardening
Hardening roly: SSH syýasaty, bannerler, 'sudo' olmadan NOPASSWD, firewall, auditd/rsyslog, time-NTP, 'fail2ban'.
SELinux/AppArmor-y açyň, modullar arkaly syýasatlary dolandyryň.
Bastion: SSH-ni diňe jump-host arkaly çäklendiriň ('ProxyJump' -a serediň).
Iň az 'become: true'; inwentar derejesinde RBAC-ny düzüň (kim haýsy pleýbuklary işe girizip biler).
Windows we tor enjamlary
Windows: 'win _' modullary, WinRM baglanyşygy, PowerShell skriptleri - iň soňky argument hökmünde.
Network: 'network _ cli '/' httpapi', Cisco/Juniper/F5 üçin modullar; 'save _ when: changed' arkaly atomlar.
Synag we hili
ansible-lint + yamllint в CI.
Molecule: rollaryň lokal/konteýner synaglary, idempotentligi barlamak (üýtgemän goşa geçmek).
Sandbox: aýry-aýry wagtlaýyn inwentarlar/VM şekilleri.
yaml provisioner:
name: ansible verifier:
name: ansible scenario:
name: default
CI/CD we GitOps bilen integrasiýa
Adaty ulanyjy:1. Lint → Syntax check → Molecule.
2. Programmanyň artefaktlaryny düzmek.
3. Deploy: `ansible-playbook -i inventories/prod site. yml --limit web --tags deploy`.
4. Üýtgedilen hostlar boýunça hasabat, log artefaktı.
Ädimiň mysaly (düşünje):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
Gözegçilik we audit
Callback pluginlerini (json/yaml/timer/profile_tasks) birikdiriň - wagt we üýtgeşmeler baradaky hasabatlar.
Pleýbuklaryň ýazgylaryny merkezleşdirilen ammarda saklaň.
Seçip başlamak we derňewi çaltlaşdyrmak üçin 'tags:' meselelerini belläň.
iGaming üçin ýygy-ýygydan reseptler
Web/API nod: Nginx + systemd-unit, health-checks, secrets of manager, roll-restart.
Game-services: 'group _ vars' arkaly sebitler/tenantlar boýunça konfigurasiýa şablonlary.
Töleg konnektorlary: açarlara berk permishenalar, notify boýunça täzeden başlamak, endpointleriň post-barlagy.
ETL joblary: CronJob skriptlerini c 'cron' moduly, idempotent lock faýly bilen ýerleşdirmek.
Gözegçilik: agentleri oturtmak (node_exporter/otelcol), monitoringde awto-hasaba almak).
Anti-patternler
Modul bar ýerinde 'shell/command' ulanyň.
Pleybuklar 'handlers' → goşmaça restartlar we hyzmatlaryň titremesi.
Açyk 'group _ vars' -da syrlary saklamak.
"serial "/" max _ fail _ percentage" ýoklugy.
Global 'gather _ facts: true' we 'become: true' gerek däl.
Molecule synaglarsyz we goldawsyz rollar '--check'.
Tutuş tolkuny bloklaýan 'async/poll' -siz uzyn buýruklar.
Giriş barlagy
1. Ammar we naming-konwensiýanyň çarçuwasyny ylalaşyň.
2. Dinamiki inwentary we bastiony sazlaň.
3. Kolleksiýalaryň rollaryny (webapp/hardening/monitoring) we pin wersiýalaryny başla.
4. Gizlin dolandyryjy bilen Vault we/ýa-da integrasiýany açyň.
5. Idempotentligi üpjün et, '--check/--diff', handlers & tags.
6. CI-e ansible-lint, yamllint, molecule birikdiriň.
7. Deploýyň nusgasyny (rolling/canary/blue-green) we "serial" çäklerini suratlandyryň.
8. Callback pluginlerini, loglary, üýtgeşmeler hasabatyny goşuň.
9. Runbook we rebooks we wakalary resminamalaşdyrmak.
10. Yzygiderli oýun-day geçiriň: SSH-iň döwülmegi, nodanyň ýykylmagy, wersiýanyň yzyna gaýtarylmagy.
Netijeler
"Ansible" döredilen infrastruktura bilen işleýän iýmitiň arasyndaky "soňky mili" ýapýar: konfigurasiýalaryň we goýberilişleriň çalt, howpsuz we öňünden aýdyp boljak üýtgemeleri. Iň az gaýtadan ulanyş birligi, dinamiki inwentarlar, syrlar bilen dogry işlemek we nol aşak düşmegiň tassyklanan nusgalary hökmünde Ansible iGaming toparlaryna Wagt-Deploýy azaltmaga, gijeki hadysalaryň sanyny azaltmaga we SLO derejesinde p99 saklamaga kömek edýär.