GH GambleHub

Ansible: yapılandırma ve dağıtım

(Bölüm: Teknoloji ve Altyapı)

Kısa Özet

Ansible, altyapı zaten oluşturulduğunda (Terraform/IaC) VM'lerin/ana bilgisayarların, hizmetlerin ve uygulamaların tekrar tekrar yapılandırılması için ideal olan bildirimsel bir yapılandırma ve düzenleme aracıdır ve ortamı "canlandırmanız" gerekir: paketleri yükleyin, piyasaya sürün, şablonları kullanıma sunun, hizmet dışı kalmadan hizmetleri yeniden başlatın, güvenlik politikaları uygulayın. Başarının anahtarı: modüler yapı (roller/koleksiyonlar), sıkı idempotence, sırlarla temiz çalışma (Vault), dinamik envanter, test ve GitOps disiplini.

Ansible ne zaman uygundur (ve Terraform ile nasıl uyum sağlar)

Terraform - kaynaklar oluşturur (VPC, kümeler, veritabanları).
Ansible - işletim sistemini/yazılımı yapılandırır, sürümleri kullanıma sunar, geçişleri yönlendirir, dosyaları ve hizmetleri düzenler.
Link: Terraform, 'envanter'/IP/sırları eserlere çıkarır, Ansible bunları bir CD adımında okur.

Depo yapısı (önerilen ş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 (minimum):
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

Envanterler: statik ve dinamik

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'

Dinamik

Ana bilgisayarları etiketlemek için bulut eklentilerini (veya kendi komut dosyanızı) kullanın. Çevre/etiket değişkenleri - 'group _ vars'.

Roller ve Koleksiyonlar

Rol = bağımsız yeniden kullanım modülü (görevler, dosyalar, şablonlar, işleyiciler).
Koleksiyonlar - bir dizi rol/eklenti/modül. Koleksiyonlardaki/gereksinimlerdeki sürüm pinlerini düzeltin. yml '.

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

Playbooks: Idempotent senaryoları

Genel bir oyun kitabı örneği:
yaml playbooks/site. yml
- hosts: all gather_facts: true become: true roles:
- hardening

- hosts: web become: true roles:
- webapp
'Webapp' role (fragmanlar):
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
İşleyiciler:
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 Şablonlar ve Değişkenler

Varsayılan değişkenleri 'defaults/main'de saklayın. Yml ', hassas - Vault içinde.
Filtreleri ('| to_nice_yaml',' | b64encode', '| default') ve'ne zaman 'koşullarını kullanın.

Örnek 'nginx. konf. j2 ':
jinja2 worker_processes auto;
http {
server {
listen 80;
server_name {{ inventory_hostname }};
location / {
proxy_pass http://127. 0. 0. 1:{{ webapp_port }};
}
}
}

Sırlar: Ansible Vault ve Gizli Yöneticiler

Değişken dosyaları şifrelemek için Vault ('group _ vars/all. Kasa dairesi. yml ').
Harici yöneticilerden (KMS/Secrets Manager/SSM) gelen sırları ilgili modüller aracılığıyla okumak ve yalnızca Vault'ta bağlantılar/ARN depolamak daha iyidir.

Şifrelenmiş dosya (örnek yapı):
yaml group_vars/all. vault. yml (ansible-vault encrypted)
webapp_db_password: "..."
jwt_signing_key: "..."
Öneriler:
  • Erişimi paylaşın: geliştiriciler dev/stage, prod - only CI.
  • Gizli rotasyonu ve erişim denetimini etkinleştirin.

Idempotency ve doğru değişiklikler

Shell/command yerine modülleri ('package', 'user', 'lineinfile', 'template', 'systemd') kullanın.
"Gürültülü" görevleri, hiçbir şeyi değiştirmezlerse 'değişti _ ne zaman: yanlış'olarak işaretleyin.
Destek kontrol modu ('--check') ve roller için diff.
Kararsız görevler için: 'retries', 'delay', 'until'.

Örnek:
yaml
- name: Wait for HTTP uri availability:
url: "http://localhost/health"
status_code: 200 register: health retries: 10 delay: 5 until: health. status == 200

Performans: Büyük çiftlikler ve zirveler

çatallar: eşzamanlılığı yükseltir (dikkat: hedefi aşırı yüklemeyin).
strategy = free-Komşular beklemeden görevleri yürütmek.
Pipelining = True в 'ansible. cfg 'RTT'yi azaltır.
gather_facts: gerçeklerin gereksiz olduğu yerlerde yanlış.
Uzun vadeli operasyonlar için async/poll; Dağıtım dalgaları için gaz/seri.
Tek eylemler için delegate_to ve run_once (örneğin, veritabanı geçişi).

Sıfır kesinti süresi desenleri

Rolling Dağıtımı (her biri %20)

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

Kanarya

Playbook'u '--limit web-canary' (grubun bir alt kümesi) ile çalıştırın, metrikleri kontrol edin, ardından tüm gruba dağıtın.

Mavi-Yeşil

İki ana grup 'web _ blue've' web _ green '; Bir playbook ile yeni bir dalga hazırlayın, ardından trafiği (DNS/LB) 'topluluk göreviyle değiştirin. General. Dengeleyicini affiliate_lb'/API.

Güvenlik ve sertleştirme

Sertleştirme rolü: SSH politikaları, afişler, NOPASSWD olmadan 'sudo', güvenlik duvarı, auditd/rsyslog, time-NTP, 'fail2ban'.
SELinux/AppArmor'u etkinleştirin, modüller aracılığıyla politikaları yönetin.
Bastion: SSH'yi yalnızca jump-host üzerinden hedeflerle sınırlayın (bkz. 'ProxyJump').
'Oluştur: gerçek' minimize; RBAC'yi envanter seviyesinde çizin (kim hangi oyun kitaplarını çalıştırabilir).

Windows ve ağ donanımı

Windows: modüller 'win _', WinRM bağlantısı, PowerShell komut dosyaları - son argüman olarak.
Ağ: 'network _ cli'/' httpapi', Cisco/Juniper/F5 için modüller; 'save _ when: changed' aracılığıyla atomicity.

Test ve kalite

Ansible-tiftik + yamllint в CI.
Molekül: Lokal/konteyner rol testleri, idempotency kontrolü (çift çalışma değişmeden).
Sandbox: bireysel VM geçici envanter/görüntüler.

Örnek Molekül (fragman):
yaml provisioner:
name: ansible verifier:
name: ansible scenario:
name: default

CI/CD ve GitOps ile entegrasyon

Tipik boru hattı:

1. Lint - Sözdizimi kontrolü - Molekül.

2. Bina uygulama eserleri.

3. Dağıtım: 'ansible-playbook -i envanterler/prod sitesi. yml --limit web --tags deploy '.

4. Değişen ana bilgisayarların raporu, günlüklerin eseri.

Örnek adım (konsept):
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özlemlenebilirlik ve denetim

Connect callback eklentileri (json/yaml/timer/profile_tasks) - zaman ve değişiklikler hakkında raporlar.
Playbook kayıtlarını merkezi depolamaya kaydedin.
Etiket 'etiketler:' Seçici çalışır ve soruşturmaları hızlandırmak için görevler.

iGaming için sık tarifler

Web/API düğümü: Nginx + systemd-unit, sağlık kontrolleri, yöneticiden sırlar, roll-restart.
Oyun hizmetleri: 'group _ vars' aracılığıyla bölge/kiracılara göre yapılandırma şablonları.
Ödeme konektörleri: tuşlar için sıkı olanlar, bildirim ile yeniden başlatma, uç noktaların kontrolü sonrası.
ETL işleri: CronJob komut dosyalarını 'cron' modülü, idempotent kilit dosyası ile dağıtmak.
İzleme: Ajanların kurulumu (node_exporter/otelcol), izlemede otomatik kayıt.

Antipatterns

Modülün olduğu yerde 'kabuk/komut' kullanılıyor.
Playbook'suz 'işleyiciler' - gereksiz yeniden başlatmalar ve servis jitter.
Sırların herkese açık 'group _ vars' içinde saklanması.
Üretim dalgası tükenmesi sırasında 'seri'/' max _ fail _ percent' eksikliği.
Global 'gather _ facts: true've' become: true 'gereksiz yere.
Molecule testi olmayan ve '--check' desteği olmayan roller.
Tüm dalgayı engelleyen 'async/poll' içermeyen uzun komutlar.

Uygulama kontrol listesi

1. Arşiv çerçevesi ve adlandırma kuralları üzerinde anlaşın.
2. Dinamik envanter ve kaleyi yapılandırın.
3. Koleksiyonların rollerini (webapp/sertleştirme/izleme) ve pin sürümlerini oluşturun.
4. Kasa ve/veya Gizli Yönetici ile entegrasyonu etkinleştirin.
5. Idempotency, '--check/--diff', işleyicileri ve etiketleri sağlayın.
6. Ansible-tiftik, yamllint, Molekül'ü CI'ye bağlayın.
7. Dağıtım desenini (yuvarlanma/kanarya/mavi-yeşil) ve 'seri' sınırlarını açıklayın.
8. Geri arama eklentileri, günlük koleksiyonu, değişiklik raporu ekleyin.
9. Belge geri alma çalışma kitapları ve olay eylemleri.
10. Düzenli olarak oyun günü tutun: SSH molası, düğüm bırakma, sürüm geri alma.

Sonuçlar

Ansible, oluşturulan altyapı ile işe yarayan satışlar arasındaki "son mili" kapatır: yapılandırmalarda ve sürümlerde hızlı, güvenli ve öngörülebilir değişiklikler. Minimal bir yeniden kullanım birimi, dinamik envanter, doğru gizli işleme ve doğrulanmış sıfır kesinti modelleri olarak Ansible, iGaming ekiplerinin Dağıtım Süresini azaltmasına, gece olaylarını azaltmasına ve SLO düzeyinde p99 tutmasına yardımcı olur.

Contact

Bizimle iletişime geçin

Her türlü soru veya destek için bize ulaşın.Size yardımcı olmaya her zaman hazırız!

Telegram
@Gamble_GC
Entegrasyona başla

Email — zorunlu. Telegram veya WhatsApp — isteğe bağlı.

Adınız zorunlu değil
Email zorunlu değil
Konu zorunlu değil
Mesaj zorunlu değil
Telegram zorunlu değil
@
Telegram belirtirseniz, Email’e ek olarak oradan da yanıt veririz.
WhatsApp zorunlu değil
Format: +ülke kodu ve numara (örneğin, +90XXXXXXXXX).

Butona tıklayarak veri işlemenize onay vermiş olursunuz.