מה למדנו מבניית פלטפורמת פיתוח וניהול Microservices מבוססי Containers על גבי Kubernetes

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

צילום/ תמונה: pexels

מאת איליה גרשנזון מנהל צוות DevOps ולירן כהן מנהל תחום Cloud Platform & DevOps בחברת לייבפרסון

הפופולריות הגואה של קוברנטיס (Kubernetes) משפיעה רבות על הצורה שבה ארגונים מנהלים תהליכי פיתוח ומאפשרת קצב מהיר הרבה יותר של Code delivery וגמישות מוחלטת אל מול התשתית שמריצה את הקוד.
פרויקט קוברנטיס מדורג פעמים רבות כפרויקט הגדול והמרשים ביותר מתוך כ-96 מיליון פרויקטים ב-GitHub. לפרויקט יש מעל 15 אלף תורמי קוד, כ-50 אלף שינויי קוד (PR) בשנה, כ-60 אלף משתתפים ב-Slack, ומעל 400 אלף הערות בשנה.
מטרתה של המערכת הינה לנהל ולתאם, בעזרת שפה דקלרטיבית, את עולם הקונטיינרים. המערכת מייצרת אבסטרקציה בין רכיבי התשתית לבין הקוד שרץ ומעלימה את מושג ה״שרת״ עבור המפתחים.

למה בחרנו בקוברנטיס?

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

קבוצת ה-Cloud Platform, המונה 22 מהנדסים, אחראית על בנייה וניהול פלטפורמה לפיתוח והרצה של מיקרו-שירותים מבוססי Containers בחברה. הפלטפורמה מעניקה למפתח כלים רבים לשימושו החל משורת הקוד הראשונה ועד לסביבת הייצור ב-Scale כגון איסוף וניתוח לוגים ומטריקות, בניית אב-טיפוס לפי שפת הפיתוח, אחסון סודות, הגדרת קונפיגורציה לפי סביבה ועוד. שכבת התשתית הינה קוברנטיס והקבוצה מנהלת כ-40 קלאסטרים של קוברנטיס מסביב לעולם, עם מעל ל-800 שרתי kube nodes.

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

ניהול התעודות הדיגיטליות

השקיעו זמן ומחשבה ביצירת התעודות הדיגיטליות לשירותים השונים. דילוג על שלב זה יוביל לתהליכי מיגרציה לתקשורת מוצפנת בהמשך, כאשר יותר ויותר רכיבים ב-eco system, פשוט לא מוכנים לרוץ ללא TLS.
תכננו קדימה למצב בו יוקם יותר מקלאסטר אחד, האם כולם ישתפו את אותו ה-CA (כאשר ישנו CA בודד, הניהול פשוט יותר להנפקת תעודות עבור הרכיבים)?
הנפיקו את התעודות עבור כלל שמות ה-Master-ים, ועבור השם ה-DNS-י של ה-Load Balancer. הקמה של קלאסטר שמבוסס TLS יקח יותר זמן, אבל הזמן הזה יתגמד אל מול המאמץ הנדרש להעביר קלאסטר חי ל-TLS. ולכן, החל מהיום הראשון, הנפיקו תעודות לכלל הרכיבים: etcd, kube-scheduler, kube-apiserver, kube-controller-manager, kubelet.

מניעת אי-זמינות של שירותים

הגדירו בכל Deployment את ה-StrategyType על מנת למנוע אי-זמינות בזמן שדרוג גרסה של ה-Deployment.

הגדירו Pod Disruption Budget לכל Deployment (אוביקט נפרד) על מנת למנוע מפעולות ניהוליות כגון ביצוע drain לשרתים לייצר אי זמינות של שירות כלשהו. אי-הזמינות אפשרית במצבים מסוימים כאשר, לדוגמה ישנו Quorum שחייב להתקיים (3 מתוך 5 שרתי database כגון etcd או cassandra). ה-PDB פשוט ימנע את המחיקה של ה-Pod השלישי (בדוגמה הקודמת) או ימנע את פעולת המחיקה לפי כל לוגיקה אחרת שתחליטו.

צילום / תמונה: pexels

ניהול הרשאות דרך מנגנון ה-RBAC

מנגנון ה-Role Based Access Control של הקוברנטיס מאפשר לקבוע ״תפקידים״ ברמת הקלאסטר (Cluster Role) אשר מתארים אילו פעולות ניתן לבצע במערכת כולה או תפקידים ברמת ה-namespace שנקראים Role. פעולות ניהוליות יוגדרו ברמת הקלאסטר, מכיוון שהמשאבים שעליהם מבצעים את הפעולה אינם שייכים ל-Namespace מסוים (כגון Node או CRD או StorageClass וכן הלאה).
הגדירו תפקידים אופרטיביים (Operator) עבור אנשי האופרציה. תפקידים אלו לרוב יכללו פעולות על האוביקטים הבסיסיים כגון צפייה בלוגים של Pod, ביצוע מחיקה של Pod, ביצוע Scale ל-Deployment ועוד.
הגדירו תפקידים אופרטיביים תשתיתיים (Infra-Operator) עבור מנהלי הקלאסטרים לפעולות אופרטיביות כגון הוספת שרתים, ביצוע Drain או Cordon לשרת וכן הלאה.
הגדירו תפקידים עבור הפלטפורמה המנהלת (Platform) עבור יצירה ומחיקה של Deployment, Service, Statefull Set ואחרים.

הגבלת היכולות של Pod-ים

הגדירו Pod Security Policy, על מנת לשלוט דרך מנגנון ה-RBAC,ב-Pod-ים הרשאים לבקש משאבים מהשרת המארח, כגון: גישה ל-HostPID, HostIPC, HostNetwork או ריצה כ-Privileged. גישה של Pod למשאבי השרת המארח מאפשר ל-Pod לבצע כמעט את כל הפעולות (במיוחד כאשר ה-Pod רץ כ-root) ולכן רצוי מאוד לשלוט בצורה הצהרתית אילו שירותים רשאים לבקש גישה למשאבי המערכת כאשר שאר השירותים לא יצליחו לקבל גישה.

חשוב לזכור שברגע שמפעילים את ה-PSP, שום Pod לא יכול להיווצר במערכת עד אשר יווצר Role Binding ל-Policy (כאשר ה-Policy הראשון הוא המגביל ביותר, וקיים Role Bind מסוג use עבור כלל ה-Pod-ים).

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

חלק מרכזי בבניית פלטפורמה מותאמת הוא בחינה ובחירה של טכנולוגיות קוד פתוח ומוצרי מדף בשילוב כלים שפותחו בארגון להתאמה מירבית. מלבד קוברנטיס, קיימות כיום לא מעט טכנולוגיות בשלות כחלק מה-Cloud-Native Ecosystems, כגון Prometheus – כלי המאפשר ניטור מתקדם מבוסס מטריקות, Istio – כלי המנהל ניתוב תעבורה, איזון עומסים ובקרת זרימה, Helm – כלי לאריזה, הפצה וניהול תבניות של אובייקטים ועוד. בחירה נכונה ושילוב נכון של טכנולוגיות אלו בפלטפורמה שלכם יכולים לחסוך שעות
פיתוח יקרות ולאפשר יכולות מתקדמות עם תמיכה נרחבת מהקהילה.

הכתבה בחסות לייבפרסון

לייבפרסון היא החברה המובילה בעולם לפיתוח פלטפורמות מתקדמות לתקשורת בין לקוחות ומותגים. החברה, הוקמה ב 1995, והיא מסייעת למותגים הגדולים בעולם לעשות טרנספורמציה דיגיטלית למרכזי השירות שלהם באמצעות טכנולוגיות מתקדמות של Big Data, AI, ו-Machine Learning. הפלטפורמה של לייבפרסון מאפשר לחברות לחזק כך את הקשר שלהן עם מיליוני לקוחות ברחבי העולם באמצעות יצירת חווית לקוח חדשני במקביל להתייעל תפעולית והגדלת הרווחיות. לפרטים נוספים, לחצו כאן.

Avatar

כתב אורח

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

הגב

3 תגובות על "מה למדנו מבניית פלטפורמת פיתוח וניהול Microservices מבוססי Containers על גבי Kubernetes"

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

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

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

I אוהב לכתוב בENGLISH או בהיברוו.

מה נסגר עם הכותרת?!

מתן
Guest

הקדמה טובה,
כתבה משעממת אש.

מבטיח אבל לא מקיים.

מני
Guest

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

wpDiscuz

תגיות לכתבה: