אז מה עדיף: Kubernetes או Cloud Foundry?

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

 Thierry Dosogne/ Getty Images Israel

צלם/תמונה: Thierry Dosogne/ Getty Images Israel

מאת אייל ברלב, חוקר ראשי DevX, מרכז המחקר והפיתוח SAP בישראל

עד לפני כשנתיים, ה-backend של המוצר שאותו אנו מפתחים היה מבוסס על פרויקט קוד פתוח בשם Eclipse Orion. היו לכך כמה יתרונות: לא היינו צריכים לפתח את המוצר שלנו מהתחלה; קיבלנו עדכונים ותיקונים מהקהילה; והשפענו על פרויקט הקוד הפתוח על ידי תרומה משלנו. כאשר יצא הדור הבא – מוצר בשם Che המבוסס קונטיינרים (על כך יורחב בהמשך), הצעד הטבעי היה לאמץ אותו.

Twelve Factor App

כיוון שהמוצר שלנו רץ בענן, טרחנו להכיר היטב את מתודולוגיית ה-Twelve-Factor App. בקצרה, זוהי רשימה של 12 עקרונות לפיתוח אפליקציות שרצות  בענן. אחד העקרונות המרכזיים הוא שהאפליקציות יהיו חסרות מצב (Stateless factor #6). הרציונל הוא פשוט: אם אפליקציה היא חסרת מצב, אפשר לשכפל אותה. מאזן עומסים (Load Balancer) יכול לנתב בקשות שונות למופעים שונים של אותה האפליקציה (Horizontal Scaling), ובכך לאפשר זמינות ודינמיות גבוהות יותר.

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

פרקטית, ניתן להשיג מצב זה באמצעות Backing Services – factor #4, המספק גישה למסדי נתונים, key-value-stores, מערכות קבצים ולשירותי אחסון אחרים.

Cloud Foundry

המוצר מבוסס הענן המקורי שפיתחנו רץ בפלטפורמת ענן קיניינית משלנו. עקב תכתיבים עסקיים שקלנו להמיר את המוצר לרוץ על Cloud Foundry – פרויקט קוד פתוח של פלטפורמה כשירות (PaaS – Platform as a Service). התמריץ שלנו היה להיצמד יותר למתודולוגיית 12 העקרונות, ו-Cloud Foundry מקלה על כתיבת אפליקציות ענן בזכות התמיכה המובנית שלה ב-backing services – עקרון מרכזי של אפליקציית 12 העקרונות.

Containers

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

Cloud Foundry כתשתית להרצת קונטיינרים

אפליקציות ב-Cloud Foundry רצות כקונטיינרים באמצעות טכנולוגיה הנקראת Garden, המאפשרת להריץ קונטיינרים באמצעות Buildpacks, אשר מהדרים את האפליקציה ואורזים אותה ביחד עם התלויות שלה ועם סביבת הריצה שלה (Node.js ,JVM וכו’). לעניינו, Garden גם יודע להריץ אפליקציות ב-Cloud Foundry, בהתבסס על Docker images, אבל Cloud Foundry היא פלטפורמה, וככזו היא מסירה את השליטה ש-Docker מספק על אופן הרצת הקונטיינרים.

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

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

Kubernetes

ישנם פתרונות המתמודדים עם בעיית הצמיחה הזו. שקלנו את Docker Swarm Mode, אולם לבסוף בחרנו ב-Kubernetes, או בקיצור K8s. מדובר בפרויקט קוד פתוח ש-Google יזמה ושוחרר ב-2015. הוא מספק אוטומציה לפריסה של קונטיינרים, סילום (Scaling) של קונטיינרים, ויכולות ניהול קונטיינרים נוספות.

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

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

אגב, מקור המילה Kuberentes הוא יוונית עתיקה, ומשמעותה קברניט.

Backing Services in Kubernetes

ב-Kubernetes אין תמיכה מובנית ב-backing services, אולם קיים פרויקט בשלבי אינקובציה שנקרא Service-Catalog. פרויקט זה מממש את ממשק ה-Open Service Broker API – אותו ממשק שהגדירו ב-Cloud Foundry כדי לתמוך ב-backing services.

בינתיים ניתן להחצין את מצב האפליקציה ב-Kubernetes, באמצעות K8s volumes ובאמצעות התקנות מורכבות של שירותי מסדי נתונים (ראו PostgreSQL או Cassandra ל-Kubernetes לדוגמה).

השוואות
לא טריוויאלי להשוות את Kubernetes ל-Cloud Foundry. האחרונה היא פלטפורמת ענן, בעוד ש-Kubernetes הוא מערכת לתזמור של קונטיינרים. ולמרות זאת, יש חפיפה רבה בין היכולות של השניים:

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

Lifecycle and Deployment
בסופו של דבר, כל המערכות המושוות לעיל מריצות אפליקציות בתוך קונטיינרים. Cloud Foundry מאפשרת, עבור שפות פיתוח מסוימות, את היכולת לספק code כקלט (ה-buildpack של Golang כדוגמה). Docker מאידך, מקבל כקלט תוצרים מהודרים ואופה אותם ל-images, אשר מהם נוצרים בסופו של דבר הקונטיינרים. Kubernetes לא תומך בשלבי הפיתוח, ולמעשה מצפה לקבל image אפוי בתוך Docker registry כקלט.

למרות מגבלה זו, Kubernetes תוכנן לתמוך בהתקנות מורכבות המתפרסות על כמה קונטיינרים. ספציפית, Kubernetes מגיע עם תמיכה מובנית ב-Helm. זהו תת-פרויקט של Kubernetes, המאפשר ניהול גרסאות של פריסות; תמיכה בווריאנטים של פריסות, תמיכה ב-blue-green deployments, ועוד.

Helm מאפשר חלק מסויים של תהליכי continuous integration and deployment – CI/CD, אבל חוסר היכולת של Kubernetes לאפות images ולהפיץ אותם ל-Docker registries, מקשה על תמיכה מלאה ב-CI/CD.

Level of Control
Docker מאפשר רמה גבוהה מאוד של שליטה על תהליך יצירת ה-images ושל הרצת קונטיינרים. Kubernetes מאפשר פחות שליטה, אבל עדיין מספק יכולת מוגבלת על אופן העלאת קונטיינרים (למשל, יכולת לבצע file mounts, או הזרקת משתני סביבה). Cloud Foundry מסתיר כמעט לגמרי את העובדה שהאפליקציות רצות בתוך קונטיינרים, ולכן גם כמעט שלא מאפשר שליטה כלל באופן הרצת הקונטיינרים שלו.

Load Balancing
Cloud Foundry תומך ביצירת מופעים שונים של אותה האפליקציה, וגם ביכולת לאזן עומסים בין המופעים. Kubernetes מספק יכולת מובנית לאיזון עומסים בין מופעי אפליקציות באמעות מנגנון ה-Services.

לא היה מנצח מובהק

Docker נקי לא היווה אלטרנטיבה ריאלית עבורנו, כיוון שאנו מריצים אפליקיציות ל-enterprise ובין Kubernetes לבין Cloud Foundry לא היה מנצח מובהק – לכל מערכת יתרונות וחסרונות משלה. בנוסף, ישנם אילוצי תמחור, שותפיות עסקיות ואילוצים אחרים שהשפיעו על תהליך קבלת ההחלטות שלנו.

לבסוף בחרנו בשילוב בין שתי המערכות. המוצר שלנו, המאפשר פיתוח אפליקציות, רץ על Kubernetes; בעוד שהאפליקציות שאותן משתמשי הקצה שלנו מפתחים, רצות על Cloud Foundry.

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

הכתבה בחסות SAP

מרכזי הפיתוח של SAP בישראל הינם ממוקדי הטכנולוגיה החמים והמובילים בשוק. במרכז הפיתוח ברעננה מתמקדים בפיתוח פלטפורמת הקלאוד של SAP וכלי הפיתוח לאפליקציות/פתרונות מעל הפלטפורמה תוך שימוש בטכנולוגיות Machine Learning, IoT ו-UI. ל-SAP בישראל מרכז פיתוח גם בתל אביב, בו פועלת חברת Gigya המפתחת מערכת לניהול זהויות משתמשים כשירות בענן (SAAS) בצורה מאובטחת, באמצעות טכנולוגיות מתקדמות.
קבוצות הפיתוח עובדות בשיתוף פעולה עם ה-Ecosystem הישראלי – החל מסטארטאפים מבטיחים ועד ה-Multinationals הגדולים ביותר שמשתפים פעולה בפרוייקטים חדשניים. אנו מזמינים גם אתכם להצטרף לחברה גלובלית חזקה, עם נוכחות מקומית חדשנית וייחודית ולעזור לנו לעצב את עתיד התעשייה.

כתב אורח

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

הגב

2 תגובות על "אז מה עדיף: Kubernetes או Cloud Foundry?"

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

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

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

תודה על הכתבה.
למעוניינים – פרסמתי מאמר שמשווה את 2 הפלטפורמות מנקודת המבט של המתכנת.
אפשר למצוא אותה כאן:
https://medium.com/@odedia/comparing-kubernetes-to-pivotal-cloud-foundry-a-developers-perspective-6d40a911f257

איתן
Guest

תודה על המאמר.

wpDiscuz

תגיות לכתבה: