למה בחרנו לנהל תשתית כקוד דווקא עם Hashicorp?

על אף מחשוב הענן, חברות רבות עדיין מנהלות מערכות מורכבות במיוחד שדורשות להתגבר על אתגרים של פיתוח, ניהול ואבטחה של תשתיות ב-Scale גבוה. ניהול תשתית כקוד היא דרך מצוינת להתמודד, אך חשוב לדעת כיצד לעשות זאת

Emilija Manevska/ Getty Images Israel

צלם/תמונה: Emilija Manevska/ Getty Images Israel

מאת דני שמש, DevOps Engineer ב-Fyber

עידן מחשוב הענן שינה את כללי המשחק בכל הקשור להקמת שרתים וסביבת עבודה ממוחשבת. כיום חברות רבות כבר יודעות שבאמצעות הענן ניתן להקים ולנהל תשתית מחשוב בזול, באופן גמיש ובקלות יתרה, ולקבל מגוון יכולות שהיו באופן מעשי בלתי ישימות מבחינתן, כמו פריסת שרתים במקומות שונים בעולם.

התהליך אמנם פשוט יותר, אך גם הקמה של תשתית תוכנה, שכוללת אפליקציה אחת ומספר שרתים עימם היא צריכה לתקשר (מסדי נתונים וכדומה), תכלול לכל הפחות מספר שרתי אפליקציה, הגדרה של המיקום הפיזי שבו יוקמו השרתים, רכיבי רשת רבים וחיבור ביניהם ורכיבי אבטחה שישמשו את השרתים. כלומר, עדיין מדובר על מערכת די מורכבת.

חברת Fyber שפועלת בתחום ה-Ad Tech ומפתחת טכנולוגיות לפרסום מודעות במובייל, מתמודדת עם תשתית מורכבת במיוחד. היא בעלת סביבת חומרה ותוכנה הטרוגנית הכוללת מערכות רבות, שנמצאות במספר חשבונות של ספקיות ענן. מערכות אלה צריכות לעמוד ב-Scale גבוה מאוד, ולכן רצות על מאות ולעתים אלפי מכונות וכמובן גם חולקות משאבים ומתקשרות בניהן.

סביבה כזו טומנת אתגרים רבים לצוות ה-DevOps: מההקמה והניהול, דרך הפיתוח ומעקב אחר מערכות, האינטגרציה ועד ניהול האבטחה וההרשאות של המערכות מול הרשת והמפתחים. כדי לפתור את הבעיות האלה אנחנו ב-Fyber נעזרים במוצרי Hashicorp.

Hashicorp היא חברת תוכנה שמוצריה מיועדים לפתור בעיות פיתוח, ניהול, חיבור ואבטחה של מערכות שונות (אפליקציות) על גבי כל סוג של תשתית. היא עובדת בשיטת Freemium, מוצריה הם Open Source ולכל מוצר יש גרסת Enterprise בתשלום. עם זאת, גרסת ה-Open Source של כל המוצרים מספיקה בהחלט גם לשימושים המגוונים והמאתגרים שלנו.

אנחנו משתמשים בשלושה כלים עיקריים בעבודה עם תשתיות: Terraform להקמת תשתיות, Consul לניטור המערכות והתקשורת ביניהן ו-Vault לאבטחה וניהול הרשאות (על שני האחרונים תוכלו לקרוא במאמר הבא).

Infrastructure as code עם Hashicorp Terraform

תשתית כקוד היא דרך עבודה לניהול תשתית או תוכנה בעזרת קוד. כלומר, קידוד של מרכיבי התשתית במקום כתיבת סקריפטים ופעולות ידניות. ישנם כלים רבים לניהול תוכנה או תשתית באמצעות קוד, וחשוב להבדיל בין אלה המיועדים לניהול קונפיגורציה ולהתקנת כלים ושירותים על גבי שרתים קיימים (Configuration management), דוגמת Chef ו-Puppet, ובין כלי אוטומציה לתשתית בענן (Configuration orchestration), שבעיקר מנהלים הקמה ופריסה של השרתים עצמם (ורכיבי תשתית אחרים), כמו CloudFormation ו-Terraform.

היתרונות לניהול תוכנה וקונפיגורציות בשרתים באמצעות קוד הם די אינטואיטיביים: האפליקציה שלנו, על כל המשאבים שהיא צריכה וההגדרות הדרושות, תותקן ותעודכן באופן אוטומטי בשרת הקיים.

אך מה היתרונות בהקמת שרתים באמצעות קוד?

הגדרת מערכת כחלק מתשתית מורכבת, ובעיקר שינוי במערכת כזו באופן ידני, יכולה להיות פעולה מסובכת במיוחד, ודורשת את הבנת תפקידו של כל משאב שהגדרנו ומערכת התלויות בו. במקרים רבים, לאחר שהקמנו מערכת כזו והצלחנו לגרום לה לעבוד תוך כדי ניסוי וטעייה, נרצה להרוס אותה ולהקימה מחדש בצורה נקייה.

זאת ועוד. בתהליך העבודה בחברה המעבר מפיתוח שירות, אפליקציה חדשה או פיצ’ר ועד פריסתם בסביבת פרודקשן, עובר דרך סביבת Development, שם הוא נבדק על ידי מפתחים ואנשי QA. לאחר מכן המוצר עובר לסביבת Staging, שם נבחנות יציבותו ויעילותו בתנאי סביבת פרודקשן. סביבות אלה מכילות מערכות זהות עד כדי הבדלים קטנים של קונפיגורציה, ובתהליך עבודה כזה היכולת להקים מערכת זהה למערכת קיימת בצורה אוטומטית היא הכרחית.

הקמת השרתים ויתר המשאבים באמצעות קוד פתרה עבורנו את הבעיות הללו: הגדרת המערכת כתובה כך שקל להבין אותה; שינוי במשאב מסוים יגרור שינוי ביתר המשאבים שתלויים בו באופן אוטומטי, אם יש צורך בכך; והגדרת המשאבים והמערכות בקוד תיעשה פעם אחת, ואילו הקמה והריסה שלהם נעשית בקליק.

אך לאוטומציה לקידוד תשתיות בענן יש יתרונות חשובים נוספים, שמבחינתנו הופכים את הקמת התשתית כקוד לדרך עבודה הכרחית כשמדובר בתשתית מורכבת:

  • תכנון התשתית לפני הקמה או שינוי והקמה של כל רכיבי המערכת, לפי תלויות, בפקודה אחת
  • שימוש חוזר בקוד לסביבות שונות והימנעות מחוסר קונסיסטנטיות ביניהן על ידי פעולות ידניות
  • הימנעות משגיאות אנוש
  • ניהול גרסאות
  • אנשי הפיתוח (Devops) יכולים לעבוד ביחד עם אותן קונבנציות
  • אלגנטיות וחיסכון בזמן ובכסף

לבחור את המוצר הנכון

אז לניהול תשתית כקוד יש יתרונות גדולים, אבל בשוק קיימים מוצרים רבים והחוכמה היא לבחור בזה שיתאים בצורה הטובה ביותר לצורכי החברה שלכם. אנחנו כאמור בחרנו ב-Terraform משום שהייחודיות שלו היא שהוא לא תלוי פלטפורמה (Platform agnostic), בניגוד לשאר המתחרים שהם מבית ספקיות הענן הגדולות AWS/Google/Azure. כך ניתן לעבוד עם Terraform כדי להקים תשתית בכל מקום וקל יותר לעבור מספק ענן אחר.

בנוסף, הפלטפורמה הזו הציעה יתרונות שעבורנו היו מהותיים לעבודה קלה ונכונה יותר:

  • יש לה אינטגרציה עם ספקים רבים נוסף על ספקיות הענן, למשל עם מנהלי קונטיינרים דוגמת Kubernetes, בסיסי נתונים פופולריים ועוד
  • קוד בסינטקס פשוט (HCL, או Json)
  • הפרדה בין שלב תכנון, הרצה בצורה יבשה וקבלת תמונה מלאה ודיסקריפטיבית של סביבת העבודה העתידית לאחר שיופעלו השינויים.
  • ניתן להוסיף קוד למערכת ולכתוב ספק שלכם. כלומר, להוסיף קוד שיאפשר את יצירת משאבי המערכת שלכם בשפה שלכם.
  • אמינות, דוקומנטציה נהדרת, תחזוקה ופיתוח מתמיד.
  • ממשק עם מוצרים נוספים של Hashicorp

אז איך זה עובד?

נדגים הקמת Replica-set (קבוצת שרתים שמתקשרים ביניהם ומגבים זה את זה), בעל שלושה חברים של מסד הנתונים MongoDB. נכתוב קוד בתיקייה שנקרא לה tf-mongodb, שתפקידו להקים את השרתים על גבי שרתי AWS, עם משאב אבטחה (security group) שיאפשר תקשורת פנימה לשרתים בפורט 27017.

בתמונה קיבצנו בקובץ אחד משאב מסוג aws_instance, שעליו יהיה שרת MongoDB ויוקם count פעמים ו-security group. כל ההגדרות שיכולות להשתנות יוגדרו במשתנים (vars) ויתקבלו בהפעלה (ההתקנה של אפליקציית MongoDB עצמה תעשה דרך המשתנה user_data, אך זה מחוץ לסקופ שלנו).

כעת נגדיר מודול שדרכו נבנה את המשאבים שהגדרנו קודם, עם ההגדרות המתאימות:


בשלב זה, הרצת הפקודה ‘terraform plan’ תתאר לנו בצורה מדויקת את המשאבים שעתידים להיווצר:


בפקודת ‘terraform apply’ הם ייווצרו. באותו אופן, בפקודת ‘terraform apply’ יבוצעו שינויים במודול אם נשנה את אחת ההגדרות ופקודת ‘terraform destroy’ תמחק את המשאבים.

באופן דומה בנינו בחברה את כל תשתיות הענן שלנו ואת השרתים והשירותים שעל גביהם עם Terraform וכיום אנחנו חוסכים בכל יום זמן וטעויות באמצעות אוטומציה מלאה. שינוי קטן או הקמת תשתית מלאה בסביבה חדשה, תעשה (לאחר הוספת ההגדרות המתאימות), בקליק.

הקמת התשתית היא הבסיס, וכעת המטרה היא שהשרתים והשירותים שהקמנו יוכלו לעשות את העבודה שלהם ויהיו מבוקרים ומאובטחים. לשם כך הם צריכים, בין השאר, להיות מסוגלים להכיר ולתקשר ביניהם, לקבל הרשאות אבטחה מתאימות ולהיות מנוטרים.

איך עושים זאת? בחלק הבא נתאר את הדרך שלנו, לשימוש בכלים Consul ו-Vault.

הכתבה בחסות Fyber

חברת Fyber הינה חברת Advertising Technology בינלאומית, עם מעל 300 עובדים בכל העולם, מייצרת פתרונות טכנולוגיים אשר מאפשרים למפתחי אפליקציות להציע תוכן חינמי באמצעות פרסומות, תוך כדי שימור חוויית המשתמש.
לבלוג הטכנולוגי של חברת Fyber - לחצו כאן.
למשרות הפתוחות חברת Fyber - לחצו כאן.

כתב אורח

אנחנו מארחים מפעם לפעם כותבים טכנולוגים אורחים, המפרסמים כתבות בתחומי התמחות שלהם. במידה ואתם מעוניינים לפרסם פוסט בשמכם, פנו אלינו באמצעות טופס יצירת קשר באתר.

הגב

14 תגובות על "למה בחרנו לנהל תשתית כקוד דווקא עם Hashicorp?"

avatar
Photo and Image Files
 
 
 
Audio and Video Files
 
 
 
Other File Types
 
 
 

* שימו לב: תגובות הכוללות מידע המפר את תנאי השימוש של Geektime, לרבות דברי הסתה, הוצאת דיבה וסגנון החורג מהטעם הטוב ו/או בניגוד לדין ימחקו. Geektime מחויבת לחופש הביטוי, אך לא פחות מכך לכללי דיון הולם, אתיקה, כבוד האדם והדין הישראלי.

סידור לפי:   חדש | ישן | הכי מדורגים
אביב
Guest

מאמר מעולהה !!
מקווה שבעתיד הקרוב הרבה מהארגונים יעברו לעבוד בתצורה הזו

דני כל הכבוד על ההשקעה ועל המאמר המקיף !! אלוף !

גדי
Guest

מסכים לגמרי
מקיף ומלמד

אשמח לעוד מאמרים בנושא

חזי
Guest

פרסומת

אלחנן
Guest

אם יש לזה תוכן עם ערך, מה איכפת לך שזה ממומן… לא הבנתי את הקטע

Futuhre
Guest

היי, אשמח לדעת מה היתרונות לעומת תשתית k8s עם מערכת לוגים elk ב cluster, או משהו בסגנון.
מה שאתם מציגים זה למערכות שהם לא עברו תהליך דוקרזציה?

Dani Shemesh
Member

הי, אנחנו ב Fyber משתמשים בקוברנטיס ודוקרים והכל, ונעזרים בTerraform כדי לבנות את הקלאסטרים של קוברנטיס, כך שזה לא סותר. אם זה מעניין אותך, בmeetup האחרון שקיימנו בנושא ספארק על קוברנטיס, דובר קצת על תהליך בניית הקלאסטר עם Terraform.

אילן
Guest

יופי של כתבה,
ללא ספק בעידן הנוכחי, התשתית חייבת לענות על הצורך של Scaling, וללא ספק שקוד היא הדרך הטובה ביותר.
ועדיין, יש לי בעיה קשה עם עוד כלים שדורשים הכרות מעמיקה של טרמינולוגיה עבור הכלי. DevOps גם כך עובדים עם כ״כ הרבה טכנולוגיות שצריך להשתמש בכלים שמשתמשים בשפות סטנדרטיות.
kaholo.io בעצם עונה על בעיה זו בכך שה-YAML הוא בכלל מראה ויזואלי של תהליך בעוד שמאחור התהליך נכתב בשפה שנוחה למשתמש.
בכך, נחסכת הרבה עבודת פיתוח וגם התהליכים שנכתבים בנויים בצורה יעילה יותר.
מיותר לציין ש-kaholo.io היא סביבת פיתוח שפתוחה למשתמש בגיטהאב.

Screenshot 2019-03-27 16.04.42.png
Screenshot 2019-03-27 16.05.04.png
Screenshot 2019-03-27 16.05.15.png
גיא
Guest

שלום דני, אחלה כתבה!

התחלתי להשתמש ב- Terraform לאחרונה ויש שאלה – אשמח אם תוכל לעזור:
לאחר ביצוע apply יצרתי מכונת VM של vSpere.
האם ניתן להשתמש ב- VM שיצרתי, לאחר מכן – אם אני רוצה לשלוח לה למשל פקודת linux cli?
ביצירה, אני עושה את זה ב- “remote-exec” – אבל איך אני מוסיף אחרי כן לקובץ הקונפיגורציה שלי פקודת CLI מבלי ליצור מכונת VM נוספת, אלא להשתמש במכונה קיימת – זו שיצרתי?

תודה,
גיא

Dani Shemesh
Member
שלום, אם הבנתי נכון, אתה רוצה לעשות את העדכון בTerraform גם כן? אם כן זה די מעניין מודע שתרצה לעשות זאת עם Terraform כשאתה יכול לעשות את זה ידנית במכונה או אוטומטית אם צריך בסקריפט או כלי כמו Jenkins? בכל מקרה בתקווה שהבנתי נכון אתה יכול- תוכל להשתמש ב- null_resource כמו בתמונה המצורפת. יתכן שכבר עשית את זה ואתה מעוניין שבכל הפעלת apply נוספת תהיה הפקודה תתבצע שוב. יש טריק קטן בשביל זה… בעיקרון, ברגע שעשית בפעם הראשונה apply, בפעם הבאה שתבצע apply לא יקרה שום דבר כי הכל up to date. גם אם תבצע שינוי בפקודת ה-remote-exec עצמה, מבחינת… Read more »
גיא
Guest
תודה רבה דני! נכון, כך יישמתי את זה בסוף – לקח לי לא מעט זמן להגיע לזה. חבל שלא ראיתי את התשובה שלך לפני… אגב, משום מה המשתנה command אינו מוכר לפלאג אין בו אני משתמש (provider-null_v2.1.0), כך שאיני יכול להריץ פקודה בודדת אלא כחלק מ – list בתוך משתנה שנקרא inline. גמו כן, יש לי שאלה נוספת :) האם אני יכול להוסיף remote-exec באותה שיטה לאחר שכבר יצרתי את הקונפיגורציה (כלומר לאחר apply). כלומר אם אני מוסיף קוד של null_resource עם remote-exec – האם זה יתבצע לאחר ביצוע apply נוסף? אגב, היות ואני רוצה להריץ את זה אוטומטית ורוצה… Read more »
גיא
Guest

היי דני, כנראה שפיספסתי את חלקה השני של תגובתך. זה בהחלט עונה לי על השאלה של שליחת פקודה לאחר apply.
אבדוק את זה – התעלם מתגובתי הקודמת.
תודה רבה על המייל. אם לא אסתדר אדבר איתך.
תודה :) !!

Dani Shemesh
Member

בשמחה :)

Dani Shemesh
Member

הי, תודה.
אני דווקא חושב שאחד היתרונות של Terraform הוא הקלות שבה כותבים את הקוד, הדוקיומנטציה שהיא באמת מעולה והקהילה. לגבי kaholo.io, אינני מכיר את החברה, ואני לא מוצא הרבה אינפורמציה לגבי המוצר ברשת, מלבד העובדה שהיא חברה ישראלית וזה נחמד. באופן מפתיע אפילו באתר של החברה עצמה אין פירוט לגבי העבודה עם המוצר שלהם.

תומר
Guest

כתבה מעניינת ושימושית מאד, תודה.
מחכה ל-2 הבאות..

wpDiscuz

תגיות לכתבה: