שלום לכולם, היום אני רוצה להסביר על כלי שימושי שיעזור לנו – אנשי ה-DevOps לעבוד בצורה יעילה ונוחה יותר. Vagrant הוא כלי שפועל מעל פלטפורמות וירטואליזציה כמו VMware, VirtualBox. הוא עוזר באוטומציות כגון קנפוג והרמת VMs כך שמגע יד האדם שמעורב בכך יהיה מינימלי. זאת, תוך כדי שמירה על instant provisoning (אספקה מהירה ואיכותית).
מהו עולם הבעיה?
נסביר באמצעות דוגמא. נניח שנרצה להתקין nginx על vm שמבוסס על Ubuntu. נצטרך לעשות כמה דברים:
- להוריד את ה-ISO של Ubuntu.
- להרים את המכונה באמצעות פלטפורמת וירטואליזציה ולקנפג כמה משאבים אנחנו רוצים שיהיה לה.
- להתחיל את המכונה
- להתקין nginx + ולקנפג אותו
זה לא מעט דברים שנצטרך לעשות באופן ידני. בנוסף, לפעמים נצטרך לחכות כמה דקות בין שלב לשלב. אז יש דרך לעשות את כל התהליך הזה בצורה פשוטה ואוטומטית. כאן Vagrant נכנס לתמונה. הוא יעזור לנו לאטמט את התהליך
vagrant
כלי open source שמקל בכל מיני תהליכים ידניים ומייגעים כגון: הקמת vm, הוספת קונפיגורציות ל-vm קיים ועוד. הוא מפשט את התהליך של ניהול שרתים וירטואליים בכך שהוא מאפשר להגדיר את השרתים שלנו בעזרת קוד. לכן, נוכל לנהל גרסאות של שינויים שאנחנו עושים.
נוכל להגדיר קובץ שבו נרשום את כל הקונפיגורציות של המכונה שלנו. כך נוכל להעביר את ההגדרות האלה באמצעות קובץ txt ששוקל כמה kilobytes ולא כקובץ ISO ששוקל כמה gigabytes.
הקובץ txt הזה נקרא Vagrantfile. זה קובץ שמכיל את הקונפיגורציות של המכונה (קצת מזכיר Dockerfile ברעיון). הוא כתוב ב-ruby וניתן לשלב בו גם סקריפטים של bash ועוד.
השימוש העיקרי של Vagrant הוא הקמת סביבות שרתים עבור בדיקות, אינטגרציות וסביבות מבצעיות. היתרון הבולט של הכלי הזה הוא הפשטות שהוא מבא איתו עבור הצרכים האלו.
עוד קונספט חשוב הוא vagrant box. אפשר להסתכל על זה כ-template שמכיל כל מיני קונפיגורציות. כך, גם נוכל ליצור הרבה מכונות מאותו ה-template.
איך מתקינים?
ראשית, צריך שתהיה לנו על המחשב פלטפורמת וירטואליזציה כלשהי.
שנית, צריך להתקין את התוכנה עצמה.
התוכנה זמינה להתקנה עבור רוב מערכות ההפעלה:
אחרי שהתקנו את שני הדברים, אפשר להתחיל לעבוד עם זה.
demo
זמן נדרש: 10 דקות.
- יצירת תיקייה ריקה
ניצור על המחשב שלנו תיקייה ריקה ששם יישבו הקונפיגורציות של Vagrant.
- אתחול vm עם box שרלוונטי לנו
אם נחפש בגוגל vagrant box ubuntu with nginx נגיע לעמוד הזה. מתועד איך להשתמש ב-box הזה בראש העמוד תחת New. נריץ את הפקודה הבאה בתוך התיקייה שיצרנו:
vagrant init damianlewis/ubuntu-18.04-nginx-php
- נבדוק שנוצר לנו קובץ הקונפיגורציות של ה-box
נבדוק אם נוצר קובץ בשם Vagrantfile בתוך התיקייה שלנו.
- נרים את המכונה
הפקודה vagrant up תיצור לנו את המכונה עם כל הקנפוגים שנמצאים ב-Vagrantfile.
- נתחבר למכונה
אחרי שהפקודה הקודמת הסתיימה, נרשום vagrant ssh וזה יקים לנו חיבור ssh עם המכונה. כעת, אנחנו אמורים להיות בתוך ה-VM ? .
Vagrant shares
לעיתים, נרצה להעביר קבצים ותיקיות מה-host ל-VM ולהפך. vagrant מספק פיתרון גם לצורך הזה. הוא יוצר באופן דיפולטי share דו כיווני מהתיקייה שבה נמצא ה-Vagrantfile על ה-host לנתיב vagrant/ על המכונה.
ב-Vagrantfile אפשר להגדיר עוד share-ים, לדוגמא:
config.vm.synced_folder "../another-share-on-host", "/another-share-on-machine"
בדוגמא הגדרנו עוד share. חשוב ליצור את ה-share על ה-host לפני שמשנים את הקונפיגורציה ב-Vagrantfile. במקרה שלנו, ה-share הוא another-share-on-host.
כדי להחיל את הקונפיגורציה הזאת (ובכללי) על המכונה ניעזר ב:
vagrant reload
חשוב לזכור להריץ את הפקודות של vagrant מהתיקייה שיצרנו בהתחלה (התיקייה עם Vagrantfile).
Vagrant networks
vagrant תומך בשלוש שיטות שונות בגישה ל-guest machine:
port forwarding: פניות שיגיעו ל-host בפורט מסוים – יעברו ל-vm בפורט אחר.
private network: בשיטה הזאת יוצרים רשת פנימית שמאפשרת גישה ל-host אך לא “לעולם החיצון”.
public network: ה-vm יישא כתובת ip, יהיה אפשר לגשת אליה בדיוק כמו שאפשר לגשת ל-host.
דוגמא של port forwarding:
config.vm.network "forwarded_port", guest: 80, host: 8080
זאת שורה שאפשר להוסיף ל-Vagrantfile וכך נגדיר שתעבורה שמגיעה ל-host בפורט 8080 תעבור ל-guest machine בפורט 80. אני מזכיר שאחרי שמעדכנים קונפיגורציות, צריך לרשום vagrant reload כדי להחיל את הקונפיגורציה.
הפקודה vagrant destroy אמורה להרוס את המכונה – כלומק למחוק כל מה שנעשה עליה (Services, files, users). המכונה תחזור להיות במצב ההתחלתי שלה. הדבר היחידי שיישאר הוא ה-share מה-host ל-vm.
לסיכום, במאמר הזה הסברתי על vagrant, בשביל מה הוא נועד, איך משתמשים בו וכל מיני דברים שחשוב לשים לב אליהם.