ניהול קונפיגורציות הוא חלק קריטי בתחזוקה וניהול של מערכות IT גדולות. הכלי Ansible, שפותח על ידי Red Hat, הוא אחד מהכלים הפופולריים ביותר לניהול קונפיגורציות. Ansible מאפשר לך לנהל ולהגדיר שרתים ותשתיות בצורה אוטומטית ויעילה באמצעות קבצי קונפיגורציה פשוטים שנכתבים ב-YAML. במאמר זה נלמד כיצד להשתמש ב-Ansible לניהול קונפיגורציות בסביבות שונות.
התקנה והגדרת Ansible
לפני שנתחיל להשתמש ב-Ansible, יש להתקין את הכלי על המחשב שלכם. Ansible תומך במערכות הפעלה מבוססות לינוקס, macOS, ו-Windows (באמצעות WSL). להלן הוראות ההתקנה:
להתקנת Ansible על מערכת מבוססת אובונטו, השתמשו בפקודות הבאות:
sudo apt update
sudo apt install ansible
לאחר ההתקנה, תוכלו לוודא ש-Ansible הותקן בהצלחה באמצעות הפקודה הבאה:
ansible --version
כעת, כש-Ansible מותקן, נוכל להתחיל להגדיר את קבצי הקונפיגורציה ולהשתמש בהם לניהול המערכות שלנו.
יצירת Playbook ראשון עם Ansible
Ansible משתמש בקבצי Playbook כדי להגדיר את הפעולות שיש לבצע על השרתים. קבצים אלה נכתבים בפורמט YAML, והם מכילים סדרת משימות שמבוצעות על קבוצת שרתים. נתחיל ביצירת Playbook פשוט שיתקין חבילות ויבצע הגדרות בסיסיות.
להלן דוגמה ל-Playbook שמתקין את שרת Apache ומפעיל אותו:
---
- name: התקנת Apache על שרתים מבוססי לינוקס
hosts: webservers
become: yes
tasks:
- name: התקנת Apache
apt:
name: apache2
state: present
- name: הפעלת Apache והבטחת שהוא יפעל בעת אתחול המערכת
systemd:
name: apache2
enabled: yes
state: started
בקובץ הזה, אנחנו מגדירים קבוצה של שרתים בשם "webservers" שעליהם נבצע את הפעולות. תחילה, אנחנו מתקינים את Apache באמצעות המודול apt
, ולאחר מכן מוודאים שהשירות פועל ומוגדר לפעול בעת אתחול המערכת.
ניהול שרתים מרובים עם Ansible
אחד היתרונות הגדולים של Ansible הוא היכולת לנהל מספר רב של שרתים במקביל. ניתן להגדיר קבוצות של שרתים בקובץ הנקרא "inventory", ולאחר מכן להפעיל Playbooks על כל השרתים בקבוצה.
נניח שיש לנו שני שרתים, אחד בלונדון ואחד בניו יורק, ואנחנו רוצים לנהל אותם יחד:
[webservers]
london.example.com
newyork.example.com
בקובץ זה, הגדרנו קבוצה בשם "webservers" הכוללת את שני השרתים. כעת, ניתן להפעיל את ה-Playbook על כל השרתים בקבוצה הזו באמצעות הפקודה הבאה:
ansible-playbook -i inventory my-playbook.yml
הפקודה הזו תפעיל את ה-Playbook על כל השרתים המוגדרים בקבוצת "webservers".
שימוש במודולים מתקדמים
Ansible כולל מגוון רחב של מודולים שמאפשרים לבצע פעולות מתקדמות על השרתים. לדוגמה, ניתן להשתמש במודול copy
כדי להעתיק קבצים לשרתים מרוחקים, או במודול user
כדי לנהל משתמשים על השרתים.
להלן דוגמה ל-Playbook שמוסיף משתמש חדש לשרת ומעתיק אליו קובץ קונפיגורציה:
---
- name: ניהול משתמשים והעתקת קבצים
hosts: all
become: yes
tasks:
- name: הוספת משתמש חדש
user:
name: devops
state: present
groups: sudo
- name: העתקת קובץ קונפיגורציה
copy:
src: /local/path/to/config.conf
dest: /etc/config.conf
בקובץ זה, אנחנו יוצרים משתמש חדש בשם "devops" ומוודאים שהוא נמצא בקבוצת ה-sudoers. לאחר מכן, אנחנו מעתיקים קובץ קונפיגורציה מהמחשב המקומי לשרת המרוחק.
שימוש ב-Roles לארגון קוד
Roles הם דרך יעילה לארגן את הקוד ב-Ansible, במיוחד בפרויקטים גדולים. Role הוא קבוצה של Playbooks, מודולים, ותבניות שמאפשרים לארגן את ההגדרות לפי תפקידים שונים (כגון התקנת Apache, ניהול משתמשים, וכו').
להלן דוגמה ליצירת Role עבור התקנת MySQL:
ansible-galaxy init install_mysql
הפקודה הזו תיצור תיקיה בשם "install_mysql" עם מבנה קבצים המוכן לשימוש. תוכלו להוסיף את ה-Playbooks והמשאבים הנדרשים לתיקיה הזו.
סיכום
Ansible הוא כלי עוצמתי לניהול קונפיגורציות, המאפשר לבצע אוטומציה של פעולות רבות בצורה פשוטה וברורה. בעזרת Ansible, תוכלו לנהל מאות ואלפי שרתים בקלות, להגדיר משתמשים, לנהל חבילות ולהעתיק קבצים בצורה יעילה. השימוש ב-Roles ובמודולים מתקדמים מאפשר לארגן את הקוד בצורה יעילה ולהתמודד עם פרויקטים מורכבים.
אם אתם מעוניינים ללמוד בצורה מעמיקה יותר אתם מוזמנים להתייעץ איתנו על קורס DevOps.