לאחרונה אנחנו שומעים יותר ויותר את המונחים Kubernetes ו-Containers. יש המון בלבול סביב העניין לכן לקחתי על עצמי את המשימה לנסות לפשט את הדברים ולעשות סדר אחת ולתמיד. למה זה חשוב? כי בזכות הידע הזה תוכלו לבחור נכון, להגיע ליעילות מקסימלית, ניצול משאבים חכם וחיסכון בזמן וכאבי ראש. אז בואו נתחיל…
היסטוריה של וירטואליזציה על רגל אחת
לפני המון שנים היינו מתקינים שרתים פיזיים. שרת פיזי גדול, ארכאי, יקר (כמה עשרות אלפים לשרת) לכל שירות שהיינו צריכים בעסק. לדוגמא: שרת פיזי לטובת שירותי קבצים, שרת נוסף לשירותי DataBase, שרת נוסף לשירותי אפליקציה וכו׳. הארכיטקטורה דאז כללה שרת פיזי בחלק התחתון, מעליו מערכת הפעלה ומעליה שכבת הדאטה ואפליקציה. מעבר לעלות הגבוהה והצורך בתחזוקה של חדר שרתים מיוחד, הבעיה הגדולה היא שעל השרת העוצמתי הותקנה רק מערכת הפעלה אחת שהצליחה לנצל כ-20-30% בלבד ממשאביו, מה שהשאיר אותנו עם 70% של חומרה יקרה ולא מנוצלת.
כך זה היה נראה:
ואז, תודה לאל, נולד המונח Virtualization. השתמשו בשרת פיזי אחד חזק ויצרו בתוכו שרתים וירטואלים רבים המשתפים ביניהם את כל המשאבים של השרת ובכך מגדילים את הצריכה מ-20-30% לאזור ה-80% (ובמקרים מסוימים יותר). בעבר, בשביל להריץ 3 שרתים עם 3 אפליקציות שונות, נדרשנו ל-3 חומרות שונות. כיום כשאנחנו עובדים עם וירטואליזציה אנחנו כבר מצליחים להריץ 3 מכונות וירטואליות (ו-9 אפליקציות שונות) על שרת פיזי אחד. כולם מבינים שבלי וירטואליזציה מתקיים בזבוז אדיר של משאבים, בגלל זה כמעט ולא נראה שימוש בשרתים פיזיים בלבד. החברות המובילות את תחום הוירטואליזציה בעולם הן חברת VMware עם פלטפורמת vSphere ואחריה חברת Microsoft עם פלטפורמת Hyper-V.
כך נראית וירטואליזציה היום:
תחגרו, מעלים הילוך
נניח שבארגון שלי אני צריך 5 שרתי web. עד כה היה צורך להקים 5 מכונות וירטואליות שעל כל אחת מהן מותקן שירות web. כלומר להתקין 5 פעמים את אותה מערכת הפעלה ולתת לכל מכונה סט של משאבים כדי להריץ את שירותי ה-web. בעקבות ההצלחה האדירה של השרתים הוירטואלים התחילו לחשוב איך אפשר לעשות את זה אפילו יותר טוב. נשאלה השאלה: האם אפשר לקחת שרת וירטואלי אחד, לשתף את בסיס מערכת ההפעלה שלו ולהריץ עליו יותר מאפליקציה אחת? במילים אחרות – האם אפשר לבצע וירטואליזציה בתוך וירטואליזציה? התשובה היא כן.
אמרו שלום ל-Containers
הטכנולוגיה החדשה מאפשרת להקים מכונה וירטואלית אחת המשמשת כבסיס אורח (Container Host), בתוכו נקים 5 Containers שכל אחד מהם יריץ שירות web מבודד ועם כתובת IP שונה לחבריו במערך.
בסיס מערכת הפעלה זהה אבל כל Container הוא ישות נפרדת לחלוטין עם הגדרות שונות. התוצאה: ניצול מיטבי של משאבים, קלות הקמה, מהירות והכי חשוב – דינאמיות. הקונטיינרים ניתנים להזזה בקלות מכל פלטפורמה לכל פלטפורמה.
Containers הגיע אלינו בשנת 2015 ולמרות היתרונות המובהקים עד כה בקושי היו בשימוש. בשנים האחרונות יש התעוררות ובתי תוכנה ומפתחים רבים מפתחים את האפליקציות שלהם בתצורה של מיקרו-שירותים (נושא מורכב, כתבה שלמה בנושא תתפרסם בהמשך) כך שכ-90% מהאפליקציות החדשות ב-2021 יהיו מבוססות Containers.
איך מייצרים Containers? באמצעות אפליקציה המשמשת כ-Container Engine ומריצה את סביבת הקונטיינרים שלנו. אחת מהאפליקציות המובילות בשוק לייצור Containers נקראת Docker. כשמישהו אומר ״אני מקים תשתית Docker״ הוא בעצם מתכוון לומר שהוא משתמש בטכנולוגיית Containers.
ככה נראה שימוש בטכנולוגיה של Containers:
מצד ימין שימוש בוירטואליזציה ומצד שמאל שימוש ב-Containers:
למה כולם מדברים על Kubernetes? זה במקום Docker? זה בנוסף?
אוקיי, כאן זה כבר נהיה מעניין. אחרי שהבנו את הטכנולוגיות השונות, הבנו שבזכות ה-Containers נחסוך הרבה משאבים ונאפשר למפתחים גמישות וזריזות בעת פיתוח אפליקציות חדשות. אבל (!) מה קורה אם ה-Container Host נופל? אם יש כשל במערכת ההפעלה שלו? כל ה-Containers “מסתמכים” עליו כפי שניתן לראות בתרשים. מה גם, צריך לזכור שמרגע ההדלקה ועד עלייתה של מכונה וירטואלית עוברות מספר דקות, בעוד container נדלק במילי שניות. זה נתון חשוב כאשר עושים restart למערכות, לפעמים זה כל כך קריטי עד כדי כך שלא מבצעים את הריסטרט.
בדיוק כאן נכנס שחקן חדש לזירה שיודע לומר ל-Container Host 01 לבצע רפליקציה כל 5 דקות לשרת Container Host 02, אולי אפילו להחזיק 3 עותקים במקומות שונים. לשחקן הזה קוראים Kubernetes והוא סוג של מערכת High Availability ל-Containers, אפשר לומר שהוא המנצח על התזמורת שמסתכל על כל המערך ודואג לזמינות בכל תרחיש.
Kubernetes, המכונה גם K8s, היא מערכת קוד פתוח. כיום, המשתמשים שלנו מצפים שאפליקציות יהיו זמינות 24/7, ומפתחים מצפים לעדכן גרסאות חדשות כמה פעמים ביום. Kubernetes עוזרת לנו לוודא שאפליקציות פועלות היכן ומתי שנרצה, ומוצאת את המשאבים והכלים הדרושים לעבודה השוטפת.
Kubernetes לא רק שיודע לטפל ב-Containers שעובדים על Docker Engine אלה גם במוצרים אחרים כגון Rocket Engine שהוא מתחרה של Docker.
בואו נעשה סדר ונמחיש לכם את זה:
1. התחלנו כאן עם שרת פיזי לכל אפליקציה בחברה
2. מפה המשכנו למספר תשתיות וירטואליות על אותו שרת פיזי. הרצה של 3 שרתים וירטואליים כאשר כל מכונה מריצה אפליקציה נפרדת לחלוטין וללא תלות.
3. המשכנו לייעל את הטכנולוגיה, לקחנו את המכונה הוירטואלית צעד אחד קדימה ובתוכה יצרנו Containers המכילים אפליקציות שצורכות את אותו בסיס מערכת הפעלה, מה שאומר שכולם משתמשים במערכת הפעלה משותפת. השימוש ב-Docker Engine בשרת הוירטואלי הופך אותו ל-Container Host
4. וזו האבולוציה של התפתחות הטכנולוגיה במסך אחד:
זה הסוף? זו רק ההתחלה?
בשנים הקרובות אנחנו נראה את התעשייה ממשיכה לאמץ בחום ובחוכמה את הטכנולוגיה היעילה של ה-containers, כאשר כל ארגון ישתמש בקוברנטיס לצרכיו – החל מתשתיות פיתוח, דרך ביג דאטה ועוד. על קוברנטיס אפשר עוד להרחיב רבות, כי אנחנו באמת רק בתחילת הדרך, אבל נשמור אצלנו עוד הפתעות לכתבות הבאות…
עד אז, נשמח לעזור לכם ולספק מגוון פתרונות בהתאמה אישית לארגון שלכם