✕ סגור 
צור קשר
תודה על ההתעניינות .

Thank you! Your submission has been received!

Oops! Something went wrong while submitting the form

קוברנטיס - מה הסיפור?

אופיר מקמל
|
קלה
|
Jul 5, 2018
alt="facebook"alt="linkedin"
להרשמה לניוזלטר

נראה שלאחרונה כולם מדברים על קוברנטיס. אמזון חשפה בכנס ה- re-invent האחרון את הפתרון שלה לקוברנטיס מנוהל - EKS - Elastic Kubernetes Service. למרות שכבר כיום מעל 60% מהמערכות המבוססות על קוברנטיס בסביבות הייצור רצות על AWS, אמזון אף משתמשת בקוברנטיס כבסיס לשירות חדש נוסף שלה - Fargate.

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

רקע

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

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

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

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

Kubernetes/K8S

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

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

קוברנטיס ('קפטן' או 'אוחז בהגה' ביוונית) הוא אחד מפרויקטי הקוד הפתוח המצליחים בעולם, מפותח בשפת Go (בדומה ל-Docker), כ-34 אלף כוכבים, 63 אלף Commits, ומעל 1600 תורמים, המובלים ע"י עשרות קבוצות פיתוח (SIG - Special Interest Group) מכל החברות הגדולות בתעשייה.

בנוסף, חשוב לציין שקוברנטיס הוא גם הפרויקט הראשון של Cloud-Native Computing foundation, שיצר אקו-סיסטם עצום של פתרונות סביבו.

קוברנטיס מאפשר למשתמש לבנות, להגדיל ולנהל אפליקציות מבוססות קונטיינרים על Clusters, אשר ניתנים להתקנה בכל מקום, על כל ספקי העננים, Public Clouds, Private Clouds, On-Premise, Bare-Metal ואפילו על מחשבי Raspberry Pi.

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

אבני הבניין הבסיסיות (רשימה חלקית):

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

Deployment - יחידה המאגדת הגדרה של Pod, ומוסיפה כללים להרצה עבור קוברנטיס – לדוגמא: כמות העותקים שווה ל-10, שדרוג גרסה יבוצע ע"י החלפת מקסימום שני עותקים בו-זמנית, וכו. אבן הבניין הזו דואגת שתמיד יהיו לנו את כמות העותקים שביקשנו, אפילו אם האפליקציה קרסה, אפילו עם שרתים קרסו. מתאים במיוחד ל- Stateless Micro-Services.

DaemonSet - דומה בבסיסו ל-Deployment, אבל מבטיח שיהיה בדיוק עותק אחד של ה-Pod על כל שרת, משמש בעיקר לאיסוף לוגים מרכזי, תשתיות תקשורת (Ingress Controllers - מחוץ לתחום במאמר זה) ועוד.

Service - יחידת Routing עם שם DNS המספקת Service Discovery ו- Load Balancing ל- Pods שלנו.

Stateful Set - דומה בבסיסו ל-Deployment, אך מתאים ל-Stateful Apps, לדוגמא: Cassandra, MongoDB, Spark ועוד.

Job & Cron Job - תשתיות להרצה של ג'ובים (המשתמשים ב-Pod מאחורי הקלעים), מתוזמנים או לא, משמש לביצוע משימות תחזוקה, Build (משימות Jenkins), ועוד.

ConfigMap & Secrets - ניהול קונפיגורציה ומידע סודי ברמת ה- Cluster, לדוגמא: תעודות דיגיטליות, קונפיגורציה ל-Nginx ועוד.

Volumes - חיבור דיסקים ל-Pods בצורה דינאמית מכיוון שה-Pod יכול לרוץ בכל פעם על שרת אחר, אז צריך לחבר בצורה דינאמית את הדיסק. יש תמיכה בעשרות רבות של תשתיות Storage.

בעזרת אבני הבניין הללו, ניתן לבנות מגוון אין סופי של מערכות מבוזרות, לדוגמא:

● רשת של Micro-Services - בין היתר בעזרת Deployment, Pods, Services ו- Secrets.

● שרתי Build ו-CI\CD אלסטיים הגדלים וקטנים כתלות בעומס - בין היתר בעזרת Deployment ו- Jobs.

● Databases - בין היתר בעזרת Stateful Set, Persistent Volumes ו- ConfigMap.

● Machine Learning - בין היתר בעזרת Deployment, Jobs ו- Volumes.

● ועוד...

ניתן למצוא כמות גדולה של פתרונות מוכנים להפצה על קוברנטיס בעזרת Package Manager Kubernetes - Helm.

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

דוגמא לשירות Nginx על קוברנטיס המכיל שלושה עותקים, ומגדיר בצורה אוטומטית Load Balancer בענן:

לא רק תשתית להרצת קונטיינרים

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

בייעוץ אצל לקוחות ובהרצאות שאני מעביר, באופן קבוע מתקבלת השאלה - 'קוברנטיס זה כמו Mesos? או Docker Swarm?'

התשובה היא כן ולא.

כן מכיוון שקוברנטיס יכול 'פשוט' להריץ את הקונטיינרים שלכם ולתת לכם את תשתית ניהול הקונטיינרים הטובה בעולם ואקו-סיסטם עצום.

אבל קוברנטיס יכול לעשות הרבה יותר.

בניית מערכות מבוזרות הינה משימה מאוד קשה השמורה לחברות ענק שבונות Databases, מערכות Data Ingestion ועוד.

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

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

הצורה הנכונה להסתכל על קוברנטיס היא שקוברנטיס היא פלטפורמה לבניית פלטפורמות נוספות.

דוגמאות לפלטפורמות שנבנו על בסיסה:

AWS Fargate - תשתית להרצה וניהול אוטומטי של קונטיינרים

Istio - העתיד של הרצה וניהול מיקרו-סרביסים

Pachyderm - תשתית Data Pipeline

Drone.ai - תשתית CI\CD

Argo - תשתית לבניית Workflows

● והרשימה עוד ארוכה

לאחרונה אף שוחררה גרסה חדשה של Spark המשתמשת פנימית בתשתית המערכת המבוזרת וה-Scheduler של קוברנטיס.

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

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

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

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

מאת: אופיר מקמל, CTO בסלע

נראה שלאחרונה כולם מדברים על קוברנטיס. אמזון חשפה בכנס ה- re-invent האחרון את הפתרון שלה לקוברנטיס מנוהל - EKS - Elastic Kubernetes Service. למרות שכבר כיום מעל 60% מהמערכות המבוססות על קוברנטיס בסביבות הייצור רצות על AWS, אמזון אף משתמשת בקוברנטיס כבסיס לשירות חדש נוסף שלה - Fargate.

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

רקע

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

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

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

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

Kubernetes/K8S

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

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

קוברנטיס ('קפטן' או 'אוחז בהגה' ביוונית) הוא אחד מפרויקטי הקוד הפתוח המצליחים בעולם, מפותח בשפת Go (בדומה ל-Docker), כ-34 אלף כוכבים, 63 אלף Commits, ומעל 1600 תורמים, המובלים ע"י עשרות קבוצות פיתוח (SIG - Special Interest Group) מכל החברות הגדולות בתעשייה.

בנוסף, חשוב לציין שקוברנטיס הוא גם הפרויקט הראשון של Cloud-Native Computing foundation, שיצר אקו-סיסטם עצום של פתרונות סביבו.

קוברנטיס מאפשר למשתמש לבנות, להגדיל ולנהל אפליקציות מבוססות קונטיינרים על Clusters, אשר ניתנים להתקנה בכל מקום, על כל ספקי העננים, Public Clouds, Private Clouds, On-Premise, Bare-Metal ואפילו על מחשבי Raspberry Pi.

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

אבני הבניין הבסיסיות (רשימה חלקית):

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

Deployment - יחידה המאגדת הגדרה של Pod, ומוסיפה כללים להרצה עבור קוברנטיס – לדוגמא: כמות העותקים שווה ל-10, שדרוג גרסה יבוצע ע"י החלפת מקסימום שני עותקים בו-זמנית, וכו. אבן הבניין הזו דואגת שתמיד יהיו לנו את כמות העותקים שביקשנו, אפילו אם האפליקציה קרסה, אפילו עם שרתים קרסו. מתאים במיוחד ל- Stateless Micro-Services.

DaemonSet - דומה בבסיסו ל-Deployment, אבל מבטיח שיהיה בדיוק עותק אחד של ה-Pod על כל שרת, משמש בעיקר לאיסוף לוגים מרכזי, תשתיות תקשורת (Ingress Controllers - מחוץ לתחום במאמר זה) ועוד.

Service - יחידת Routing עם שם DNS המספקת Service Discovery ו- Load Balancing ל- Pods שלנו.

Stateful Set - דומה בבסיסו ל-Deployment, אך מתאים ל-Stateful Apps, לדוגמא: Cassandra, MongoDB, Spark ועוד.

Job & Cron Job - תשתיות להרצה של ג'ובים (המשתמשים ב-Pod מאחורי הקלעים), מתוזמנים או לא, משמש לביצוע משימות תחזוקה, Build (משימות Jenkins), ועוד.

ConfigMap & Secrets - ניהול קונפיגורציה ומידע סודי ברמת ה- Cluster, לדוגמא: תעודות דיגיטליות, קונפיגורציה ל-Nginx ועוד.

Volumes - חיבור דיסקים ל-Pods בצורה דינאמית מכיוון שה-Pod יכול לרוץ בכל פעם על שרת אחר, אז צריך לחבר בצורה דינאמית את הדיסק. יש תמיכה בעשרות רבות של תשתיות Storage.

בעזרת אבני הבניין הללו, ניתן לבנות מגוון אין סופי של מערכות מבוזרות, לדוגמא:

● רשת של Micro-Services - בין היתר בעזרת Deployment, Pods, Services ו- Secrets.

● שרתי Build ו-CI\CD אלסטיים הגדלים וקטנים כתלות בעומס - בין היתר בעזרת Deployment ו- Jobs.

● Databases - בין היתר בעזרת Stateful Set, Persistent Volumes ו- ConfigMap.

● Machine Learning - בין היתר בעזרת Deployment, Jobs ו- Volumes.

● ועוד...

ניתן למצוא כמות גדולה של פתרונות מוכנים להפצה על קוברנטיס בעזרת Package Manager Kubernetes - Helm.

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

דוגמא לשירות Nginx על קוברנטיס המכיל שלושה עותקים, ומגדיר בצורה אוטומטית Load Balancer בענן:

לא רק תשתית להרצת קונטיינרים

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

בייעוץ אצל לקוחות ובהרצאות שאני מעביר, באופן קבוע מתקבלת השאלה - 'קוברנטיס זה כמו Mesos? או Docker Swarm?'

התשובה היא כן ולא.

כן מכיוון שקוברנטיס יכול 'פשוט' להריץ את הקונטיינרים שלכם ולתת לכם את תשתית ניהול הקונטיינרים הטובה בעולם ואקו-סיסטם עצום.

אבל קוברנטיס יכול לעשות הרבה יותר.

בניית מערכות מבוזרות הינה משימה מאוד קשה השמורה לחברות ענק שבונות Databases, מערכות Data Ingestion ועוד.

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

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

הצורה הנכונה להסתכל על קוברנטיס היא שקוברנטיס היא פלטפורמה לבניית פלטפורמות נוספות.

דוגמאות לפלטפורמות שנבנו על בסיסה:

AWS Fargate - תשתית להרצה וניהול אוטומטי של קונטיינרים

Istio - העתיד של הרצה וניהול מיקרו-סרביסים

Pachyderm - תשתית Data Pipeline

Drone.ai - תשתית CI\CD

Argo - תשתית לבניית Workflows

● והרשימה עוד ארוכה

לאחרונה אף שוחררה גרסה חדשה של Spark המשתמשת פנימית בתשתית המערכת המבוזרת וה-Scheduler של קוברנטיס.

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

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

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

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

מאת: אופיר מקמל, CTO בסלע

Thank you! Your submission has been received!
Oops! Something went wrong while submitting the form.
אופיר מקמל
בואו נעבוד ביחד
צרו קשר