קונטיינרים ו-Windows – מאמר עדכון (2020)

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

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

וזה חתיכת כאב ראש..

באותו זמן מיקרוסופט החלה להציע דרכים להכין ולהריץ קונטיינרים, אבל רק ב-Windows Server 2019 (ובגרסאות Windows 10 היותר מתקדמות) הם הציעו באופן רשמי דרכים להריץ קונטיינרים ל-Windows (הכוונה שהקונטיינר מכיל IMAGE עם קבצים בינאריים ל-Windows). בהתחלה עם Hyper-V בצורה מבודדת (דרך מצויינת לבזבז זכרון) ואחר כך כ-Process מבודד.

העניין הוא שחברות רוצות לא רק קונטיינרים, אלא את כל ה"מסביב", אורקסטרציה, תמיכת Plugins שונים, HA ועוד ועוד – כל מה ש-Kuberentes נותן. את זה לא היה באותו זמן, ו-K8S החל להיתמך באופן רשמי ויחסית יציב – בגירסה 1.14 (אם כי יש תיקוני באגים בכל הקשור לתמיכת Windows ולכן כדאי להסתכל על גירסה 1.17 האחרונה).

בחודשים האחרונים החלו יצרני "הפצות" K8S כמו PKS של VMWare להציע גירסת בטא לתמיכת Windows Containers וגירסת Openshift הבאה תציע זאת גם. אם אתם מתכוננים להיפגש עם נציג של VMWare לגבי PKS, הוא בוודאי יציג לכם מצגת עם שקופית שמזכירה לכם ש-Windows 2008/2008R2 מסיים לקבל תמיכה רשמית השנה ולכן כדאי לנצל את העניין לעבור לקונטיינרים (אכן התמיכה מסתיימת אבל יש שמירה לאחור די רצינית בכל הקשור לתאימות בינארית, כך שאפשר להריץ את אותן אפליקציות ב-Windows 2012/2016/2019, המקסימום – תצטרכו לקמפל מול ספריות סטנדרטיות, כך שהטענה שגירסת OS הסתיימה ולכן עכשיו עכשיו חשוב לעבור לקונטיינרים – לא ממש "מחזיקה מים").

אז מה המצב כיום?

טכנית, אין בעיה להריץ K8S תחת Windows, אך כרגע Windows נתמך כ-Workers Node באופן רשמי ולכן עדיין תצטרכו מכונת לינוקס שתשמש כ-Master. אם אתם רוצים להריץ K8S מהקוד הקיים הפתוח, אתם צריכים לעבור תהליך התקנה די ארוך ומורכב שאפשר לקרוא עליו כאן (יש עוד 2 חלקים בצד שמאל, אל תדלגו עליהם). אם אתם חושבים להשתמש ב-Rancher, גירסה 2.3 תומכת ב-Windows Containers, לגבי השאר – ציינתי לעיל.

אם אתם מתכננים לממש ולהריץ קונטיינרים ל-WIndows בעננים ציבוריים, אז כל הספקים המספקים שרות הרצת קונטיינרים מנוהל כבר תומכים בכך.

הדברים החשובים לזכור ולבדוק (אם אתם מריצים K8S ב-On prem):

  • לא לשדרג את ה-Windows אוטומטית. אם מיקרוסופט מוציאה מחר Service Pack או עדכון שמעלה את גירסת ה-Windows (דוגמא: 1709 ל-1903) יכול לשבור דברים בקלות, ויכול להיות מצב שלא תוכלו להריץ קונטיינרים.
  • תמיכת Plugins – ל-K8S יש מאות Plugins שונים בתחומים שונים. ב-Windows רק חלק קטן נתמך ורץ (הם מופיעים בקישור שנתתי בפיסקת תהליך ההתקנה לעיל). כך לדוגמא, חלק מיצרני הסטורג'ים שחררו Plugins ל-K8S בכל הקשור ל-Volumes, צרו איתם קשר לראות אם הם שחררו את ה-Plugins שלהם ל-Windows. כמו כן, תמיכת CSI (כלומר: Containers Storage Interface) היא עדיין ברמת אלפא/בטא.
  • יכול להיות שה-IPS/IDS שלכם לא יאהבו את K8S ל-Windows, הואיל ובחלק מהמקרים נעשים שינויים לפאקטות. כמו כן התמיכה ב-NAT היא קצת בעייתית (תסתכלו בחלק של ה-Networking באותו קישור) – קחו את זה בחשבון לטיפול.
  • קונטיינרים ברמת privileged (אלו בדרך כלל קונטיינרים שמשפיעים על כל ה-K8S) לא יכולים כרגע לרוץ תחת Windows.
  • ניהול זכרון: בלינוקס יש תהליך (שנוא אבל הכרחי) שנקרא OOMKiller שהורג תהליכים בעת מצבים שמסתיים הזכרון. ב-Windows זה אחרת, וברגע שמסתיים הזכרון, המערכת משתמשת ב-pagefile כך שאין משהו שיהרוג תהליכים אם הזכרון מסתיים ולכן יכול להיות מצב שה-Node "יזחל" רק בגלל שאין זכרון. התיעוד מציע מספר אפשרויות, אבל כדאי לעקוב היטב במערכת הניטור לגבי זכרון במכונות Windows המריצות PKS.
  • אם אתם משתמשים ב-Flannel פלאגין לרשת K8S, כדאי לזכור שאין אפשרות לתקשורת בין Node ל-POD.
  • אבטחה – בכל מה שקשור ל-Secrets – דברים נכתבים כ-clear text ב-Node Volume. יש שתי המלצות בתיעוד – או ACL או Bitlocker, שתי פתרונות שלדעתי די עקומים אבל זה מה שיש. בנוסף – האבטחה ל-POD שהפצות K8S שונות מאפשרות תחת לינוקס (SELinux, AppArmor וכו') – לא נתמכות ב-Windows בכלל ויכול להיות שבעתיד יפותח משהו.

כל הנקודות לעיל נלקחו מהמסמך בקישור לעיל והם רלוונטיים לגירסה האחרונה (שברוב המקרים לא כלולה בהפצות K8S השונות), ולכן אני עדיין טוען: התמיכה ב-Windows היא עדיין Work In progress, זה יכול להספיק להריץ דברים פנימית שאינם פתוחים/חשופים לאינטרנט, בסביבות Testing, Staging ואפילו PROD מצומצם, אבל מומלץ לעבור עם מחלקת אבטחת מידע על כל המגבלות במסמך המקורי ולהחליט אלו קונטיינרים ל-Windows להקים ולהריץ ב-K8S, מה ממירים להרצה על לינוקס (כדאי לזכור: בתוך POD אי אפשר להריץ קונטיינרים גם מ-Windows וגם מלינוקס), ועל מה כרגע מדלגים.

לסיכום: K8S ל-Windows, למרות יצרני הפצות K8S שונות, הוא עדיין Work In Progress. יש את כל החלקים הבסיסיים, אבל חסרים לא מעט דברים חיצוניים ויש לא מעט אורות אדומים בכל מה שקשור לאבטחת מידע, ניהול זכרון, Plugins וכו' וכו'. אין שום בעיה ואפילו מומלץ – להקים מערכת K8S ולצוות אליה מכונות Windows לשרת Linux שישמש כ-Master ולהתחיל תהליכי המרה, טסטים והרצות שונות, אבל כשזה מגיע לפרודקשן, ממליץ "לעשות חושבים", גם אם מדובר בהרצת קונטיינרים לפרודקשן במערכות קונטיינרים מנוהלות ע"י ספקי ענן ציבורי.

אחסון: Scale Up מול Scale out (מאמר עדכון)

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

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

נתחיל בפתרון הפופולרי שיותר ויותר רוצים: פתרון Scale Out ובמקרה של VMWare מדובר כמובן ב-vSAN (עם Nutanix, Simplivity, Hyperflex הדברים מעט שונים). הדבר הראשון שצריך לקחת בחשבון זה עלות שדרוג רשיון ל-vSAN. בכל שרת שיש בו שני מעבדים, צריך לשלם כמדומני $5000 וזה רק על הרשיון, כלומר אם יש נניח 10 שרתים, אנחנו מדברים על $50K לפני שבכלל דיברנו על חומרה. אחרי שדיברנו על רשיונות, נדבר על דיסקים וסוג האחסון: Hybrid או All Flash, רובם כשהם מקבלים הצעות ל-All Flash ב-vSAN נרתעים מהמחיר אז נעבור ל-Hybrid. הדיסקים מקובצים כ-Disk Group. מבחינה טכנית, כל Disk Group יכול להכיל עד 7 דיסקים מכניים ודיסק SSD, המכניים הם ה-Capacity וה-SSD נקרא Cache. חישוב הדיסקים צריך להיות לפי רמת ה-RAID שאתם בוחרים, לפי כמות ה-Fault Domains, ה-Erasure Coding ועוד. לא מומלץ לנסות לחשב לפי Dedup מכיוון שיחס ה-Dedup הוא משתנה נעלם שמשתנה בהתאם לתוכן המאוחסן, כמות פעמים שאותם בלוקים מאוחסנים ועוד, למעוניינים – ניתן לקרוא יותר פרטים על כך כאן וכאן. נקודה חשובה לציון: VMWare גם נוטים להמליץ על דברים שייקרו את המערכת, כמו בקר RAID לכל קבוצת דיסקים (כי זה עוזר ב-Rebuild), תלוי במצב הקונפיגורציה שלכם, לא חייבים להקשיב ולרכוש. מה שכן, ותלוי בתקציב, מומלץ לרכוש SSD Mixed Intense ל-Cache (היחס קריאה כתיבה לדיסקים SSD שהם Read Intense הוא 80/20 או 75/25, ו-VMWare מבקשת 70/30 – לשיקולכם).

מכאן נעזוב את פתרונות ה-HCI ונעבור לאחסון כללי.

אין שום בעיה לאחסן 2-3 פטהבייט באחסון Scale Up. הנה לדוגמא JBOD של Western Digital שיכול לקבל עד 102 דיסקים מכניים של 12 טרהבייט ולתת כמות אחסון ברוטו של 1.2 פטהבייט. אפשר לשרשר קופסא כזו לעוד שלושה קופסאות נוספות כך שתיאורתית ניתן לאחסן ברוטו 3.6 פטהבייט. את הקופסאות האלו ניתן לחבר לשרת שמריץ את תוכנת האחסון (למען האמת, ניתן לחבר את זה כמעט לכל סטורג' חדש כיום, רק שיצרן הסטורג' לא יתמוך בכך מבחינת תמיכה ואחריות, אם כי יכול להיות שגם הוא מוכר משהו דומה) ואם רוצים – אפשר לחבר שתי קופסאות סטורג' ("ראשים") בתצורת High Availability ולקבל פתרון אחסון מעולה…

.. עד שמגיעים לבעיה המרכזית באחסוני Scale Up כאלו: אם בקר ה-SAS באחת מקופסאות ה-JBOD יתקלקל, פתרון האחסון יושבת (וכמובן השרתים המקושרים לו) ואנחנו מדברים על השבתה של מינימום 4 שעות במקרה הטוב, יום עסקים במקרה הפחות טוב, וכמה ימים במקרה הרע (מה לעשות, לא לכל יבואן יש כמה כאלו שהוא שומר בסטוק למקרה חרום, וכבר ראיתי מקרה כזה).

לכן חשוב להבין, מבחינת Scale Up, תיאורתית אפשר לאחסן בו המון, אך ככל שמכניסים יותר ויותר חלקים לפתרון (עוד בקרי RAID, עוד קופסאות JBOD וכו') הסיכוי להשבתה הוא יותר גדול, הזמן לבצע Rebuild לדיסק עם מספר דו ספרתי של טרהבייט – גודל בצורה משמעותית, ולכן מעשית – זה לא מומלץ

ב-Scale Out לעומת זאת, אפשר לשלב מספר קופסאות כמו הנ"ל בכך שנצוות קופסא מול שרת, מינימום שלושה שרתים (הכמות עולה במספר אי זוגי – 3,5,7 וכו' וכו') ואז גם אם יתקלקל JBOD, יתקלקל שרת אחסון Scale Out או שניהם ביחד – המערכת תמשיך לתת שרות. החסרון כמובן קשור לעלויות – צריך יותר שרתים יעודיים, צריך Backbone של 40 ג'יגהביט לפחות, סביר להניח שנצטרך שרת עם דיסקים SSD לצרכי Cache וכו', ולכן פתרונות כאלו מתאימים לפרויקטים גדולים כמו HPC, או Big Data ועוד, וכאן שימוש בפתרונות Scale Up לא יתן פתרון אחסון מהיר ויעיל. אותו דבר לגבי כמות אחסון – אם כל מה שאתה צריך לאחסן זה כמה עשרות או מאות בודדים (100-200) של טרהבייט, לך על Scale Up.

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

על דיסקים SSD – אחריות, ביצועים, יד שניה ועוד

לקראת השנה האזרחית החדשה החלטתי לכתוב פוסט חדש המבוסס על דוח"ות שכתבתי עבור לקוחות שונים והחלטתי לקחת חלקים מהם (ברשות) ולאחד אותם לפוסט אחד. כל מה שאני כותב בפוסט זה מבוסס הן על תיעוד של היצרניות והן על בדיקות Stress testing שביצעתי עבור לקוחות. שמתי לב שרבים מאנשי ה-IT (וחלק קטן מאנשי השיווק) מביאים/מציגים פרטים ישנים או רלוונטיים ולכן בפוסט זה אתייחס לסוגים שונים של דיסקים. הן ללקוחות קצה ביתיים/סמי-מקצועיים והן ל-Enterprise. הטכנולוגיה והמושגים רלוונטיים בערך לשנתיים האחרונות.

אתחיל בנושא אחריות ו"טחינת דיסקים", מושג שמתאים לדיסקים מכניים ולא ל-SSD ואסביר מדוע.

אחריות על דיסקים נמדדת ב-2 מושגים שונים, תלוי בשוק. בשוק הביתי/סמי-פרו, היא נמדדת ב-TBW – שזה Terabyte Written, כאשר מדובר על הכמות הכוללת של מידע הנכתב על הדיסק מרגע יציאתו מפס היצור. פירמוט, חלוקה לפרטישנים, כתיבה מחדש, פירמוט מחדש, חלוקה מחדש – אינה "מאפסת" את כמות הנתונים הנכתבים על הדיסק וניתן לראות את כמות הקריאה וכתיבה על דיסק באמצעות כלים שיודעים לקרוא את ה-S.M.A.R.T בדיסק (לא חשוב אם מדובר ב-SATA, SAS, NVME). היצרן מציין כמות מסויימת ולאחריה נדלק "דגל" של WEAR out ב-S.M.A.R.T ומאותו רגע – פגה האחריות. היצרן גם מציין כמות שנות אחריות למקרה ולא מגיעים לכמות הכתיבה/שכתוב המותרת, בדרך כלל זה 3 או 5 שנים (רק בחלק קטן של הדיסקים יש אחריות ל-10 שנים, כמו לסמסונג 850 PRO)

בדיסקים ל-Enterprise המדידה היא שונה והולכת לפי DWPD, כלומר Drive Write Per Day, ובמילים פשוטות: כמה פעמים אתה יכול לכתוב על הדיסק מאפס כל יום ולמלא אותו (אף פעם לא מומלץ למלא SSD עד הסוף, תמיד מומלץ להשאיר 5-10% מחוץ לפרטישן שכותבים עליו, וזאת כדי לאפשר לבקר להזיז נתונים שנכתבים על תאים בעייתיים ובכך לתת לדיסק להמשיך לפעול כמצופה) וגם כאן יש כמות שנים לאחריות (3-5). על הנייר, במידה ותעבור את כמות ה-DWPD, דגל ה-Wear Out ב-S.M.A.R.T ידלק והאחריות תפוג.

כל מה שהזכרתי כאן – הוא "על הנייר", אבל המציאות שונה לחלוטין.

בניגוד לדיסקים מכניים, דיסקים SSD (שוב, אין זה משנה איזה חיבור, ולמעט דיסקים Optane מהקצה הגבוה – שהם אינם מבוססי NAND Flash) צריכים טמפרטורה מסויימת כדי לכתוב. בדרך כלל SSD במצב אידיאלי שלא מבצע עבודה יהיה בטמפרטורות הנעות בין 30-40 מעלות וכשמתחילים לכתוב נתונים, החום עולה, וככל שכותבים עוד ועוד נתונים (עשרות עד מאות ג'יגהבייט) החום עולה ברציפות וכשהוא מגיע בערך ל-78 מעלות ומעלה, מהירות הכתיבה יורדת משמעותית (אגב, זה קורה גם ב-Mixed Intense SSD אם כי בצורה פחות דרסטית) לעשרות מגהבייט עד קצת מעל 100 מגהבייט לשניה כשכותבים מעל 30-50 ג'יגהבייט באופן רצוף. בכתיבה אקראית/מזדמנת קצרה (עד 5-10 ג'יגהבייט, תלוי ב-SSD), ה-SSD יפעיל אלגוריתמים שונים שכל מטרתם היא לחסוך בכתיבה, כך שגם בעבודות כבדות מאוד, ב-99.99% מהמקרים לא תגיעו לכמות הכתיבה המותרת ביום (כמות הקריאה ביום אינה מוגבלת מבחינת אחריות בשום SSD), ולכן – אין זה משנה אם המערכת שלכם כותבת ביום 2 ג'יגהבייט או 300 ג'יגהבייט ביום על SSD – זה לא "טוחן" אותו (ולא תשמעו ממנו קולות כמו בדיסקים מכניים ישנים).

הדברים שכן יאיטו SSD הם:

  1. ניצול 100% מהדיסק כך שלא נשאר למערכת מקום להעברת מידע שמאוחסן בתאים דפוקים (ראו המלצה לעיל בנוגע ל-Provision).
  2. דיסקים SSD ביתיים זולים (Corsair MX300, MX500, סאנדיסק ביתיים ישנים)
  3. דיסקים SSD לא DRAM או SLC Cache שמשמש כחוצץ ל-NAND.

נקודה חשובה לגבי אחריות דיסקים (SSD או מכניים): היצרן מעניק אחריות לדיסק למשך מספר שנים המצוין (או לפי כמות כתיבות או לפני DWPD). בחברות שקונות את הדיסק מיצרן השרתים – התהליך קל ופשוט – נותנים אחד, מקבלים אחד. במקרים של קניה מאמזון – אפשר לפנות ישירות ליצרן, תצטרכו להציג חשבונית על מנת להתחיל תהליך החלפה. אצל חלק מהמוכרים בארץ של דיסקים דגמים ישנים לציוד ישן – האחריות היא מול המשווק בלבד (אולטרייד לדוגמא). בכל המקרים של החלפה מול היצרן, האחריות שתהיה על הדיסק המוחלף אינה אחריות מלאה ל-3-5 שנים אלא רק ליתרה של האחריות. לדוגמא: אם יש לנו מערכת בת 4 שנים (שקנינו אותה יחד עם הדיסקים שיש להם אחריות ל-5 שנים) ואנחנו מחליפים דיסק תקול, היצרן יתן אחריות למשך שנה בלבד (או 90 יום אם האחריות נגמרת עוד חודש נניח), ולכן במקרים כאלו אולי כדאי לשקול לקנות דיסקים חדשים.

נעבור מכאן לדיסקים SSD יד שניה: ישנם מדי פעם באתרי מכירה שונים (איביי, אמזון וכו') דיסקים משומשים של Enterprise במחיר זול ומפתה. אלו דיסקים שלא ממש יתאימו לחברות מכיוון שהיצרן לא יתן לכם כרוכשים אחריות כלשהי. מה שכן, הם יכולים להתאים למקומות ואנשים שלא אכפת להם לרכוש בזול תוך נטילת סיכון שלא תהיה אחריות. מבחינת ביצועים – לא אמורה להיות בעיה איתם. חשוב, אם אפשר, לבקש מהמוכר לראות תמונת סטטוס של ה-S.M.A.R.T לפני רכישה (בלינוקס אפשר לבדוק זאת עם smartctl, ב-Windows יש S.M.A.R.T. Monitoring Tools) ולבדוק מה הגבולות כתיבה שהיצרן ציין לגבי אותו SSD.

נקודה נוספת שחשובה הן בדיסקים NVME חדשים או יד שניה: אם אתם מחברים מספר דיסקים כ-RAID כלשהו (לא RAID-5!) ואתם מצפים לראות ב-OS מהירות כתיבה/קריאה כפול מה שכתוב על המדבקה/במפרט – תתכוננו להפתעות. Windows Server 2019 במערכת עם 12 דיסקים ב-RAID-6 לדוגמא נתנה ביצועים של … 10 ג'יגהבייט לשניה בקריאה, גם אחרי כיוונון כל הגדרה אפשרית, ובלינוקס עם ZFS יש תוצאות הרבה יותר טובות אך שאינן מגיעות למהירות המדבקה (אז אל תסמכו על JMeter).

דיסקים שכדאי לצפות לקראתם בשנה הבאה (לפי השמועות וההדלפות) – לכל אלו שצריכים דיסקים SSD NVME לעבודות כבדות (Cache, SQL) ואחרים:

  • סמסונג ZET דור שני וביצועים מאוד מרשימים בקריאה, ו-Latency שמאוד קרוב ל-DRAM
  • Optane דור שני – דיסקים יותר גדולים, פתרון יותר טוב לקירור, ביצועים בערך כמו הדור הנוכחי.
  • דיסקים SSD ל-Enterprise מבוססי QLC (כל היצרנים) זולים. עדיף לוותר, ביצועי כתיבה מחרידים!
  • שרתים עם דיסקים SSD בחיבור U.3 או מסוג Ruler. תהיו קונסרבטיביים ואל תרכשו – החברות (סמסונג, אינטל ועוד כמה) עדיין במריבות לגבי הסטנדרט. רוצים NVME? רק עם חיבור U.2 או כרטיסי PCIe.

תשתית מקומית וענן: חסכון – צו השעה

כמעט בכל חברה מגיע מצב שאחת הסיטואציות הבאות מתרחשות:

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

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

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

אז איך בעצם ניתן לחסוך?

בכל הקשור לתשתית מקומית, ההמלצה שלי במקרים רבים היא לפני שאצים רצים לרכוש שרתים חדשים לדוגמא, לשדרג את הקיימים. תחליפו מעבדים לכאלו עם יותר ליבות, תוסיפו זכרון, אם אתם עובדים עם דיסקים מקומיים – תחליפו אותם ל-SSD טובים וכו'. אם לדוגמא רכשתם (בחוכמה) שרתים כמו של חברת SuperMicro, אז אתם בכלל יכולים לעבור קדימה דור של מעבדים (לדוגמא: V3 ל-V4 או Xeon SP דור ראשון לדור שני) – כלומר בלא מעט מקרים ניתן לשדרג תשתית קיימת של שרתים ולהרוויח ביצועים יותר גבוהים, וזאת במחיר קטן בהרבה מרכישת שרת חדש (מה גם שהשדרוג נתמך לחלוטין על ידי היצרן והמפיץ)

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

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

  • להפסיק לחשוב על הענן הציבורי כ-DC פרטי שלנו. ב-VMware, כשמקימים מכונה מקומית וכשאתה מגדיר VM עם 16 ליבות או חצי טרה אחסון (ב-Thin Provisioning) – אז המערכת תהיה מספיק חכמה לתת לך משאבים, אבל לא לחסום את המשאבים הללו משימוש מכונות VM אחרות. בענן ציבורי – אתה משלם על כך, גם אם השתמש באחסון ב-2% ובמעבד ב-4%, אתה תשלם כאילו ניצלת את הכל, אז במקרים כאלו, כדאי לשנות Instance או לבנות אותה מחדש עם משאבים יותר מצומצמים.
  • לנטר ולצמצם – כלים כמו Terraform יודעים היטב לתמוך בכל ספקי הענן הציבורי. נכון, זה לא בדיוק "קליק קליק קליק" אבל בהחלט שווה להשקיע וללמוד ואז להתחיל להריץ את זה על החשבון שלכם ולמצוא מה המשאבים שאינם מנוצלים, דברים שהוגדרו בפראות אבל לא ממש משומשים וכו' – ומשם להחליט מה לעשות עם זה. החסכון בשיטה הזו – גדול מאוד.
  • להפסיק להתעצל! אתה צריך SQL שכל מה שמתחבר אליו זה client ורבע? תקים קונטיינר או Instance כזה בעצמך במקום להשתמש בשרות מנוהל. זה יותר זול. נכון, צריך להשקיע קצת יותר בהקמה והגדרה, אבל זה חוסך בטווח הארוך.
  • לעבור לקונטיינרים במקום מכונות וירטואליות – קונטיינר תופס פחות משאבים, ניתן לרפלק, ויש לו Scaling מעולה. אה, ובחישוב סופי, זה יוצא יותר זול.
  • לבחור תוכנות אחרות שהן יותר "Native" לענן – תוכנות שיודעות לאחסן ב-Object Storage לדוגמא, שהוא הרבה יותר זול מאחסון שמחובר ל-Instance, וזו רק דוגמא אחת.
  • לכבות מכונות – מכונה כבויה עולה הרבה פחות ממכונה פעילה (אתה עדיין צריך לשלם על האחסון שהיא תופסת), אז אולי הגיע הזמן לאיזה סקריפט קטן שרץ על כל המכונות ומכבה כאלו שלא עושות כלום, ואגב, עדיף להגדיר עם Terraform שמכונות מסויימות יכובו אוטומטית (או ימחקו) לאחר זמן מה, כמו מכונות טסטים שהוקמו זמנית ושכחו מהן.

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

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

כל מי שקונה או קנה אכסון בוודאי שמע על המושגים "שכבה קרה" ו-"שכבה חמה". למי שאינו מכיר את המושגים: "שכבה קרה" מציינת אחסון על דיסקים מכניים איטיים או רגילים (SATA לדוגמא) ואילו ה"שכבה חמה" מציינת אחסון על דיסקים SSD.

בעבר, פתרונות אחסון של חברות כמו NetApp ו-EMC כללו בתוכן מספר שכבות:

  • שכבה מאוד מהירה – שהיתה מורכבת ממקלות זכרון בלתי נדיף (NVRAM)
  • בחלק קטן מהמקרים, שכבה מהירה נוספת – RAM מגובה סוללה
  • שכבת דיסקים SSD ("שכבה חמה")
  • שכבת דיסקים מכניים (SAS או SATA) ("שכבה קרה"

עם התפתחויות הטכנולוגיות השונות, כמעט כל היצרנים ירדו משימוש ב-NVRAM (זה יקר מאוד ליצרן הפתרון אחסון, מה שכמובן מייקר את הפתרון ללקוח הסופי ומה שמקשה בתחרות מול יצרנים אחרים), וכיום בד"כ פתרונות אחסון משולבים (דיסקים מכניים ו-SSD) כוללים שכבה חמה קטנה שמורכבת מדיסקים SSD ושאר הדיסקים הם מכניים (כיום רוב היצרנים פשוט מכניסים דיסקים SATA, חלקם עדיין מוכר דיסקים SAS), כך שבסופו של דבר, כלקוח, כל היצרנים יציעו בפניך שתי אפשרויות (עם כל מיני תוספים כמובן): מערכת אחסון "היברידית" (מכנית, SSD) או AFA (כלומר All Flash Array) שמורכבת מדיסקים SSD. משהו חדש שנכנס לשוק (ולא ראיתי עדיין אותו בארץ) הוא "היבריד SSD" (שם שאני נותן עבור פוסט זה) כאשר רוב הדיסקים הם SSD Read Intence ומספר קטן של SSD הוא NVME Mixed Intense. לחברת לנובו יש מערכת שה-SSD Mixed Intense מוחלף בדיסקים Optane של אינטל, כדי לקבל מהירויות כתיבה גבוהות (אבל אותו סטורג' ספציפי יקר מאוד – הוא מתחיל ב-7 ספרות בדולרים).

כעת נתמקד במה שנקרא בחלק מהמקרים "שכבת ה-Cache". בעבר (ועדיין בחלק מהמקרים כיום) פתרון האחסון היה כולל מספר מצומצם של דיסקים SSD די קטנים (200-400 ג'יגהבייט), מטרתם היתה אחת: לקבל את כל המידע שאמור להיכתב לתוך פתרון האחסון, לאשר ל-client שהמידע נכתב (מה שנקרא sync) וברקע להעביר את המידע לדיסקים המכניים שמטבע הדברים הם איטיים בהרבה מאותם SSD. ה-SSD שהיו אז היו דיסקים קטנים ויקרים להחריד, הואיל ותאי ה-Flash שלהם הכילו מקסימום מספר אחד בכל תא (מה שנקרא Single Level Cell, או SLC), כיום רוב מוחלט של הדיסקים מכיל Flash עם תאים שיכולים להכיל שני מספרים בכל תא (MLC) או שלושה מספרים בכל תא (TLC). הכלל הפשוט הוא שככל שמאחסנים יותר מספרים בתא, הכתיבה את התא (ובעצם אל שבבי ה-Flash ב-SSD) יותר איטיים, ולכן – כאשר חושבים לרכוש פתרון אחסון ומקבלים מפרט, חשוב מאוד לשאול מה סוג התאים ב-SSD: האם הם MLC (ונגזרותיו, בכולן מופיעות האותיות MLC) או TLC או QLC (שזה הכי איטי ולמעט ארכיבאות אני לא ממליץ אותו לשום פתרון אחסון). לא תמיד אפשר לדעת זאת הואיל וכל יצרן פתרון אחסון נותן שמות אחרים ל-SSD מהשמות שהיצרן SSD נותן למוצריו, ולכן צריך "לדוג" קצת. אפשרות אחרת לדעת – היא לבדוק האם ה-SSD הוא Read Intense או Mixed Intense (ה-Mixed Intense מתאים לעבודות שכמות הקריאה והכתיבה די שווה, ולכן הוא אידיאלי לשמש כ-Cache בפתרון אחסון). הטובים ביותר הם MLC או Mixed Intense.

זוכרים את הדיסקים הקטנים מהפיסקה הקודמת? איתם קשה לבנות Cache אלא אם רוצים לשרוף כספים כאילו אין מחר. כיום לעומת זאת, דיסקים שהם Mixed Intense שהם מעולים לצרכי Cache – יכולים לתת ביצועים מעולים לא רק בכתיבת ה-DATA מבחוץ אל תוך פתרון האחסון, אלא גם לשמש כ-"שכבה חמה". חישבו על כך: 4 דיסקים SSD בתצורת Mixed Intense בגודל 4 טרהבייט פר דיסק יתנו לנו 16 טרהבייט נטו של "שכבה חמה" (הדיסקים הללו מוגדרים בחיבור כ-RAID-0 הואיל וכל הנתונים שנמצאים שם – זמניים, ה-DATA כולו מאוחסן בשאר הדיסקים שאינם מוגדרים כ-Cache), ועם כמות כזו של Cache (שבעצם משמש כ"שכבה חמה") רוב הקריאות נתונים לדוגמא יקראו מאותם רביעיית SSD, ומכיוון שאלו דיסקים בחיבור NVME, אנחנו יכולים לקבל מהירות קריאה של 12-14 ג'יגהבייט לשניה (תיאורתית, צוואר הבקבוק שלכם במקרים כאלו יהיו הסיבים או כל סוג חיבור אחר, לא הדיסקים).

לכן, כיום, אם מישהו רוצה לפתרון האחסון שלו "שכבה חמה", והוא רוכש אחסון היברידי (מכניים ו-SSD), הוא צריך לוודא כי ישנם מספר SSD שהם Mixed Intense ואם אפשר – בחיבור NVME. אל תרכשו דיסקים SSD גדולים לצרכים כאלו (8-10 טרהבייט ומעלה) מכיוון שהם מאוד יקרים. עדיף לרכוש 4 של 4 מאשר 2 של 8 טרהבייט ושכל אותם SSD בפתרון ההיברדי מוגדרים כ-Cache (זה מה שיוגדר כברירת מחדל במערכת פתרון האחסון). במערכות AFA אין צורך בכך הואיל וגם SSD בחיבור SATA יתן מהירויות קריאה מהירות מאוד ובכך פתרון זה מייתר את הצורך ב"שכבה חמה". אגב, AFA שכולו מלא ב-SSD עם NVME יהיה תמיד "חנוק" מבחינת רוחב פס החוצה אלא אם יש Backbone של 100 ג'יגהביט ומעלה.

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

אחסון: על דחיסה, Dedup וטריקים שיווקיים

אני רוצה לפתוח בגילוי נאות: אני מוכר שרותי יעוץ בכל הקשור לאחסון "קופסתי" סגור (כלומר סטורג' של Brand) ואחסון בפתרונות HCI (כלומר vSAN ואחרים) אך אינני צד במכירת הציוד (כלומר: כעסק, אני לא רוכש מהמפיץ ומוכר לך). כלקוח, אתה אוסף את ההצעות, ואני נותן את הערותיי, המלצות, תעדוף, וכו'. "חץ ביז" כן מוכר שרותי יעוץ יעוץ ואינטגרציה לפתרונות אחסון גדולים מבוססי Scale Out (מאות טרה ומעלה).

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

אתאר סיטואציה: חברה רוצה לרכוש פתרון אחסון אחר ממה שיש לה כיום. בדרך כלל אנשי המכירות של חברות/מפיצים שונים ישאלו כמה נטו אחסון אתה מחפש, האם אתה מחפש All Flash או שילוב של דיסקים מכניים ודיסקים SSD שישמשו כ-Cache ועוד מספר שאלות. עד פה הכל טוב ויפה.

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

נושא ה-Dedup הוא נושא מורכב. ברמת המאקרו, Dedup זו פונקציה בסטורג' שסורקת את הבלוקים באחסון, מוצאת אלו בלוקים נמצאים יותר מפעם אחת, ומשנה את הרישום כך שאם יש לנו 10 בלוקים זהים, בלוק אחד ישאר באחסון ו-9 אחרים יקבלו הפניה (reference) לאותו בלוק, ובכך מקבלים במקרה הזה Dedup ביחס של 10:1. מכיוון שסטורג' מכיל תכנים רבים ושונים, יחס ה-Dedup משתנה בהתאם לתוכן ובד"כ יופיע יחס dedup משוקלל. תהליך ה-dedup בדרך כלל רץ מחוץ לשעות העבודה, בחלק מהפתרונות הוא "יחנוק" את משאבי העיבוד ובחלק מהפתרונות התהליך יתפוס רק כמות קטנה של זכרון ועיבוד (כמו ב-vSAN – שם התהליך תופס עד 5% ממשאבי העיבוד). אחד הדברים הראשונים שצריך לדעת כבעל הסטורג', הוא שאתה לא יכול לקבוע את יחס ה-Dedup. זה נקבע בהתאם למה שמאוחסן בסטורג' – ברמת בלוק, ווליום וכו'. (שוב, זהו תאור ברמת מאקרו).

לדוגמא: נניח ויש מערכת של VMWare ואנחנו יוצרים 3 templates של מערכות הפעלה שונות: Windows 10, Windows Server 2016, Centos 7.7. אחרי שיש לנו את ה-Templates אנחנו מקימים 10 מכונות VM מכל מערכת הפעלה, כלומר יש לנו עכשיו 30 מכונות VM – ונעצור. אם נריץ Dedup עכשיו, עוד לפני שניכנס לכל VM ונתקין אפליקציות שונות, נריץ תהליך Dedup ונקבל מספר משוקלל ל-Dedup של 10:1 ואם כל תהליך ה-Dedup ירוץ בשלמותו, אנחנו נחסוך מקום רב, אולם ברגע שנתקין אפליקציות שונות על כל VM עם הגדרות ותהליכים שונים, יחס ה-Dedup (לכשנריץ את התהליך שוב) ירד מכיוון שה-DATA שונה בין VM אחד לשני, גם כשמדובר באותן מערכות הפעלה. בגלל זה, Dedup זה דבר מעולה כשמקימים פתרון VDI – לא צריך פתרון אחסון מפלצתי.

דחיסה (Compression) לעומת זאת היא תהליך שמבוצע בצורה שונה בכל מיני פתרונות אחסון. בחלקם זה נעשה ברמת Block ובחלקם ברמת קבצים. שוב, ברמת המאקרו – המערכת לוקחת בלוק ומנסה לדחוס אותו דחיסת Lossless (כלומר שאין איבוד נתונים). אם המערכת מצליחה לבצע יחס דחיסה טוב (אם נניח גודל הבלוק הוא 128 קילובייט והיא מצליחה לדחוס אותו ל-40K) הוא ישמר כך ויפרס מחדש בכל פעם שנקרא נתונים ממנו. אם לעומת זאת, יחס הדחיסה נמוך, המערכת תעדיף כדי להשאיר ביצועים גבוהים – לא לדחוס את אותו בלוק.

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

כשזה מגיע לפתרון HCI כמו vSAN – הדברים שונים. כשמפעילים דחיסה ו-Dedup ב-vSAN, המערכת תבצע זאת בזמן שהיא מעבירה נתונים מהדיסק Cache לדיסקים המסומנים כ-Capacity ואפשר לקרוא על כך כאן. על מנת לחשב נכונה כמה דיסקים תצטרכו, אתם יכולים להשתמש במחשבון הזה (הוא מצריך רישום באתר VMWare). חשוב לקחת בחשבון דברים כמו Slack Space (זהו שטח האחסון שאינו מיועד לשמירת מכונות VM אלא ל-Snapshots ודברים אחרים ש-vSAN צריך – בדרך כלל מומלץ בערך על 25% מהשטח ברוטו). יש את המחשבון הזה שהוא הרבה יותר פשוט ומתאים יותר כדי לחשב אחסון בלבד (אל תתייחסו למחיר, הוא מיועד למי שרוצה לרכוש את ה-Appliance).

אחד הדברים החשובים כשזה מגיע לרכישה – זה שאתה מקבל את הדיסקים במחיר מופחת כחלק מחבילת האחסון שאתה רוכש. כלומר אם נניח דיסק SSD עולה $1000, סביר להניח שאיש המכירות יוריד את המחיר ל-900 או 800 דולר. לעומת זאת, אם תחזור לאותו נציג יצרן ותבקש לרכוש ממנו נניח עוד דיסקים, אתה תשלם פר דיסק יותר. נניח 1200-1400$, ולכן ההמלצה שלי היא לרכוש את כמות הדיסקים שאתה צריך כדי להגיע לכמות האחסון נטו מבלי להתייחס ל-Dedup Ratio ולדחיסה. אותו Dedup ו-Compression יעזרו לך בדחיית הרכישת דיסקים הבאה (כפי שציינתי – אני מאמין שהם יעלו לך יותר). אם תלך הפוך ותכניס מראש יחס Dedup בחישוב כמות הדיסקים שאתה מזמין ושבמציאות אולי לא תגיע אליה, תקבל בעצם כמות מופחתת של אחסון.

לסיכום: רכישת אחסון קופסא, או שדרוג ל-vSAN או Nutanix או כל פתרון HCI מסחרי הוא עסק יקר, ברוב המקרים זה יעלה כמה מאות אלפי דולרים. אל תאמינו להבטחות של אנשי מכירות, אל תתביישו לשאול שאלות, והכי חשוב: אל תיפלו להבטחות שווא (ראיתי כבר חברת השקעות שנפלה ברכישה בדיוק על הדברים הללו!). מדובר בטכנולוגיה, לא בקסמים ולכן עדיף להתייעץ לפני שמחליטים מה לרכוש.

בהצלחה.

עננים ציבוריים מקומיים מול עננים ציבוריים אמיתיים

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

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

נדמיין עתה מצב תיאורתי שבו החלטתי להתחרות בכולם. אני משיג VC נחמדים ומשכנע אותם להשקיע בעסק שלי סכום נחמד של 8 ספרות (בדולרים). אני רוכש כמה עשרות ארונות, מפזר אותם בין ספקי האינטרנט השונים בארץ, "מפוצץ" את כולם בשרתים חדשים ואני מקים בדרך SDN ו-Software defined storage מפלצתי. על כל התשתית הזו אני מקים מערכת שתתן ללקוחות דרך ממשק WEB ודרך API את השרותים הבאים:

וירטואליזציה, קונטיינרים (עצמאית, ללא צורך בהקמת מכונות וירטואליות), Serverless, הקמת "ברזלים" יעודיים ללקוח, שרותי Object Storage ו-Block Storage, שרותי NFS/CIFS יעודיים לרשת שלך בלבד, שרות רשת פרטית משלך (כמו VPC), שרותי Load Balancer, שרותי DNS, שרותי identity, שרותי Imaging למכונות VM שלך, שרותי אורקסטרציה, שרותי Messaging, שרותי התראות, שמירת משאבים וחלוקתם על ידי הלקוח, אורקסטרציית קונטיינרים, ביג דאטה, שירותי גיבוי, שחזור ו-DR, תאימות ל-EC2 (כפרוקסי), מטריקות, ניטור מלא של הכל, שרותי Event (כמו Cloud trail), שרותי Governance ושרות יחודי של Benchmarks, וכמובן – שרותי Billing ו-Chargeback – וכל זה זמין ביום הראשון. תירשם, תכניס פרטי כרטיס אשראי וצא לדרך.

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

ספקי ענן מקומיים, בניגוד לספקי ענן ציבוריים גדולים – יכולים להציע כמות מוגבלת מאוד של שרותים, ובנוסף – לא יהיה לכם מושג מה תקבלו מבחינת ביצועים (לא מאמינים? קחו את החוזה מול הספק שלכם, חפשו את המילים CPU Pinning או התחייבות לגבי ביצועי Compute, סטורג' וכו'. אני מאמין שלא תמצאו את זה מוזכר במסמכים). טכנית, אם ניקח לדוגמא שרת עם 16 ליבות, אין שום מגבלה שיכולה למנוע הרצה של מכונה וירטואלית עם 32 ליבות. אתה כלקוח יכול לבדוק אם זה מה שאתה מקבל אם תריץ אפליקציית Benchmark כלשהי שוב ושוב במשך כמה ימים ותוציא את הפלט לקובץ ואז תוכל להשוות .. ולהתעצבן.

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

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

לסיכום, אני ממליץ לחשוב על 2 דברים חשובים:

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

כמה מילים על קונטיינרים "מבחוץ"

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

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

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

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

הפצות לינוקס כמו רד-האט, CentOS, SuSE, אורקל לינוקס, דביאן, אובונטו וכו' – נבנית בכל פעם מאפס על ידי הידור קוד של חבילות שונות עד שנבנית הפצה בסיסית לחלוטין. להפצה הזו המערכת תעשה Boot, ומשם היא תמשיך להדר את הקוד של כל החבילות שונות (ב-רד-האט, או כל הפצה מבוססת RPM יש חבילות מיוחדות שנקראות SRPM שמכילות קוד מקור + טלאים וסקריפטים כדי לקמפל אותה). ההפצה כוללת חבילות שונות מבחוץ שעברו בתוך יצרן ההפצה בדיקת קוד וברוב המקרים גם שינויים על מנת לרוץ על אותה הפצת לינוקס ספציפית.

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

בחברות גדולות (כמו בנקים וכו') בדרך כלל לא פותחים את חומת האש להורדת חבילות מיצרן ההפצה באופן ישיר ומשתמשים בתוכנת-אמצע (Middleware) כמו Red Hat Satellite כדי להתקין את ההפצות ועדכונים על שרתים ומחשבים נוספים. ברוב המקומות האחרים שאינם עובדים ישירות מול רד-האט או עובדים עם הפצות אחרות, יש כלי אחר חינמי ובקוד פתוח כמו SpaceWalk שמאפשר להפיץ פנימית בשרתי החברה (ובחשבון הפרטי בענן הציבורי של החברה) עדכוני תוכנה בצורה מאובטחת ומוצפנת (אפשר לשלב בתוך הכלי גם את ה-CA של החברה).

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

איך? די פשוט. כמעט בכל קונטיינר שמופיע ב-Repository ציבורי (כמו Docker Hub) אנחנו נמצא קישור ל-Github שמכיל את קוד ה-Dockerfile. נוריד את קבצי ה-Dockerfile ואחרים מה-git (פקודת git checkout) ואז פשוט נבנה את הקונטיינר מחדש. היתרון הגדול בבניית הקונטיינר מחדש הוא בכך שחבילות רבות מקבלות עדכוני אבטחה וקונטיינרים הזמינים ב-repo ציבורי לא תמיד מעודכנים, וכך נוכל לבנות אותם עם הגרסאות המעודכנות עם תיקוני אבטחה ומה שיותר חשוב – החבילות מגיעות ממקום ידוע (אם משתמשים ב-spacewalk – אז הם מגיעים משרת פנימי בחברה שהוריד את החבילות ממקור בטוח), ואפשר כמובן לאחסן את אותם קונטיינרים ב-Registry פרטי פנימי (הנה הוראות איך להקים אחד באובונטו).

במקרים מסויימים ה-Dockerfile כולל פקודת COPY וקבצי המקור אינם נמצאים ב-repo באותו git. התייחסו במשנה זהירות לקונטיינרים מסוג זה, ובמקרים כאלו אם אתם ממש צריכים את הקונטיינר הספציפי, אולי כדאי להריץ עליו סריקה עם אחד הכלים שהזכרתי לעיל.

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

הבעיות של היום ומחר – עם פתרונות של אתמול ושלשום

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

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

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

  • ההמלצות טובות ונכונות (אם יהיו לי הערות או נקודות מסויימות – אציין אותן)
  • הרעיון העקרוני בהמלצות נכון, אבל מומלץ לשלב פלטפורמות X,Y וטכנולוגיות A,B.
  • אתם שילמתם על היעוץ הזה? ברצינות? אתם נמצאים בשנות ה-90 או ה-2000 או מה?

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

להלן שתי דוגמאות, מהחודשים האחרונים:

  • חברה מסויימת רצתה להריץ פלטפורמה מסויימת על לינוקס מספר רב של פעמים. המערכת אמורה להיות פתוחה לרשת וההפניות יועברו דרך Load Balancer (אני לא יכול לפרט עקב הסכמי סודיות). היעוץ שהם קיבלו: לרכוש 18 שרתים עם מפרט די "כבד", רכישה של Load Balancer חומרתי, סטורג' מפלצתי, לכל הברזלים רשיון VMWare Enterprise.
    ההצעה שלי (שהתקבלה): במקום 18 שרתים עם מפרט כבד, 2 שרתים עם מפרט נמוך, 4 שרתים עם מפרט כבד (יחסית, הרבה זכרון), מערכת OpenShift, ושרת נוסף קטן שיריץ ESXI כדי להריץ 2 מכונות VM שמריצות Windows. סטורג' – או בניה או לרכוש משהו קטן מכיוון שאין צורך ב-IOPS רציני או כמות אחסון גדולה. הפלטפורמה תרוץ כולה על קונטיינרים, ובהתבסס על הסטטיסטיקה שנמסרה לי, אני מתקשה להאמין שתהיה צריכת משאבים של יותר מ-40% בכל השרתים.
  • חברת מדיה מסויימת רצתה לאחסן תכנים רבים ולהערכתם הם יגדלו בכל שנה בסביבות ה-100-150 טרהבייט. הדרישה – אפשרות גדילה ללא SPOF (כלומר: Single Point of Failure) ומבלי לרדת בכמות רוחב הפס הפנימי, אדרבא – אם אפשר שתהיה גדולה יותר ויותר – הם ישמחו. כאן לא היתה חברה מסויימת שנתנה יעוץ, אלא החברה ביקשה מכל מפיצי הסטורג'ים הגדולים והמוכרים בארץ, ואני התבקשתי להמליץ על אחת מההצעות.
    הבעיה: אף הצעה לא כללה פתרון אחסון Scale Out. כל ההצעות היו פחות או יותר "תוסיף מדף" ובקשר לשרידות – קנה שתי ראשים. לפיכך המלצתי הפשוטה (שהתקבלה) היתה: זרקו את ההצעות ובקשו או פתרון Scale Out או לבנות פתרון Scale Out מבוסס קוד פתוח או תוכנה סגורה שמציעות יצרני שרתים וחברות אחרות, ורשת עם Backbone של 40 ג'יגהביט שיגדלו בהמשך לכיוון ה-100 ג'יגהביט.

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

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

יש לכם שרתים/סטורג' של HPE עם SAS SSD? מומלץ לקרוא

חברת HPE הוציאו לאחרונה עדכון דחוף לקושחות עבור מספר דיסקים SSD בחיבור SAS שנמצאים על מגוון הציוד ש-HPE מוכרת: שרתים (Proliant, Apollo), ועבור פתרוות אחסון: (JBOD D3xxx, D6xxx, D8xxx, MSA, StoreVirtual 4335,StoreVirtual 3200). דגמי הדיסקים וכל ההערות ולינקים לאפליקציות תיקון מופיעים במסמך ש-HPE פרסמה.

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

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

עקב באג בקושחת הבקר על דיסק ה-SSD, לאחר 32,768 שעות (כלומר 3 שנים, 270 יום, ו-8 שעות) כל הנתונים על דיסק ה-SSD יעלמו. זה לא "אם", לא "אולי", זה ודאי. מישהו כתב קוד די דבילי וזו התוצאה. התיקון עצמו משכתב קושחה חדשה לכונן ה-SSD ועל מנת שהקוד יפעל, יש צורך ב-Reboot למערכת (HPE כותבים שאין צורך לעשות Reboot, מהיכרות קודמת עם בקרי ה-Smart של HPE, אני ממליץ דווקא כן לעשות Reboot). התיקון הזה ימנע את ה-Time Bomb לכונני ה-SSD הנ"ל.

עכשיו הגירסה היותר "גיקית" לאנשים שצריכים לטפל בדברים. הדברים שאני כותב רלוונטיים למערכות VMWare ESXi ולהפצות לינוקס השונות (כרגע, רשמית, בלינוקס ההפצות הנתמכות הן RedHat, CentOS, SuSE, אם אתם עם אובונטו או דביאן, תצטרכו קצת להכיר את rpm2cpio).

מבחינה טכנית, לאחר הזמן הנ"ל (3 שנים, 270 יום, 8 שעות), מה שיקרה הוא שהמפות שהבקר משתמש בהם כדי לדעת היכן כל דבר מאוחסן, אלו תאים (Cells) דפוקים, אופטימיזציה וכו' – ימחקו. ה-DATA עדיין נשאר על שבבי ה-Flash, אבל בלי המפות אי אפשר לעשות כלום, אין כאן לצערי תהליך Rebuild שאפשר לעשות (טכנית, זה אפשרי, אם מלחימים JTAG ל-SSD ו"מדברים" ישירות עם הבקר SSD, אבל אז צריך להכיר את הבקר, פקודות, אסמבלר של ARM וכו' – והידע הזה לא קיים ציבורית).

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

  • בלינוקס קיים זמן רב שרות מובנה של עדכון קושחה מבלי שתצטרך לבדוק/לנחש איזה חומרה יש לך בתוך השרת. כל מה שצריך זה להתקין את חבילת fwupd מהפצת הלינוקס שלך, להריץ (כ-root) פקודה fwupdmgr get-updates ואת הפקודה fwupdmgr update והמערכת תוריד אוטומטית את הקושחות הרלוונטיות לשרת/מחשב שלך. כשתבצע Reboot הוא יפעיל אפליקציה דרך ה-UEFI שמעדכנת את הקושחות שצריך, וכשזה מסתיים, המערכת תבצע אוטומטית reboot ובכך העניין טופל. הבעיה? ב-HPE בקושי שולחים עדכוני קושחה לשרות הזה.
  • HPE מוציאים שני עדכונים שונים שמיועדים ל-SSD שונים. HPE כבר הוציאו אפליקציה בלינוקס מאוד ותיקה שיכולה לתשאל את בקר ה-SMART (היא נקראת: hpacucli) אלו דיסקים יש ובכך להשוות דגמים ולהתקין את הקושחה, אבל לא, הצורה שהם כתבו את סקריפט העדכונים תגרום לאנשי לינוקס ותיקים לרענן את קטלוג הקללות שלהם.

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

  • הראשונה – לתשאל את הבקר, וזה במקרה אם אתה מריץ לינוקס פיזית על השרת, פקודה כמו hpacucli ctrl slot=0 pd all show תציג לך את הדיסקים, דגם, מספר סידורי וכו', כאן grep ו-awk יכולים לעזור לך לעשות סדר ולמצוא את הנתונים.
  • השניה – לבצע reboot לשרת ולהיכנס לתפריט ה-SMART. שם מופיעים לך דגמי הדיסקים.
  • השלישית, קצת פחות מומלצת – ללכת לשרת, להוציא דיסק SSD החוצה ולהשוות את הדגם.

אם יש לך דיסקים שנכללים בעדכון, תצטרך לבחור להוריד את הסקריפט הרלוונטי, לעקוב אחרי ההוראות ולשלוח את העדכונים שיעברו דרך ה-SMART ישירות לבקר ה-SSD ויעדכנו אותו. האפשרות האחרת שיש זה להוריד SPP, להוריד את החבילות, לשים באיזו מכונת Windows או לזרוק הכל לדיסק און קי (לשים את החבילות תחת תיקיית packages/ ) ולהשתמש ב-SUM. זה כמובן אומר שתצטרך להשבית את המכונה עד שתעדכן את הקושחות באותם דיסקים.

חשוב לזכור: תהליך עדכון קושחת בקר SSD מבצע Reboot לאותו דיסק SSD (לא לשרת), ולכן יכולים "לקפוץ" לכם התראות על בעייתיות באותו דיסק SSD, עד שהמערכת "מבינה" שהדיסק תקין, קחו זאת בחשבון לפני שאתם נזעקים ממערכת ההתראות שלכם, ובגלל זה אני ממליץ במקרים שמדובר בשרת שמריץ ESXi לעשות את העדכונים לאחר שהעפתם ממנו (עם live migrate) את כל מכונות ה-VM ולאחר ה-Reboot לתת ל-DRS להזיז מכונות VM לשרת המעודכן (אם אין DRS, תזיזו ידנית).

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