एंसिबल: कॉन्फ़िगरेशन और तैनात करें
(धारा: प्रौद्योगिकी और बुनियादी ढांचा)
संक्षिप्त सारांश
वीएम/होस्ट, सेवाओं और अनुप्रयोगों के बार-बार कॉन्फ़िगरेशन के लिए एक घोषणात्मक कॉन्फ़िगरेशन और ऑर्केस्ट्रेशन टूल आदर्श है। सफलता की कुंजी: मॉड्यूलर संरचना (भूमिकाएं/संग्रह), सख्त पहचान, रहस्य (तिजोरी), गतिशील सूची, परीक्षण और GitOps अनुशासन के साथ साफ काम।
कब उपयुक्त है (और यह टेराफॉर्म के साथ कैसे फिट होता है)
Terraform - संसाधन बनाता है (VPC, समूह, डेटाबेस)।
एंसिबल - ओएस/सॉफ्टवेयर कॉन्फ़िगर करता है, संस्करणों को रोल आउट करता है, माइग्रेशन करता है, फ़ाइलों और सेवाओं को संपादित करता है।
लिंक: कलाकृतियों के लिए Terraform आउटपुट 'इन्वेंट्री '/IP/रहस्य, Anible उन्हें एक सीडी चरण में पढ़ ता है।
भंडार संरचना (अनुशंसित टेम्पलेट)
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'
गतिशील
होस्ट टैग करने के लिए क्लाउड प्लगइन (या अपनी स्वयं की स्क्रिप्ट) का उपयोग करें वातावरण/टैग चर → 'समूह _ vars'।
भूमिकाएँ और संग्रह
भूमिका = स्वतंत्र पुन: उपयोग मॉड्यूल (कार्य, फ़ाइलें, टेम्पलेट, हैंडलर)।
संग्रह - भूमिकाओं/प्लगइन/मॉड्यूल का एक सेट। संस्करण पिन को 'संग्रह/आवश्यकताओं में ठीक करें। yml '।
yaml collections/requirements. yml collections:
- name: community. general version: ">=8. 0. 0,<9. 0. 0"
- name: ansible. posix
प्लेबुक: आइडेम्पोटेंट स्क्रिप्ट
सामान्य प्लेबुक का उदाहरण:yaml playbooks/site. yml
- hosts: all gather_facts: true become: true roles:
- hardening
- hosts: web become: true roles:
- 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
हैंडलर:
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 ', संवेदनशील - तिजोरी में।
फ़िल्टर इस्तेमाल करें (' b64encode', ' default') और 'जब' शर्तें.
उदाहरण 'nginx। कन्फर्म। j2 ':jinja2 worker_processes auto;
http {
server {
listen 80;
server_name {{ inventory_hostname }};
location / {
proxy_pass http://127. 0. 0. 1:{{ webapp_port }};
}
}
}
रहस्य: एनीबल वॉल्ट और सीक्रेट मैनेजर्स
वेरिएबल फ़ाइलों को गोपित करने के लिए तिजोरी ('group _ vars/all. तिजोरी। yml ')।
इसी मॉड्यूल के माध्यम से बाहरी प्रबंधकों (केएमएस/सीक्रेट मैनेजर/एसएसएम) से रहस्यों को पढ़ ना बेहतर है और वॉल्ट में केवल लिंक/एआरएन को स्टोर करना है।
एनक्रिप्टेड फ़ाइल (उदाहरण संरचना):yaml group_vars/all. vault. yml (ansible-vault encrypted)
webapp_db_password: "..."
jwt_signing_key: "..."
सिफारिशें:
- साझा पहुँच: डेवलपर्स dev/stage, prod - केवल CI देखते हैं।
- गुप्त घुमाव और पहुँच ऑडिटिंग सक्षम करें।
पहचान और सही परिवर्तन
'shell/command' के बजाय मॉड्यूल ('पैकेज', 'उपयोक्ता', 'lineinfile', 'template', 'systemd') इस्तेमाल करें.
मार्क "शोर" कार्यों को बदल दिया _ कब: झूठा 'वे कुछ भी नहीं बदलते हैं।
सपोर्ट चेक मोड ('--check') और भूमिकाओं के लिए diff.
अस्थिर कार्यों के लिए: 'पुनरावृत्ति', 'देरी', 'जब तक'।
उदाहरण: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 = true 'anible। cfg 'RTT को कम करता है।
gather_facts: झूठ जहां तथ्य अनावश्यक हैं।
दीर्घकालिक कार्यों के लिए असीनक/सर्वेक्षण; तैनात तरंगों के लिए थ्रॉटल/धारावाहिक।
delegate_to और run_once एकल कार्यों के लिए (उदाहरण के लिए, डेटाबेस प्रवास)।
शून्य डाउनटाइम पैटर्न
रोलिंग तैनाती (20% प्रत्येक)
yaml
- hosts: web serial: "20%"
max_fail_percentage: 10 roles: [webapp]
कैनरी
'-- limit वेब-कैनरी' (समूह का एक सबसेट) के साथ प्लेबुक चलाएं, मेट्रिक्स की जाँच करें, फिर पूरे समूह में रोल आउट करें।
ब्लू-ग्रीन
दो मेजबान समूह 'वेब _ ब्लू' और 'वेब _ ग्रीन'; प्लेबुक के साथ एक नई लहर तैयार करें, फिर 'सामुदायिक कार्य' के साथ ट्रैफिक (डीएनएस/एलबी) स्विच करें। सामान्य। affiliate_lb'/API आपका संतुलन।
सुरक्षा और सख्ती
सख्त भूमिका: SSH नीतियां, बैनर, NOPASSWD के बिना 'sudo', फ़ायरवॉल, ऑडिट/rsyslog, टाइम-NTP, 'फेल2ban'।
SELinux/AppArmor सक्षम करें, मॉड्यूल के माध्यम से नीतियों का प्रबंधन करें।
Bastion: SSH को केवल जंप-होस्ट के माध्यम से लक्ष्य करने के लिए प्रतिबंधित करें ('ProxyJump' देखें)।
न्यूनतम करें 'बन जाओ: सही'; इन्वेंट्री स्तर पर RBAC को आकर्षित करें (जो प्लेबुक चला सकते हैं)।
विंडोज और नेटवर्क हार्डवेयर
विंडोज़: मॉड्यूल 'विन _', WinRM कनेक्शन, PowerShell स्क्रिप्ट - अंतिम तर्क के रूप में।
नेटवर्क: 'network _ cli '/' httpapi', मॉड्यूल फॉर Cisco/Juniper/F5; 'सेव _ कब: बदला' के माध्यम से परमाणुता।
परीक्षण और गुणवत्ता
एंसिबल-लिंट + yamllint в CI।
अणु: स्थानीय/कंटेनर भूमिका परीक्षण, पहचान जांच (डबल रन अपरिवर्तित)।
सैंडबॉक्स: व्यक्तिगत वीएम अस्थायी सूची/छवियाँ।
उदाहरण अणु (टुकड़ा):yaml provisioner:
name: ansible verifier:
name: ansible scenario:
name: default
CI/CD और GitOps के साथ एकीकरण
विशिष्ट पाइपलाइन:1. लिंट → सिंटैक्स जाँच → अणु।
2. बिल्डिंग एप्लिकेशन कलाकृतियों।
3. तैनाती: 'एंसिबल-प्लेबुक -i इन्वेंटरी/प्रोड साइट। yml --limit वेब --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) - समय पर रिपोर्ट और परिवर्तन।
प्लेबुक लॉग को केंद्रीकृत भंडारण में सहेजें।
लेबल 'टैग: ' चयनात्मक रन के लिए कार्य और जांच में तेजी लाएं।
आईगेमिंग के लिए अक्सर व्यंजनों
वेब/एपीआई नोड: Nginx + सिस्टम-यूनिट, हेल्थ-चेक, मैनेजर से रहस्य, रोल-रिस्टार्ट।
खेल सेवाएँ: 'समूह _ vars' के माध्यम से क्षेत्र/किरायेदारों द्वारा कॉन्फिग टेम्पलेट
भुगतान कनेक्टर: कुंजियों के लिए सख्त, सूचना द्वारा पुनः प्रारंभ, समापन बिंदुओं की जांच के बाद।
ईटीएल जॉब्स: 'क्रॉन' मॉड्यूल, आइडेम्पोटेंट लॉक फ़ाइल के साथ क्रोनजॉब स्क्रिप्ट तैनात करना।
निगरानी: एजेंटों की स्थापना (node_exporter/otelcol), निगरानी में ऑटो-पंजीकरण।
एंटीपैटर्न
जहाँ मॉड्यूल है वहाँ 'शेल/कमांड' का उपयोग कर रहा है।
'हैंडलर्स' के बिना प्लेबुक - अनावश्यक रीस्टार्ट और सर्विस जिटर।
सार्वजनिक 'समूह _ vars' में रहस्यों का भंडारण।
'सेरियल '/' मैक्स _ फेल _ प्रतिशत' ड्यूरिंग प्रोडक्शन वेव डिक्लेशन की अनुपस्थिति।
वैश्विक 'इकट्ठा करें तथ्य: सही' और 'बन जाओ: सही' अनावश्यक।
अणु परीक्षण के बिना और '-- चेक' समर्थन के बिना भूमिकाएँ।
पूरी लहर को अवरुद्ध करने वाले 'एसिंक/पोल' के बिना लंबे आदेश।
कार्यान्वयन जाँच सूची
1. भंडार ढांचे और नामकरण सम्मेलनों पर सहमति।
2. गतिशील सूची और गढ़ कॉन्फ़िगर करें।
3. भूमिकाएँ बनाएं (वेबप/सख्त/निगरानी) और संग्रह के पिन संस्करण।
4. गुप्त प्रबंधक के साथ तिजोरी और/या एकीकरण सक्षम करें।
5. पहचान सुनिश्चित करें, '--check/--diff', हैंडलर और टैग.
6. एंसिबल-लिंट, यामलिंट, अणु को सीआई से कनेक्ट करें।
7. तैनात पैटर्न (रोलिंग/कैनरी/ब्लू-ग्रीन) और 'सेरियल' सीमाओं का वर्णन करें।
8. कॉलबैक प्लगइन जोड़ें, लॉग संग्रह, रिपोर्ट बदलें।
9. दस्तावेज़ रोलबैक रनबुक और घटना क्रियाएं।
10. नियमित रूप से गेम-डे रखें: एसएसएच ब्रेक, नोड ड्रॉप, संस्करण रोलबैक।
परिणाम
एनीबल ने बनाए गए बुनियादी ढांचे और काम करने वाली बिक्री के बीच "अंतिम मील" को बंद कर दिया: कॉन्फ़िगरेशन और रिलीज़ के लिए त्वरित, सुरक्षित और अनुमानित परिवर एक न्यूनतम पुन: उपयोग इकाई, गतिशील इन्वेंट्री, सही गुप्त हैंडलिंग और सत्यापित शून्य-डाउनटाइम पैटर्न के रूप में भूमिका के साथ, Anible iGaming टीमों को टाइम-टू-डिप्लॉय को कम करने, रात की घटनाओं को कम करने में मदद करता है।