קצת על Scale Out עם פלטפורמות יעודיות

בשנים האחרונות אנחנו עדים ליותר ויותר פלטפורמות שעובדות בשיטות של Scale Out. הפלטפורמה הכי ידועה לדברים כאלו היא כמובן Kubernetes, אך כמובן שישנן פלטפורמות אחרות שקשורות יותר לעיבוד נתונים – Kafka או Cassandra לדוגמא, כל אחת מהן פלטפורמה לצרכים שונים, אבל מבחינת צרכי חומרה, הצרכים הם פחות או יותר זהים: מעבדים בינוניים (לא צריך כמות מפוצצת של ליבות, יספיקו 8-16), ולא צריך דיסקים (קשיחים או SSD) יקרים.

כלומר – אם אתה צריך להריץ פלטפורמה שעובדת ב-Scale Out מקומית בתשתית שלך, אל תנסה לחפש את היוקרתי עם כל מילות הבאז האחרונות, אלא ההיפך – מי הספק שיכול לתת לך את ההצעה הכי זולה שתעמוד במפרט שנקבע מראש, SLA שאתה צריך וכו'. ב-Scale Out אין את מושגי השרידות מעולם ה-Scale Up. אין Heart beat, אין Active/Passive, Active/Active וכו'. עם Scale Out בדרך כלל הפלטפורמה תהיה בנויה כך שאם שרת למטה/אינו זמין/אינו פעיל, המערכת תאזן את עצמה אוטומטית (למי שמשתמש ב-Kubernetes ורוצה לראות זאת – תורידו Node ותראו איך זה עובד).

מכיוון שפתרונות Scale Out תופסים יותר ויותר תאוצה, פתרונות Scale Up כמו סטורג'ים קנייניים, מנסים "לתפוס טרמפ" על הטרנד (כמה שאפשר לקרוא לזה כך). מריץ Kubernetes? הפתרון שלנו יודע לתמוך בווליומים, ובאחסון כזה וכזה, ובוודאי שהיא מתאימה לאחסון עבור פתרונות Scale Out!

וזהו – שההצהרה לעיל נכונה רק בחלק מהמקרים. אם אתה מריץ יותר מ-5-10 שרתי Cassandra או Kafka כפרודקשן ואתה מכניס דרך ה"מפיקים" (Producers) המון מידע שמגיע ממאות/אלפי חיישנים או מקורות שונים, הסטורג' הקנייני יהפך די מהר לצוואר הבקבוק.

אחת השגיאות שאפשר לראות בפורומים שונים, זה שאנשים שעובדים עם פתרונות Scale Out מחפשים איך לאחסן את כמות הנתונים שהולכת וגודלת והם עדיין לא מכירים/מבינים את עניין ההוספה המתמדת של ברזלים ודיסקים מקומיים – והם תמיד יקבלו את הצעות הפתרונות שמתאימים ל-Scale Up: לתכנן את הגדילה למשך שנה וכו' וכו' ואז לבחור סטורג'. זו טעות, כי בעולם המדידות/דגימות ושימוש בפלטפורמות Scale Out אתה מחפש לקבל כמה שיותר מידע, לא כמה שפחות, ויכול להיות שהחודש הקרוב אתה תוסיף עוד 4 טרה מידע לחודש אבל בעוד 3 חודשים זה יקפוץ ל-15 טרה לחודש. בגדלים כאלו, שום פתרון סטורג' קנייני אינו מתאים, אלא אם רוצים "לשרוף" את תקציב החברה, ולכן יש צורך ללכת לפי הפתרון של הפלטפורמה, לא לפי שם/דגם של סטורג'.

ולכן:

  • אם הולכים להשתמש בפלטפורמה שהיא בראש ובראשונה Scale Out לצרכי עיבוד נתונים/קליטת נתונים – נצטרך דיסקים ושרת מהקצה הנמוך-בינוני, מבלי להשקיע יותר מדי כספים פר ברזל (קחו דיסקים בסיסיים, בפוסט קרוב אסביר לגבי הגדרות אחסון מקומי למערכות כמו Kafka ו-Cassandra), (אגב, אם אתם רוצים להריץ Kafka בענן, אמזון לדוגמא שמחה להציע לכם את MSK).
  • אם אנחנו רוצים לשמור כמות גדולה מאוד של מידע לאחר עיבוד או ארכיבאי כשהכמות גודלת כל הזמן, או שאנחנו צריכים Object Storage – פתרון אחסון Scale Out (כמו Gluster) יתאים יותר לשימושים הללו מכיוון שעלות הגדילה היא זולה, והביצועים גודלים ככל שמוסיפים ברזלים לאותו אחסון.

לסיכום: בעולם ה-Enterprise, הסטורג' הקנייני היה ה-דבר הכי חשוב וקריטי. אין סטורג', שום דבר לא פועל. מאז הגיעו ספקי הענן הציבורי הגדולים שהכריזו שאצלם אין ולא יהיה שום סטורג' מרכזי, ובמקביל התפתחו יותר ויותר פלטפורמות שמחזירות את השימוש בדיסקים מקומיים ומאפשרות לבנות אחסון מדיסקים זולים וממשאבים צנועים, וזהו בדיוק החלק שבמחלקות ה-IT או ה-CIO/CTO צריכים להבין: אל תנסו לכפות פתרון Scale Up על פתרון Scale Out.

קצת לפני שמכריזים על זוכה במכרז

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

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

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

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

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

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

  • לא לרכוש את השרות כ-SAAS (שימו לב: אני לא מדבר על מחיר). כשספק ענן ציבורי מציע שרות כ-SAAS, אתם יודעים שאותו ספק יהיה קיים ב-3-5 השנים הקרובות ולכן שרותי ענן שונים בתצורת SAAS אין בעיה לשכור אותם, אולם כשחברה בונה לך פתרון ומנגישה לך אותו כ-SAAS, אותה משרד/חברה מכניסה את עצמה למצב של "בת ערובה" אם בהמשך אין הסכמה על מחירים, או אם המשרד/גוף לא מרוצים מהביצועים, לדוגמא.
    אני רוצה לסייג: אם אתם צריכים לרכוש Firewall או כל אפליקציה שכוללת OS לינוקסאי דרך ה-Market של ספק הענן זה בסדר, אבל אם זה משהו שמפותח עבורכם – בקשו שיתקינו את הדברים על התשתית הוירטואלית שלכם, מקומית או בחשבון ענן שלכם.
  • על מה זה רץ? ברוב המקרים כיום הפיתוח של פתרון עבורכם יבוצע תוך שימוש בפלטרפורמה כזו או אחרת. חשוב מאוד לבדוק איזו פלטפורמה ואיזו גירסה, האם יש בה שימוש כיום, האם יש קליפים או עדויות לגבי אותה פלטפורמה? מתי עדכנו אותה לאחרונה? הדבר האחרון שאתם רוצים זה שספק מציע ישתמש במשהו ישן שכבר כמעט מת – בשביל לבנות עבורכם את מה שהנכם מבקשים.
  • חישובי ענן ציבורי. אם השרות שאתם רוצים צריך לרוץ על ספק ענן ציבורי, עדיף שהחברה/גוף המבקש הצעות יבקש הקמה על התשתית בחשבון הענן שלו ועדיף לבדוק היטב מה יש בסעיפי התמיכה. כך לדוגמא, רבים כשעוברים לענן מחפשים לקחת את שרותי התמיכה היקרים ביותר (24/7 פלטינום או כל שם אחר) מבלי להבין שבמקרה ויש תקלה והיא קיימת לא רק בחשבון החברה אלא גם אצל אחרים – לא תקבלו שרות יותר מהיר ותצטרכו לחכות לפתרון התקלה כמו כולם.
  • אם כבר מדברים על חישובי ענן ציבורי: שרותים. ספקי ענן ציבורי מציעים שרותים שונים שהם אבולוציוניים, כלומר – בהתחלה הוצעה שרות בשם X, לאחר זמן מה הוצע שרות Y שהוא בעצם "אבולוציה" של שרות X וכו'. במקרים רבים יש גם הפרשי מחיר ניכרים בין השרותים וגם הבדלי ביצועים רציניים, אך הבעיה היא שמציעים גדולים לא ממש טורחים (לא ממש באשמתם כש-AWS מציעים כמעט כל יום שרותים חדשים) להכיר את השרותים השונים ולכן כדאי לראות מה יש בהצעה ולהחליף בשרותים מודרניים יותר או במקרים מסוימים אם יש את הידע – להקים את הדברים עצמאית בתשתית הענן.
  • גישה לקוד מקור ותיעודו: כיום כשמפתחים לענן ציבורי ומשתמשים בפלטפורמות/ספריות שונות, ברוב המקרים הקוד עצמו פתוח וזמין וכדאי להחיל זאת גם לדברים שמפותחים עבור משרדים/גופים/חברות – המציע הולך לפתח עבורך משהו? דרוש את קוד המקור ותיעוד API ודברים שונים ששונו.
  • אבטחה: תמיד חשוב לזכור – ענן ציבורי נותן אפס אבטחה. אפשר לשכור שרותים שונים ולבצע הגדרות שונות כדי לקבל אבטחה ברמה טובה, אבל זה לא מגיע כברירת מחדל ולא בחינם. כדאי שגוף חיצוני (לא מטעם המציע) יבדוק את המערכת, ואם יש תקציב – לבצע Code Auditing.

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

המעבר ל-10 ג'יגהביט למעבדה קטנה

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

כפרילאנסר, אחת הסברות שאני שומע שוב ושוב בעולם ה-Enterprise מכל מיני מנמר"ים/CTO/CIO – זו התרשמות, שלא לאמר התפעלות – משרתים חדשים שמיוצרים על ידי המובילים: לנובו, Dell, Cisco, HPE, ואחרים. תראה להם מכונה עם 4 מעבדים – והם פותחים עיניים (טוב, עד שהם רואים את תגית המחיר). אותו דבר קורה כשמדברים על ציוד תקשורת – רוב החברות בארץ משתמשות עדיין בתקשורת 1 ג'יגהביט, 10 ג'יגהביט, 25 ג'יגהביט, Infiniband (במקרים מסויימים) במהירות 56 ג'יגהביט היא השיא. 100 ג'יגה ומעלה? נדיר למצוא, גם במקומות שהתקציב מאפשר ועל 400 ג'יגהביט – לא שמעתי שום מקום שמשתמש בזה.

עם כניסת ספקי העננים בשנים האחרונות (או בשמם היותר ידוע: Hyperscalers), חל דבר מעניין מאוד: ברוב מוחלט של המקרים (ואני מדבר על מעל 95%) אף ספק כזה לא היה מוכן לרכוש ציוד של Enterprise – בין אם מדובר בשרתים, סוויצ'ים, סטורג', גיבויים וכו'. הסיבות די פשוטות: הסיבה הראשונה קשורה למחיר החסר פרופורציות לחלוטין פר ברזל, והסיבה השניה – הציוד לא יכול לעמוד בדרישות שלהם, וכך בהחלה כל ספק Hyperscaler החל לתכנן ולבנות את הציוד שלו, ואז הגיעו פייסבוק שחוללו מהפכה והחליטו לפתוח את כל המפרטים של הציוד שלהם, כולל סכימות וכו' תחת מטריית ה-OCP (ר"ת Open Compute Project). לקח קצת זמן עד שענן החשדות מצד ספקי Hyperscalers ירד ואז כולם החלו לשתף את המפרטים. התוצאה: מאות חברות חדשות שקמו שהחלו לתכנן ולמכור את הציוד לספקי ה-Hyperscalers במחירים יותר נמוכים ממה שביקשו ספקי ציוד ה-Enterprise בשעה שהציוד נתן הרבה יותר מבחינת ביצועים.

מאז החלו לזלוג לשוק ה-Enterprise חלק קטן מאותו ציוד: למי שמכיר את הקופסאות JBOD 4U – כן, זה התחיל ב-OCP. מתגי תקשורת שבעבר היו מערכות סגורות עד הקצה – כיום יש יותר ויותר מתגים שמשתמשים במעבד רשת של Broadcom ושבב X86 של אינטל שמריץ לינוקס כדי לנהל את הכל ואתה מבצע בעצם את הכל דרך לינוקס עם הפקודות הידועות והמוכרות.

אז כמו שבקצה העליון שבו נמצאות חברות ה-Hyperscalers התרחש שינוי, גם בקצה התחתון התרחשו ומתרחשים שינויים שמטרתם בסופו של יום להביא חלק מטכנולוגיות ה-Enterprise – אל הקצה התחתון, למעבדה הקטנה, המעבדה הביתית, לאותם אנשים שלא יכולים להוציא 50K על ציוד כדי להריץ LAB נורמלי.

כשאני משוחח עם חברים ושואל אותם לגבי ה-LAB שלהם מדוע הם לא עוברים לחיבוריות פנימית של 10 ג'יגהביט, עולות מיד סיבות שלא ממש נכונות כיום. חלקן:

  • מחיר המתג וההמרה ל-10 ג'יגהביט יקר מדי
  • בשביל מה צריך את זה? 1 ג'יגהביט מספיק
  • קשה לחבר מעל 2 מחשבים בלי מתג
  • קשה להגדיר

אז נתחיל מהסיבה הפשוטה ביותר: רוחב פס מוגבל. נניח שיש לכם NAS, לא חשוב איזה NAS. נניח שיש בו 4 דיסקים מכניים (בלי להזכיר שום SSD) ונניח שהם מוגדרים ב-RAID כלשהו (לא חשוב איזה). מהירות ממוצעת לקריאה/כתיבה של דיסק מכני היא נעה בין 100-200 מגהבייט לשניה וזה לדיסק יחיד. נכפיל ב-4 לצרכי קריאה לדוגמא, ואנחנו מקבלים מהירות שנעה בין 400 ל-800 מגהבייט. תזכורת: מהירות 1 ג'יגהביט מתורגמת בערך ל-120 מגהבייט, כלומר דיסק יחיד "חונק" את חיבור ה-1 ג'יגהביט. יבואו אנשים ויאמרו "אפשר לצוות מספר חיבורים", שזה נכון, אז בואו נצוות 4 חיבורים של 1 ג'יגהביט ונקבל מהירות ברוטו תיאורתית של … 480 מגהבייט, כלומר את החיבור המצוות אנחנו "נחנוק" עם תעבורה של בערך 2.5 דיסקים קשיחים מכניים (שוב, לא מזכיר SSD שזורק מיד כל חיבור 1 ג'יגהביט).

נעבור למחיר: האם מתג של 10 ג'יגהביט הוא יקר מדי? אם אתה רוצה לרכוש מתג Enterprise של סיסקו או HPE – כן, זה יעלה לך כמה אלפי דולרים. אם לעומת זאת תרכוש מתג של חברת MicroTik, המחיר יפתיע אותך בהחלט. לי לדוגמא, מתג של 16 פורטים +SFP במהירות 10 ג'יגהביט עלה לי 1500 שקל וזה כולל משלוח ומסים. אם אתה רוצה לעומת זאת לחבר רק 2-3 שרתים ואולי מחשב, אז מתג כמו MikroTik CRS305-1G-4S+in יעלה לך 604 שקלים, כולל משלוח מסים (זה המתג שבתמונה).

מה לגבי כרטיסים לחבר למחשבים ושרתים? פה eBay יכול לעזור לך: כרטיס רשת של Mellanox מסוג ConnectX-3 כמו הכרטיס הזה עולה 142 שקל לכרטיס (שימו לב, רוב ההצעות האחרות מדברות על 150+ שקל לכרטיס, ואם אתם משתמשים ב-ESXi רכשו את ה-Connect-X3 ומעלה, לישנים אין יותר תמיכה ב-VMWare), שזה הרבה פחות מהמחיר של כרטיס רשת טוב לשרת במהירות 1 ג'יגה.

כבלים – נחסוך את הרכישה של סיבים אופטיים. לא צריך אותם יותר (בתור אחד שיש לו 3 חתולים שנהנים מדי פעם לבדוק את השיניים שלהם על כבלים כאלו – הם עמידים בצורה מעולה!), במקום זה נשתמש בכבל DAC TwinAX נחושת וכאן תלוי מה האורך שאתם צריכים. אם המחשבים שלכם יושבים במקום אחד וצמודים, כבל של 1 מטר יספיק, והכבל הכי זול שמצאתי זה מהסוחר הזה ב-eBay במחיר של 26.64 שקל. בניגוד לסיבים, לא צריך ג'יביקים ובכלל, המתגים של MicroTik עובדים עם כל כבל – נחושת או סיב או כל GBIC, אין בדיקה ואין חסימות.

אחרי שקנינו, קיבלנו את הכל וחיברנו, בד"כ ההגדרות עצמן הם פשוטות ויש אולי צורך לשנות את הגדרות ה-Jumbo Frames (שינוי MTU ל-9000) – ואפשר להתחיל לעבוד.

אז אם יש לנו 3 מחשבים, העלות תהיה: 604 שקל למתג, 426 שקל ל-3 כרטיסים, 80 שקל לכבלים. סך הכל: 1110 שקל. פתאום 10 ג'יגהביט זה לא כזה יקר? 🙂

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

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

 

המעבר ממונוליטי ל-Microservices

כל מי שנמצא ברמה ניהולית של IT (מנמ"ר/CTO/CIO וכו') בוודאי מכיר את הדבר הבא: חברה מעוניינת לפתח מוצר גדול, "הדבר הבא" בתחום שלהם. מתקיימות מספר ישיבות עם גורמים שונים בחברה ותוך כדי כותבים מפרט ארוך מה הולך להיות בתוך המוצר, במה הולכים לתמוך בתוך המוצר וכו' וכו'.

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

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

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

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

פרויקט גדול מורכב מחלקים רבים שצריך לכתוב. בשיטה המונוליטית כל החלקים משתלבים אחד עם השני (Linking) כך שאי אפשר לשלב קוד בחופשיות של מפתחים שונים. צריך לבדוק כל חלק שמבצעים לו Commit שהוא לא שובר חלקים אחרים במוצר. בשיטת ה-Microservices (אני אקרא לזה מ"ש במשך פוסט זה) עושים דברים בשיטה הפוכה: כל חלק שצריך לכתוב, יכתב באופן עצמאי לחלוטין, הוא יכול להיות כתוב בשפה אחרות או עם פלטפורמה/Framework שונה מחלקים אחרים – כל עוד לאותו חלק יהיה ממשק RESTful API שאליו נוכל לשלוח פרמטרים (דרך YAML, JSON וכו') ונוכל לקבל נתונים בחזרה מאותו חלק בפורמט שנרצה.

וכך, בשיטה זו הצוותים השונים עובדים בצורה עצמאית לחלוטין והדבר היחיד שהם צריכים לשמור, זה פורמט API שמוסכם בין כל הצוותים ומתועד. זו בדיוק ההזדמנות גם להשתמש בטכנולוגיות חדשות, או לקחת מפתחים מבחוץ שיודעים לבנות לדוגמא UI בכלים מודרניים, אפשר להשתמש בכלי CI/CD לבדוק ולקמפל כל חלק באופן עצמאי, לכתוב טסטים ולבצע Stress testing לכל חלק.

לאחר שהחלקים השונים נכתבו (או במהלכם) – אנחנו נשתמש במערכת אורקסטרציה לקונטיינרים (כמו Kubernetes/OpenShift) בכדי להריץ כל חלק בקונטיינר/POD והתקשורת בין החלקים תהיה דרך HTTP/HTTPS ודרך פרוטוקולים אלו נשתמש ב-API כך שכל חלק יוכל לדבר עם חלקים אחרים.

במתודה המונוליטית, כשאנחנו צריכים לבצע Scaling, אנחנו בעצם נשכפל מכונות VM ונגדיר את ה-Load Balancer שידע להפנות פניות למכונות ה-VM השונות. הבעיה המהותית בשיטה הזו, היא שאנחנו משתמשים במשאבים רבים כשברוב המקרים רק חלק מסויים או חלקים מסויימים צריכים את ה-Scaling ושאר החלקים רק תופסים זכרון מבלי לעשות כמעט כלום. במתודת ה-מ"ש לעומת זאת, אנחנו יכולים לבצע Scaling דינמי לאותו חלק שמשאביו נגמרים וה-Scaling עצמו יבוצע תוך שניות בודדות (בניגוד להקמת VM נוסף), כך שברוב המקרים, כמות המשאבים שנצטרך לבצע Scaling – תהיה נמוכה בהרבה בהשוואה למתודות הרצה של אפליקציות מונוליטיות (הוספת עוד ועוד מכונות VM).

בכל הקשור לשדרוגי חלקים, HA, אחסון ושליפת נתונים, תקשורת ואבטחה – עבודה עם Kubernetes/Openshift תהיה הרבה יותר טובה ויעילה בהשוואה לשיטות העבודה הקלאסיות. שדרוגים לדוגמא מבוצעים בפקודה אחת מבלי להפסיק את כל החלקים השונים, ובמקרה הצורך, אותו דבר מתבצע בשנמוכים. את ה-HA מקבלים כברירת מחדל עם Kubernetes/Openshift, ובכל הקשור לאחסון – אותן מערכות יודעות "לדבר" עם כל אחסון מקומי או שקיים בענן ציבורי. מה עם אבטחה? כיום עם istio אפשר לעשות דברים רבים שבמערכות קלאסיות מצריכות תוכנות מסחריות (יקרות) מצד ג', ויש כמובן כלים נוספים, רובם בקוד פתוח זמינות לציבור.

אנסה לסכם את הפוסט כך: כיום, אם יש צורך בפיתוח אפליקציות גדולות ומורכבות, עדיף לעבוד במתודות ה-Microservices (ואגב, לחובבי ה-Mainframe – כן, אפשר לעשות זאת בקרוב גם על Mainframe של IBM עם Z/OS) שנותנות יתרונות רבים מאוד על פני המתודה המונוליטית. נכון, Kubernetes הוא לא בדיוק דבר קליל ללימוד אך מצד שני, המאמץ שווה, מה גם שאם אתם הולכים להשתמש בעננים ציבוריים, החיים הרבה יותר קלים עם שרותי הקונטיינרים הטבעיים שאותם ספקי ענן ציבורי מציעים.

להלן מצגת (קצת ישנה) על הנושא (ותודה ליבגני זיסליס על הלינק):

כשצריך הגנות על מכונות וירטואליות

מדי פעם יוצא לי לשוחח עם אנשים שאחראים על סביבות שמצריכים סיווג בטחוני גבוה ואותם אנשים מחפשים תמיד את השלב הבא בהגנה על התשתית של החברה שלהם. אחד הדברים שהם הכי חוששים מהם זה "פריצה פנימית": איך ניתן למישהו שמנהל תשתיות וירטואליזציה לנהל את כל המערכת אך לא לאפשר לו "להציץ" דרך כלים שונים – בתוך אותן מכונות VM שרצות, גם כאשר אותו איש תשתיות יש לו root למכונה הפיזית. (שימו לב: אני לא מדבר על ביצוע ssh לתוך מכונת VM, אלא להריץ סקריפט/כלי ברמת ה-Hypervisor כדי "לחקור" מכונת VM)

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

אינטל בזמנו פיתחה את ה-SGX, שזו מערכת שמאפשרת לנו ליצור איזור מאובטח שעליו ירוץ קוד בצורה מוצפנת כך שגם מנהל Hypervisor עם תוכנות זדוניות לא יוכל לסרוק את אותו זכרון ולמצוא מה רץ. ה-SGX עצמו כבר נפרץ (אינטל הוציאה תיקון), אבל בכל מקרה הפתרון עצמו היה בעייתי עוד מלכתחילה: האפליקציה המוצפנת היתה צריכה להיות מאוד קטנה (עד 64 מגהבייט זכרון), והביצועים (במיוחד ה-Floating Point) היו, איך נאמר בעדינות … לא משהו להתגאות בו. ב-VMWare לא רצו לנגוע בזה גם עם מקל ארוך.

ואז הגיעה חברת AMD ובשנת 2017 היא פירסמה על תוספות חדשות שיהיו זמינים במעבדים שלה לשרתים (EPYC) ובמעבדים לצרכים מקצועיים (Ryzen Pro): התוספות הן SEV ו-SME (והתוספת החדשה: SEV-ES – להצפין גם רגיסטרים במעבד שמשומשים ע"י אותו VM מוצפן). ה-SEV איפשר להצפין את מכונת ה-VM עם מפתח יחודי שמגיע מתוך מעבד ARM שנמצא במעבד EPYC (כן, מעבד בתוך מעבד) ו-SME שמצפין את הזכרון של ה-VM.

היתרונות של SEV ו-SME הם בכך ש:

  1. אין צורך לעשות שינויים מהותיים ב-VM (רק להחליף Kernel לאחד שתומך ב-SME/SEV)
  2. ההצפנה היא ברמת חומרה, כך שה"קנס" ברמת ביצועים הוא מאוד מינימלי
  3. המפתחות הם יחודיים ולכל VM יש מפתח משלו שמונפק ע"י המעבד. ניתן להנפיק עד 105 מפתחות (כל VM מקבל מפתח אחד, כך שאפשר להריץ עד 105 מכונות VM מוצפנות בשרת עם מעבד EPYC יחיד או 210 בשרת עם שני מעבדי EPYC).

החסרונות:

  1. אי אפשר להצפין מכונות Windows, לפחות עד שמיקרוסופט לא תוסיף את תמיכת ההצפנה ל-OS עצמו.
  2. VMware בשלב זה אינה תומכת בפונקציות אלו מ-AMD או אינטל (תיכף ארחיב על הפתרון של אינטל) – זה יתווסף בגירסה 6.8 או 7.0 ולכן אם אתם צריכים זאת עכשיו, תצטרכו לעבור ל-KVM או על אחת הפלטפורמות שמבוססות על KVM (בכל מקרה יש צורך לבצע את ההחלפת Kernel).

באינטל ראו את הפתרון של AMD והחליטו שגם הם יוציאו משהו דומה: תכירו את TME (כלומר Total Memory Encryption) ואת MKTME (כלומר: Multi Key Total Memory Encryption). אפשר לקרוא על הפתרון הזה בקצרה כאן, אך אני יאמר מראש: אל תבנו על הפתרון הזה, הוא לא זמין באף מעבד נוכחי.

מכיוון שגם אינטל וגם AMD הולכים באותו כיוון (רק של-AMD יש פתרון שאפשר להשתמש בו כיום), אפשר לאמר על הפתרון את הדברים הבאים:

  • כן, הפתרון רץ אך על מנת להשתמש בו, יש צורך בידע טוב בלינוקס. אם צריכים את הפתרון ל"מחר בבוקר" – תצטרכו לבצע שינויים הן ברמת ה-HyperVisor והן ברמת ה-VM.
  • הפתרון אינו מבטיח הגנות נגד דברים אחרים כמו Side Memory Attack, DDoS.
  • הפתרון הוא יחסית צעיר (ב-AMD פיתחו אותו בכלל עבור הגנת הקונסולות של סוני ומיקרוסופט ואז החליטו שזה רעיון מעולה להעביר אותו למעבדים לשרתים) ולפיכך מתגלים בו באגים (ו-AMD משחררת קושחות לתיקון).
  • כיום הפתרון של AMD נמצא בשימוש בשרתים החדשים (דור 10) של HPE שמבוססים על מעבדי EPYC (כלומר DL325 ו-DL385) בשילוב ה-Root of Trust של HPE והחברה (HPE) טוענת שזה הפתרון הכי מאובטח שיש להם להציע לשוק.
  • זה לא לפרודקשן אם ה-VM שלכם צריך לרוץ בחוץ או ה-Hypervisor שלכם מחובר לאינטרנט (יש לא מעט כאלו).

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

לסיכום: השיטה ש-AMD מציגה על מנת להגן על מכונות VM נגד האזנה למכונות VM היא שיטה טובה מאוד (ובגלל זה אינטל גם מעתיקים אותה), אך זהו פתרון חדש, וככזה הוא יכול להתאים למאמצים מוקדמים (Early Adopters) עם ידע בלינוקס. אני מאמין שבעוד שנה, הפתרון יתבגר יותר ובמקביל נראה הצעות מספקי ענן ציבורי לשכור Instances שיתמכו ב-SEV/SME, כך שה-Instances שלכם יהיו מוצפנים מספיק טוב בכדי לא לאפשר (באופן עקרוני) לגורמים זרים שיש להם גישה לברזל – לחטט בזכרון של ה-VM שלכם.

הדרך לפרוץ לתשתית הפנימית שלכם

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

כפרילאנסר, אני במקרים רבים צריך לבקר בחברות לצרכי ישיבות בנושאים שונים. באותם מקרים, אין כמובן גישה ל-LAN של החברה בתוך חדר ישיבות ואם אתה רוצה חיבור לאינטרנט, יש WIFI מיוחד ל"אורחים". אתה מתחבר לאותה נקודת WIFI, מקבל מסך EULA, מסכים לתנאים ואז יש לך גישה לאינטרנט ללא גישה לאינטרה-נט של החברה. (לא תמיד. מדהים לגלות כמה אנשי IT משתמשים באותו DNS פנימי גם ל-WIFI שהוא GUEST, ואז כשמראים להם מה ניתן לגלות בעזרת פקודת dig פשוטה – הם המומים).

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

וכאן מתחיל הפספוס הגדול.

הסינים, הרוסים, האיראנים ושלל מדינות נוספות (גם ידידותיות או "ידידותיות") רוצים לקבל נתונים על התשתית הפנימית של חברות בטחוניות, צבא, משרדים בטחוניים, מוסדות פיננסיים ועוד. כל מה שהם יכולים להשיג – מבורך. מכיוון שברוב המקרים אין להם גישה לתשתית הפנימית, הם משתמשים בטריק פשוט שאותן חברות שציינתי בתחילת הפוסט – סבלו מהן. הטריק פשוט מאוד: לפרוץ למחשבים של קבלן המשנה/עצמאי ולשתול שם מספר תוכנות שירוצו ברקע, וכשיהיה חיבור מהמחשב הנייד דרך LAN או WIFI לתשתית כלשהי, התוכנות האלו יתחילו לרוץ, לסרוק את הרשת ולחפש כל דרך לקבל מידע. המידע שהם יצליחו לקבל דרך אותם כלים ישמר מקומית במחשב הנייד וברגע שאותו מחשב נייד יחובר לאינטרנט, אותן תוכנות ישדרו את הנתונים בחזרה לגוף הפורץ וימחקו את הנתונים מהדיסק הקשיח המקומי. כך הסינים הצליחו לגנוב המון תוכניות ומידע והרוסים הצליחו לדוגמא לפרוץ לתחנות כח בארה"ב.

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

אז מה ניתן לעשות? להלן כמה רעיונות:

  • Whitelist לכל כתובות ה-Mac Address של המכונות בחברה. כן, זה תהליך ארוך ומייגע (אם כי יש כלים ושיטות לאסוף כתובות MAC ולהזין אותם למתגים/נתבים) ולאפשר התחברות אך ורק ל-MAC "מולבן".
  • שימוש ב-Disk On Key. אם האיש המקצועי רוצה להעתיק קבצים לדוגמא, ובדיקת הקבצים לאחר ההעתקה לפני הטמעתם.
  • שימוש בתוכנת Guacamole עם 2FA: אם מקבלים עזרה מבחוץ, זה כלי שבהחלט יכול לעזור. בשיטה זו התקשורת מוצפנת ואינה עוברת באופן "טבעי" (כך שאם יש פריצה לדוגמא ב-RDP, זה לא ממש משנה, כי הכלי בתוך Guacamole אינו חלק מ-Windows), ואם השרת שצריך לתקן הוא Windows, עדיף להשתמש ב-VNC ולחבר אותו ל-Guacamole, כך שתוכלו לראות מה בדיוק נעשה. שימו לב: עניין ה-2FA מאוד חשוב.
  • השתדלו להימנע מלהשתמש בכלי שליטה מרחוק מקומיים (Any desk, Team viewer) – בחברות רבות כלים אלו מותקנים ואינם מעודכנים כלל וכלל, מה שיכול לאפשר פריצה מרחוק "בשקט".
  • אם מישהו צריך להתחבר ב-SSH, תנו לו רק לאחר שתריצו את screen או tmux, כך תוכלו לדעת מה הוא עושה.
  • אל תשתמשו בתוכנות מאתרים ישראליים. במקרים רבים התוכנות שם ישנות ויש להן פריצות. במיוחד לא תוכנות כמו ammyy admin!
  • הנהלת-IT/מנמ"ר/CTO – דאגו להורות כי כל חיבור מחשב חיצוני יחובר רק לאחר שמחלקת אבטחת מידע מאשרת, רק אם אין ברירה ובזמן החיבור שיהיה ניטור LAN מאותה כתובת IP.

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

הפתרון למעבר מ-VM לקונטיינר: Kubevirt

(הערה: לפני כשנתיים כתבתי את הפוסט הזה על Kubevirt. מאז דברים רבים השתנו ופוסט זה הוא פוסט עדכון לכלי).

כל מי שהתחיל ומשתמש בקונטיינרים, Kubernetes וכו' – מבין בוודאי שקונטיינרים אינם מכונות וירטואליות. בניגוד ל-VM, קונטיינר מקבל שרותי OS ממערכת ההפעלה המותקנת על ה-VM (או על הברזל) שמריץ את הקונטיינר, ולפיכך קונטיינרים ברוב המקרים הם דברים די קטנים בהשוואה למערכת הפעלה מלאה שמותקנת ב-VM, גם כשהיא מותקנת כ-Minimal.

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

ישנם גם מקרים שאי אפשר להמיר מכונת VM לקונטיינרים חדשים. מקרים כמו:

  • האפליקציה רצה ומבוססת על Windows
  • האפליקציה רצה על גירסת לינוקס מאוד ישנה
  • האפליקציה רצה על מערכת הפעלה שאינה מבוססת לינוקס
  • ה-VM נבנה ע"י מומחה חיצוני ולאף אחד אין מושג ירוק איך הדברים מוגדרים ב-VM (לדוגמא: Cobol ישן)

במקרים כאלו, קשה מאוד או בלתי אפשרי להמיר ידנית את המכונות הללו לקונטיינרים, וכך פרויקטים לקונטיינריזציה מתעכבים או שממשיכים להריץ את מכונת ה-VM בתוך פתרון וירטואליזציה (vSphere לדוגמא) – אבל אז מפסידים את כל היתרונות של Kubernetes או Openshift.

וכאן נכנסת לתמונה אפליקציית Kubevirt.

אפליקציית Kubevirt מרחיבה בעצם את Kubernetes/OpenShift ומוסיפה למערכת תמיכה בקונטיינרים מסוג נוסף: קונטיינר שמריץ VM. כך בעצם אפשר לקחת VM מהדוגמאות לעיל ו"להכניס" אותו לתוך קונטיינר, כך שנוכל להריץ אותו כמו שאנחנו מפעילים קונטיינרים נוספים, ובכך נוכל להשתמש באפליקציה שרצה ב-VM, נוכל לשכפל את הקונטיינר לפי פרמטרים שנרצה, נוכל לשדרג את הקונטיינר ועוד ועוד.

מאחורי הקלעים, מה ש-Kubevirt עושה, הוא להשתמש ב-KVM (הוירטואליזציה המצויה בכל לינוקס) ובספריית Libvirt וספריות נוספות בכדי ליצור POD ובתוך ה-POD להריץ VM. את אותו VM אנחנו נגדיר בעזרת קבצי YAML, כמו שמגדירים כל דבר ב-Kubernetes, וכך נוכל להגדיר כמות זכרון, היכן הדיסק הוירטואלי יושב, האם ה-VM יהיה בעצם Immutable (כלומר שכל שינוי ל-VM ימחק ברגע שה-VM "כובה"), ועוד פונקציות נוספות. הגישה ל-VM תוכל להתבצע בכלים הרגילים (SSH, RDP) או VNC וחיבור סריאלי וירטואלי (במקרה שמדובר בלינוקס או כל מערכת תואמת UNIX אחרת).

מכיוון שב-Kubernetes אפשר להשתמש בכל מיני "דרייברים" (Storage Classes, Volumes), נצטרך להמיר בשלב ראשון את הדיסקים הוירטואליים של ה-VM מהפורמט הנוכחי (VMDK ב-vSphere) לפורמט ש-KVM ו-libvirt יכולים להבין ולהשתמש. סוג הדיסק שאנחנו נצטרך יהיה RAW וכלי ההמרה (שצריך לרוץ תחת לינוקס) הוא virt-v2v (זה קצת יותר מורכב ממה שהקישור מראה). מהרגע שביצענו זאת, אנחנו "מנתקים" בעצם את ה-VM מהוירטואליזציה הנוכחית (נניח vSphere), אבל ה-VM עדיין נשאר ב-vSphere. ברגע שיש לנו את הקובץ בפורמט RAW, נוכל להשתמש בכלי כמו CDI כדי לבצע Import של ה-Image לתוך Volume שנגדיר. אחרי שהצלחנו (שוב, לא דבר כל כך קל, אלא אם אתם משתמשים ב-Openshift דרך ה-WEB UI), אנחנו נגדיר POD עם ה-VM ושם אנחנו נבחר דברים כמו כמות זכרון, מערכת הפעלה, וכו'. בזמן ההגדרות נוכל להוסיף דיסקים וירטואליים חדשים ל-VM ועוד. לאחר שהתהליך מסתיים ונפעיל את ה-VM, תופיע כתובת IP שדרכה נוכל להתחבר אל ה-VM.

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

  • Kubevirt עובד על כל גירסת Kubernetes מ-1.10 ומעלה, ו-OpenShift 3.11 ומעלה.
  • בשביל לקבל ביצועים טובים עם ה-VM, יש צורך בתמיכת Nested Virtualization (אם ה-Kubernetes שלכם רץ כמכונה וירטואלית).
  • עננים ציבוריים: אם אתם רוצים להריץ Kubevirt על ענן ציבורי, תצטרכו לבחור Instances שכוללים תמיכת Nested Virtualization. גם לאז'ור וגם לגוגל יש מכונות כאלו, ב-AWS אין ולפיכך ב-AWS מכונות VM כאלו ירוצו יותר לאט מאחר ומדובר באמולציית X86-64 בתוכנה.
  • דיסקים וירטואליים: מכיוון שאין Thin Provisioning בשיטה כזו, הווליומים יהיו גדולים (כמה שהגדרתם ב-VM בהתחלה תחת vSphere), לכן אם הגדרתם את ה-VM עם דיסק של 100 ג'יגה אבל השתמשתם רק ב-15 ג'יגה, הקטינו את הדיסק (הוראות נמצאות כאן אם מדובר ב-vSphere).
    נקודה נוספת חשובה לגבי דיסקים וירטואליים: אפשר לצרף אותם ישירות ל-Image של הקונטיינר אך הדבר אינו מומלץ (אלא אם אתם רוצים להפיץ את ה-Image החוצה).
  • קישוריות ל-VM ותקשורת: במקור כברירת מחדל יש ל-VM חיבור רשת יחיד. יחד עם זאת ניתן להשתמש ב-Multus או Genie כדי להוסיף דברים רבים הקשורים לרשת: VLAN, Bridges, אפילו PXE Boot – תשתוללו חופשי.
  • ניתן לשכפל את ה-VM לפי כל פרמטר שתרצו כדי לעמוד בעומסים. לשם כך תצטרכו להגדיר בקובץ YAML את ה-AccessModes לפי הצרכים שלכם.
  • KVM – מכיוון שה-VM שלכם ירוץ תחת KVM, כדאי להכיר את KVM. תרימו מכונת לינוקס, תפעילו Nested Virtualization ותריצו את Virt Manager (נקרא גם VMM). יש המון פונקציות והגדרות וכדאי להכיר אותם לפני כן, אחרת תקבלו הפתעות (במיוחד אם מכונת ה-VM שלכם משתמשת ב-UEFI. יש תמיכה ל-UEFI אבל תצטרכו להגדיר כמה דברים לשם כך).

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

אם אתם רוצים עוד הסברים על Kubevirt כולל הדגמה של לינוקס ו-Windows Server 2012, אתם מוזמנים לצפות בקליפ (הארוך – שעה) הבא.

לסיכום: אם אתם רוצים לעבור לקונטיינרים והדבר היחיד שמפריע זה מכונה אחת (או מספר מכונות) שבעייתי להמיר אותן ידנית לקבצי Docker Images ושירוצו כקונטיינרים טבעיים, Kubevirt יכול לסייע בכך. חברות כמו SAP, nVidia, Cloudflare כבר משתמשות ב-Kubevirt. חשוב לציין: Kubevirt עדיין לא מוגדר כגירסה סופית (מצד שני, גם Kubernetes לא מוגדר כך). אם אתם משתמשים ב-OpenShift מגירסה 3.10 ומעלה (גם בגירסת OKD – גירסת הקוד הפתוח) – קל מאוד לשלב את Kubevirt והחל מגירסה 4.2 – ה-Kubevirt יהיה חלק אינטגרלי (בגירסה הנ"ל תוכלו להתחבר ישירות ל-vCenter ולהמיר את ה-VM בכמה קליקים).
מיקרוסופט וגוגל כבר מזמן הבינו שאם רוצים למשוך את הלקוחות אליהם כדי שישתמשו בשרותי ה-Kubernetes שלהם, צריך לעזור ללקוחות בכך שיציעו המרה של מכונות VM להרצה בתוך קונטיינרים, וזה יהיה כנראה ה"גל" הבא.

על מדיה דיגיטלית, ענן ציבורי וגדילה דינמית

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

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

אנחנו חיים היום בעולם דיגיטלי, סעו באוטובוס, בקרו בכל מבנה ציבורי, תמתינו בתור לאיזה שרות ואתם תראו שב-99% מהמקרים, הראש של האנשים נמצא בסלולרי שלהם – קוראים דברים, משתפים, משוחחים בצ'אטים, צופים בקליפים ועוד המון דברים שרצים על הסלולרי. אנשים מחפשים היום את המידע והבידור בסלולר, הרבה יותר מבעבר. בעבר, בעולם הרגיל כשחברה רצתה להשתתף במבצע שיווקי, הם היו מכינים את התשתית לקבל הרבה יותר גולשים, אבל היום זה לא רלוונטי. מספיק שחברה תשלח לכמה משפיענים (Influencers) דוגמאות מוצרים ואותם משפיענים יתלהבו ויפרסמו לינק לאתר החברה עם קוד הנחה – וזמן קצר לאחר מכן תחול עליה מאוד משמעותית בטראפיק של אותו אתר חברה והמכירות יעלו בהתאם. אם לחברה יש תשתית קטנה ברוב השנה, היא עלולה להפסיד מכירות (כן, הישראלים מאוד קצרי סבלנות בכל הקשור לזמני עליית אתר, רכישה והם עוד יותר שונאים חברות שליחויות שעושות טובה שהם נותנים שרות).

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

וכאן ההבדל הענקי בין מה שיש בארץ לעומת כל ענן ציבורי של השלישיה הידועה (אמזון, גוגל, מיקרוסופט): גדילה דינמית. אפשר להקים את האתר השיווקי של החברה בתוך קונטיינרים (כל קונטיינר מכיל עותק של האתר ועוד מספר דברים), וכשמגדירים נכונה את השכפולים (Replica), המערכת תוסיף קונטיינרים בשניות ספורות – אם יש עומס על הקונטיינרים כתוצאה מכניסה של יותר ויותר גולשים וכשלא יהיה עומס, היא תקטין את מספר הקונטיינרים, והמספר מתעדכן כל שניות ספורות, כך שיכול להיות מצב שבעת עומס ירוצו בחשבון החברה בענן הציבורי נניח 400 קונטיינרים בשעה 8 בערב ובשעה 9 וחצי בערב מספר הקונטיינרים ירד ל-10. בכל אותו זמן – כל הגולשים מקבלים אתר שנגיש בצורה מהירה וחוויית קניה חלקה (לפחות מהצד של התשתית).

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

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

על בניית אתרים ואחסונם – דברים שחשוב לדעת

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

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

אבל יש משהו אחד שחשוב מאוד לעשות אותו, כאשר האתר המדובר הוא עצמאי (והוא לא אתר שנבנה בפלטפורמה כמו Square Space, Wix וכו') – והדבר הוא: להפריד בין מה שיריץ את האתר לבין האתר, ובמילים אחרות: לא לקחת את השרות המוצע של לארח את האתר שלך אצל בוני האתר אלא להשכיר שרת, לתת למישהו מקצועי להקים ולהגדיר, "לשפוך" את האתר הבנוי בשרת החדש ושאיש המקצוע יסיים את ההגדרות ואז לחשוף אותו לעולם.

אני מכיר לא מעט מקרים שחוברות בונות אתרים מציעים כל מיני הצעות להעביר את האתר הנוכחי או לארח את האתר החדש על התשתית שלהם (הקטע הכי מצחיק: הם מדגישים שזה יושב בישראל וזה "חשוב ל-SEO". שטויות במיץ עגבניות. הבלוג הזה יושב בוירג'יניה בארה"ב, יש לו אפס SEO ויחד עם זאת יש המון מילות מפתח מהבלוג הזה שיושבים במקומות גבוהים בגוגל). הסיבה שהם עושים זאת כמובן קשורה לרווח – אפשר לגבות לך על תעבורה, אפשר לגבות לך על עדכונים ועל 1001 דברים נוספים.

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

  • אם אין לך שרת וירטואלי, תשכור אחד, לא צריך בישראל ולא צריך לשלם הרבה. אמזון Lightsail מציעים מכונות החל במחיר של 3.5$ (אני ממליץ לקחת את החבילה של ה-20$ אם זה לא אתר נשכח שנכנסים אליו 2 גולשים בשבוע), ואם אתם לא מעוניינים בהצעות של אמזון, יש גם את Digital Ocean (המחירים די זהים)
  • קחו איש לינוקס מקצועי שיבצע את הדברים הבאים:
    • יקים את המכונה, יעדכן ויגדיר אותה בהתאם לצרכים
    • שיקבל את האתר ב-ZIP מבוני האתר (חברות רבות שבונים אתרים מבקשים גישת FTP. לא לפתוח את זה, שילמדו לעבוד עם GIT!), כולל DB DUMP אם צריך.
    • שיגדיר את כל הדברים הנחוצים כולל הרשאות קבצים, גישה לשרת, מפתחות, SSL וכו'
    • אם האתר הוא מסחרי, אנליטיקות וכו' – בקשו מאיש הלינוקס להריץ בדיקת עומסים. אם השרת לא מצליח לעמוד בעומס נורמלי שאתם צריכים, פנו לחברה שבנתה אותו, בדרך כלל מדובר בקוד SQL גרוע, או במקרים רבים – חוסר אופטימיזציה של קוד, אי שימוש ב-Cache וכו'.
    • במידה ומדובר באתר גדול עם אלפי גולשים, דאגו ליידע מראש הן את איש הלינוקס והן את בוני האתרים. יתכן שיתווספו דרישות לבניית האתר מאיש הלינוקס.
    • בכל ויכוח מקצועי לגבי מכונת הלינוקס – דעתו של איש הלינוקס קובעת, לא הדעה של חברת בוני האתרים (אין לי מספיק שערות בראש מכמות הויכוחים שעברתי בנושא הזה, שחברת בוני האתרים מילאה את ראשו של הלקוח בשטויות!)
  • במסגרת ההסכמים שלכם עם איש הלינוקס וחברת בניית האתרים, דאגו ש:
    • בתמחור לאיש הלינוקס תהיה חובת עדכון השרת אחת לחודש במשך שנה
    • חברת בוני האתרים יחויבו לעדכן את הקוד שלהם לגבי באגים וגרסאות תיקון של השפה בה הם מפתחים (NodeJS, PHP, Python וכו') – למשך שנה
  • כשאתם רוכשים את החבילה, בקשו מאיש הלינוקס גיבוי אוטומטי של השרת בהתאם לצורך (אחת ליום, אחת לשבוע וכו') כך שיאפשר שיחזור נתונים מיידי במקרה של תקלה/פריצה.
  • אם יש לכם את הכסף – העבירו את הקוד של חברת בניית האתר למישהו שיודע לבצע Code Auditing לקוד.
  • והכי חשוב: לא לתת גישת sudo/root לחברת בוני האתרים בשרת, בשום מקרה!

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

הקמת Region בישראל: עוד קצת מידע

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

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

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

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

  • קמצנות: נניח שאנחנו תוהים איך זה שאין פה בארץ מישהו שמספק שרות קונטיינרים כמו EKS/ECS שקיים באמזון, רק יותר קטן. בשביל להקים דבר כזה, אתה צריך השקעה מאוד רצינית במפתחים, אינטגרציה וכו'. מבחינת תמיכה, אתה לא יכול להביא אנשי תמיכה משרות לקוחות פרטי ("תכבה את הראוטר ותדליק") כדי שיעזרו ללקוח עם בעיות ב-namespace או מדוע קונטיינר קורס מיד אחרי שהוא עלה – כל הדבר הזה עולה ממון רב, ואף ספק (למיטב ידיעתי) לא היה מוכן להשקיע. איך אני יודע? כי הושכרתי להקים PoC לספק כזה. הוא התרשם מאיך שזה רץ ואיך שזה עושה Scaling, אבל כשתיארתי לו איזו חומרה הוא יצרך ואיזו הכשרה יש צורך להעביר לתומכים והעלות המוערכת לכך – הוא ביטל את הפרויקט, וזה, אגב, ממש לא ספק קטן.
  • עצלנות: בארץ הספקים מעדיפים להציע ללקוחות כפתרונות מוכנים את הדברים הקטנים, כמות Fixed של VM עם אחסון כלשהו, וכל דבר נוסף נחשב אקסטרא במחיר מטורף (אתם לא תאמינו כמה עולה אצל רוב הספקים Load Balancer מבוסס תוכנה – במחיר חודשי). הם בהחלט מוכנים לקחת דברים גדולים ולשכור אנשים שיקימו את אותם דברים גדולים, אבל המחיר להקמה יהיה מאוד גבוה ללקוח הקצה. כמה גבוה? סביר להניח שהלקוח יבחר די מהר לעבור עם ספק ענן ציבורי עם Region אירופאי כלשהו. אז הם פשוט מוכרים את הקצה הנמוך.
  • מחיר: המחירים בארץ יקרים, מאוד, ללא הצדקה. כשספק אומר לך שהאחסון שתקבל הוא "SSD", תהיו בטוחים שמדובר ב-SSD מהקצה הנמוך, שהמעבדים הם 2 דורות אחורה או יותר (אם יש למישהו VPS ישראלי, הוא מוזמן להריץ את פקודת: lscpu ולראות זאת), רוחב הפס הוא קטן מאוד, ואם אתה מחפש תקשורת מהירה בין מכונות וירטואליות שונות – תשכח מזה. על זה הם גובים מחירים שהם גובים פי 2 ומעלה מהצעות בחו"ל, ובניגוד לספקי ענן ציבוריים שמורידים מעת לעת את המחיר של מה שאתה שוכר, בארץ המחיר נשאר אותו דבר או עולה.

אז כן, בארץ הספקים החליטו להפעיל ראש קטן, ואם אתה רוצה משהו מורכב, תכין צ'ק שמן, ואם לא מוצא חן בעיניך – לך תיקח משהו בענן הציבורי. לאחרונה ספק מסוים הביא לכאן Azure Stack והוא הולך להציע שרותי "ענן", אבל חכו לתעריפים. אני הייתי מעורב בבדיקת רכישת Azure Stack לחברה גדולה, איש הקשר בחברה הגיב לאחר קריאת הדו"ח שלי במילים "אתה צוחק עליי? מה המחיר הזה?" ולכן כיום מי שחושב לייבא Azure Stack לארץ, אני ממליץ להמתין קצת, יכול להיות שהוא לא יצטרך את המפלצת הזו ב-DC שלו.

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

מפסידים

  • יבואנים ומפיצים של שרתים מכל החברות. אם אתה צריך ברזל בשביל וירטואליזציה, אתה יכול לשכור ישר Instances מספק הענן לפי הגודל והצורך, ואם אתה צריך את אותו Instance כדבר קבוע למשך מספר שנים, אז אתה יכול לקבל עד 60-70% הנחה במחיר אם אתה משלם מראש ל-3 שנים נניח. אתה יכול לשכור גם Instances שמכילים ציוד שיעלה לך המון (כרטיסי Tesla לדוגמא או TPU במקרה של גוגל) ואתה יכול להריץ דברים למספר שעות או ימים ולמחוק ולשלם רק על השימוש. ברגע שמבינים ומתרגלים לרעיון – הצורך לרכוש ברזלים חדשים במקרים רבים יורד.
  • סטורג' – אם יש Regions בארץ וחברות עוברות אליו, הדרישה לרכישת סטורג' יורדת. בענן ציבורי יש מספר שיטות לאחסון, יש שרותים שחוסכים כספים רבים, יש שרותים עם יתירות שעוקפת כל סטורג' שתרכוש, ובקיצור – אלו שיצטרכו לרכוש סטורג' הם אלו שיעדיפו להשאיר את הציוד ב-DC שלהם.
  • ספקי תקשורת ישראליים: כל מי שעיניו בראשו ויש לו תשתית אצל ספק ישראלי, מספיק שידע לתכנן נכון והוא יוכל לחסוך במחירים בכך שיעבור ל-Region מקומי בענן ציבורי ולהפסיק את ההתקשרות עם כל מיני חברות COLO, Hosting וכו', ואני מאמין שתהיה הגירה המונית.
  • ספקי תקשורת לחו"ל: כל ספק Region ירצה קווים עם רוחב פס רציני מאוד, ובמחירים הרבה יותר נמוכים ממה שאותם ספקים מוכרים בארץ. כל ספק ענן ציבורי שירצה להקים פה Region יעשה את המוות לספקים המקומיים ואם המחירים עדיין לא ימצאו חן בעיניהם, אותם ספקי ענן ציבורי יתאגדו ויסללו כבל מטורף מחו"ל לארץ. גוגל, פייסבוק, אמזון ומיקרוסופט עשו זאת בעבר כמה פעמים, אז אין סיבה שלא יעשו זאת שוב אם הם לא מקבלים את המחירים שהם רוצים. ועוד משהו קטן אחד: הם רוצים לנהל את הקווים שלהם בעצמם.

מרוויחים

  • ספקי ענן ציבורי – ישראל אמנם קטנה, אך יחסית למדינה קטנה, כמות המחשוב שעסקים וחברות משתמשים היא גדולה מאוד. קחו כל סטארטאפ קטן שיכול להתחיל עם כמה מכונות VM נניח פה בארץ, ומהר מאוד הוא יצטרך כמה מכונות באירופה או ארה"ב לפיתוח, עוד כמה מכונות VM לפרודקשן, ואם הוא עובר לקונטיינרים או Serverless – ספק הענן הציבורי יכול רק לחייך.
  • חברות המוגבלות בשימוש נתונים בארץ – סוף סוף אפשר להנות משרותי ענן ציבורי.
  • עסקים וסטארטאפים ישראליים – כנ"ל.

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