GH GambleHub

Ansible 'կազմաձևումը և դոպլան

(Բաժին ՝ Տեխնոլոգիաներ և ենթակառուցվածքներ)

Live ռեզյումե

Ansible-ը միգրացիոն և նվագախմբային գործիք է, որը կատարյալ հարմար է կրկնվող VM/հանրակացարանների, ծառայությունների և ծրագրերի համար, երբ ենթակառուցվածքն արդեն ստեղծվել է (Terraform/IaC) և պետք է «վերակենդանացնել» շրջապատը 'տեղադրել փաթեթներ, փաթաթել մասունքները, շրջել ձևանմուշները, վերաշարադրել ծառայությունները առանց duntaim, օգտագործել անվտանգության քաղաքականությունները։ Հաջողության բանալին 'մոդուլային կառուցվածք (դերեր/հավաքածուներ), խիստ գաղափարախոսություն, գաղտնիքների հետ կոկիկ աշխատանք (Vox), դինամիկ շահառուներ, թեստավորում և GitOps կարգապահություն։

Երբ տեղավորվում է Ansible (և ինչպես է այն համակցվում Terraform-ի հետ)

Terraform-ը ստեղծում է ռեսուրսներ (MSC, կլաստերներ, BD)։

Ansible-ը հայտարարում է OS/PO-ը, նետում տարբերակները, հետապնդում է կոդերը, կառավարում ֆայլերը և ծառայությունները։

Կապը 'Terraform-ը բերում է «entory »/IP/գաղտնիքները արտեֆակտներում, Ansible-ը կարդում է դրանք CD-2019-ում։

Ռեպոզորիայի կառուցվածքը (առաջարկվող ձևանմուշը)


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 "։

Դերեր և հավաքածուներ

Դերը = անկախ երկրորդ օգտագործման մոդուլը (առաջադրանքներ, ֆայլեր, ձևանմուշներ, handlers)։

Հավաքածուները դերերի/plagins/մոդուլների հավաքածու են։ Տարբերակների պինները գրանցեք «collections/requirements» -ում։ yml`.

yaml collections/requirements. yml collections:
- name: community. general version: ">=8. 0. 0,<9. 0. 0"
- name: ansible. posix

Playbooks 'idempotent սցենարներ

Ընդհանուր պլեյբուկի օրինակ

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

Handlers

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 և 108 ձևանմուշները

Պահեք դեֆոլտ բջիջները 'ww.aul.ru/main։ yml ', զգայուն' Vox-ում։

Օգտագործեք ֆիլտրեր («wwww.to _ nice _ yaml», «www.b64encode», «wwwwen») և «when» պայմանները։

Օրինակ 'nginx։ conf. j2`:
jinja2 worker_processes auto;
http {
server {
listen 80;
server_name {{ inventory_hostname }};
location / {
proxy_pass http://127. 0. 0. 1:{{ webapp_port }};
}
}
}

Գաղտնիքները ՝ Ansible Vance և գաղտնիքների ղեկավարներ

Փոփոխականների ֆայլերը կոդավորելու համար ("group _ vars/all. vault. yml`).

Ավելի լավ է կարդալ արտաքին ղեկավարների գաղտնիքները (KFC/Secrets System/SSM) համապատասխան մոդուլների միջոցով և պահել Vox-ում միայն հղում/ARN։

Ծածկագրված ֆայլը (կառուցվածքի օրինակ)

yaml group_vars/all. vault. yml (ansible-vault encrypted)
webapp_db_password: "..."
jwt_signing_key: "..."

Առաջարկություններ

Բաժանեք հասանելիությունը 'զարգացողները տեսնում են dev/stage, prod միայն CI-ն։

Միացրեք գաղտնիքների ռոտացիան և հասանելիության աուդիտը։

Idempotenty և ճիշտ փոփոխություններ

Օգտագործեք մոդուլներ («package», «user», «lineinfile», «template», «shell/command») փոխարեն։

Խոչընդոտեք «աղմկոտ» առաջադրանքները «changed _ when: false», եթե նրանք ոչինչ չեն փոխում։

Աջակցեք k mode («--check») և diff դերերի համար։

Անկայուն առաջադրանքների համար '«retries», «www.ay», «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

Արտադրողականություն 'մեծ ագարակներ և պիկի

forks 'բարձրացրեք զուգահեռականությունը (զգուշությամբ' մի փոխեք նպատակը)։

strategy = free - կատարեք առաջադրանքներ առանց հարևանների սպասելու։

pipelining = True в `ansible. cfg "նվազեցնում է RTT-ը։

gather _ facts: false որտեղ փաստերը կարիք չունեն։

async/poll երկար վիրահատությունների համար; throttle/serial ալիքների համար։

degate _ to և run _ once միասնական գործողությունների համար (օրինակ, BD խմբակցությունը)։

Զրոյական dauntaima

Rolling-depla (20%)

yaml
- hosts: web serial: "20%"
max_fail_percentage: 10 roles: [webapp]

Canary

«-limit web-canary» (խմբի ենթաօրենսդրությունը), ռուսական մետրերը, ապա բաժանեք ամբողջ խմբին։

Blue-Green

Երկու խմբեր «web _ blue» և «web _ green»; Պլեյբուսով պատրաստեք նոր ալիք, ապա անջատեք հյուրանոցները (CSA/LB) «community» առաջադրանքը։ general. affiliate _ lb '/API ձեր հավասարակշռիչ։

Անվտանգություն և hardening

Hardening-ի դերը 'SSH քաղաքականությունը, բանները, «sudo» առանց NOPASSWD, ֆայերվոլ, auditd/rsyslog, ժամանակ-NTP, «fail2ban»։

Միացրեք SELinux/ApPARmor-ը, կառավարեք քաղաքական գործիչները մոդուլների միջոցով։

Բաստիոն 'սահմանափակեք SSH նպատակներին միայն jump-host-ի միջոցով (տե՛ ս «ProxyJump»)։

Նվազագույնի հասցրեք 'become: 108'; Նախագծեք RBAC-ը բուլղարների մակարդակում (ով կարող է սկսել ինչ պլեյբուսներ)։

Windows և ցանցային սարքավորումներ

Windows: մոդուլներ 'win _', WinRM, PowerShell-ջութակները 'որպես վերջին փաստարկ։

Network: «network _ cli »/« httpapi», Cisco/Juniper/F5 մոդուլներ; Ատոմականությունը «save _ wen: changed» -ի միջոցով։

Փորձարկումը և որակը

ansible-lint + yamllint в CI.

Molecule: տեղական/բեռնարկղային դերերի թեստեր, idempotenty ստուգում (կրկնակի պրոթոն անփոփոխ)։

Ավազը 'առանձին ժամանակավոր ռոտարիներ/VM պատկերներ։

Օրինակ Molecule (հատված)

yaml provisioner:
name: ansible verifier:
name: ansible scenario:
name: default

Ինտեգրումը CI/CD և GitOps-ի հետ

Տիպիկ pline

1. Lint → Syntax check → Molecule.

2. Դիմումի արտեֆակտների կառուցումը։

3. Deploy: `ansible-playbook -i inventories/prod site. 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

Դիտողությունն ու աուդիտը

Միացրեք callback-plagins (json/yaml/timer/profile _ tasks) - ժամանակի և փոփոխությունների հաշվետվություններ։

Պահպանեք պլեյբուսների լույսերը կենտրոնացված պահեստում։

Նշեք առաջադրանքները 'tags: ' ընտրության գործարկման և արագացման համար։

Հաճախակի բաղադրատոմսեր iGaming-ի համար

Web/API noda: Nginx + wwww.emd-unit, health-winks, secrets ղեկավարից, roll-restart։

Game-ծառայությունները 'ռեգիոնների/տենանտների ձևանմուշները' «group _ vars» -ի միջոցով։

Հիբրիդային գրասենյակները 'խիստ պղպջակներ, որոնք վերագործարկվում են notify-ի վրա, էնդպոինտների հետադարձ ստուգում։

ETL-ջոբները ՝ www.Cast Job-ջութակները c 'cript' em, idempotent dik-ֆայլը։

Տե՛ ս գործակալների տեղադրումը (node _ exporter/otelcol), auto-2019 դիտարկման մեջ։

Antipatterny

«Shell/command» օգտագործումը, որտեղ կա մոդուլ։

Պլեյբուսները առանց «handlers» են ավելցուկ ռեստարտներ և ծառայությունների խմորումը։

Գաղտնիքների պահպանումը բաց «group _ vars» -ում։

«Serial »/« max _ fail _ percentage» -ի բացակայությունը, երբ ավելացնում է prod ալիքները։

Գլոբալ "gather _ facts" ՝ www.ru "և" become: www.ru "առանց անհրաժեշտության։

Դերերը առանց Molecule թեստերի և առանց աջակցության «--check»։

Երկար թիմեր առանց «async/poll», որոնք արգելափակում են ամբողջ ալիքը։

Ներդրման թուղթ

1. Համաձայնեք ռեպոզիտորիայի և naming-կոնվենցիայի շրջանակը։

2. Պարեք դինամիկ կիսագնդի և bastion։

3. Դերերը (webapp/hardening/monitoring) և հավաքածուների տարբերակները։

4. Միացրեք Vulti/կամ ինտեգրումը գաղտնիքների մենեջերի հետ։

5. Ապահովել idempotenty, ----check/---diff ", handlers և tegi։

6. Միացրեք ansible-lint, yamlint, Molecule-ը CI-ում։

7. Նկարագրեք pattern deploa (rolling/canary/blue-green) և limits 'serial "։

8. Ավելացնել callback-plagins, լոգարանների հավաքումը, փոփոխությունների զեկույցը։

9. Փաստաթղթավորել runbook-ը և արձագանքը և գործողությունները միջադեպերի ժամանակ։

10. Պարբերաբար game-day-ը 'SSH-ի փլուզումը, նոդայի անկումը, տարբերակները։

Արդյունքները

Ansible-ը փակում է «վերջին ողորմությունը» ստեղծված ենթակառուցվածքի և աշխատանքային երկարության միջև 'արագ, անվտանգ և կանխատեսելի միգրացիաների և ֆորումների փոփոխությունները։ Դերի հետ, որպես կրկնվող օգտագործման նվազագույն միավորը, դինամիկ բուլղարները, գաղտնիքների հետ ճիշտ աշխատանքը և զրոյական dauntaim Ansible-ի փամփուշտները օգնում են iGaming-թիմերին կրճատել Time-to-Deploy-ը, նվազեցնել գիշերային պարամետրերի քանակը և պահել p99 SLO մակարդակում։

Contact

Կապ հաստատեք մեզ հետ

Կապ հաստատեք մեզ հետ ցանկացած հարցի կամ աջակցության համար։Մենք միշտ պատրաստ ենք օգնել։

Telegram
@Gamble_GC
Սկսել ինտեգրացիան

Email-ը՝ պարտադիր է։ Telegram կամ WhatsApp — ըստ ցանկության։

Ձեր անունը ըստ ցանկության
Email ըստ ցանկության
Թեմա ըստ ցանկության
Նամակի բովանդակություն ըստ ցանկության
Telegram ըստ ցանկության
@
Եթե նշեք Telegram — մենք կպատասխանենք նաև այնտեղ՝ Email-ի дополнение-ով։
WhatsApp ըստ ցանկության
Ձևաչափ՝ երկրի կոդ և համար (օրինակ՝ +374XXXXXXXXX)։

Սեղմելով կոճակը՝ դուք համաձայնում եք տվյալների մշակման հետ։