הגדרת Yandex Managed Kubernetes: היכן נשבר הפרודקשן
הגדרת Yandex Managed Kubernetes לעתים רחוקות נשברת בשלב "האשכול עלה". הבעיות מתחילות מאוחר יותר, כאשר מגיע אליו תעבורה מבצעית ואירועים ראשונים.
מישור הבקרה המנוהל מסיר מהצוות את התחזוקה של שרת API ואחסון מצב האשכול, אך אינו מבטל את האחריות על צמתי העבודה, ההרשאות ותצורת היישומים — שם בדיוק נמצאות נקודות הכשל שאינן נראות בסביבת הבדיקה.
הראשונה והנפוצה ביותר — עריכות ידניות של התצורה. עריכה דרך ממשק האינטרנט ברגע של תקלה סוגרת את הסימפטום, אך אינה משאירה עקבות במאגר: הצומת או מרחב השמות הבא שנוצר מחדש מחזיר את המערכת למצבה הקודם, והפער בין הרצוי למצוי הולך ומצטבר. כתוצאה מכך, הסביבות מתפצלות, וסביבת הבדיקה מפסיקה לחזות את התנהגות הפרודקשן.
הנקודה השנייה — מחסור במשאבי האשכול. ללא בקשות ומגבלות מפורשות לקונטיינרים ואוטומציה של קנה מידה מוגדרת, פודים או נופלים בגלל זיכרון, או מפונים מהצמתים, ותור ההמתנה גדל מהר יותר מהקצב שבו מתווספות מכונות.
האבחון מסתבך בכך שהסיבה הראשונית בדרך כלל אינה בקוד היישום, אלא באופן שבו המשאבים מוקצים בין עומסי העבודה.
השכבה השלישית — הרשאות גישה. תפקידים רחבים וגישה משותפת לאשכול לכל הצוות משמעם שכל אחד יכול לשנות את הפרודקשן, אבל אף אחד לא יכול לזהות את מבצע השינוי. להלן נבחן כיצד זה נסגר: תיאור תשתית כקוד, הפרדת סביבות והרשאות מינימליות נדרשות.
השפעות מדידות: מהירות פריסה, זמן השבתה, סוג כשל
לפני אוטומציה, שחרור גרסה חדשה הוא רצף ידני: לבנות אימג', לעדכן תצורות, להחיל מניפסטים, לבדוק התנהגות. הפריסה נמשכת שעות, היא מתוזמנת לחלון לילי, והחזרה לאחור נשמרת "ליתר ביטחון" כתרחיש נפרד שאיש לא תרגל.
לאחר העברת הסביבות לתיאורים דקלרטיביים ואשכול מנוהל, הפריסה מופעלת לפי קומיט ומסתיימת תוך 10–15 דקות, כולל בדיקות.
זמן ההתאוששות של השירות נקבע לא לפי מהירות הידיים, אלא לפי כמה מהר המערכת מבחינה בבעיה. בדיקות מוכנות וחיות מוציאות מופע לא תקין מתחת לתעבורה, האשכול יוצר אותו מחדש במצב חדש, והצמתים מנוטרים ברמת הפלטפורמה.
אי-הזמינות מצטמצמת מעשרות דקות ליחידות, וחלק מהאירועים נסגרים כלל ללא תורנות: המערכת מגיבה לפני שמישהו פותח את לוח הניטור.
ההשפעה היקרה ביותר — סוג כשל שנמנע, ולא ההאצה. הכוונה לפערים בתצורות בין סביבות, פרמטר שנשכח, עריכה ידנית "על השרת", שבגללה סביבת הבדיקה מתנהגת אחרת מהסביבה היצרנית. כאשר הסביבות נבנות מתיאור אחד, הכשלים האלה מפסיקים לחזור על עצמם, ולא רק מתוקנים מהר יותר.
צפיות של עדכונים — תוצאה של אותו דבר. עדכון האשכול ועומסי העבודה מפסיק להיות אירוע עם תוצאה לא ידועה: השינויים עוברים לפי סכימה אחת, המצב נבדק לפי מדדים, ושחרור כושל מוחזר לגרסה הקודמת. עדכונים מתחילים לתכנן לפי לוח זמנים, במקום לדחות אותם עד ש"אין זמן לסיכון".
אפשרויות פריסה: אשכול מנוהל, צמתים עצמאיים, היברידי
בחירת מצב אינה עניין של "חזק יותר או זול יותר", אלא אילו חלקים של האשכול אתם מוכנים לנהל בעצמכם. אשכול מנוהל לוקח על עצמו את מישור הבקרה: העדכונים שלו, עמידות לתקלות במספר אזורי זמינות והתאוששות לאחר כשל בצומת.
צמתים עצמאיים משאירים לכם את הבחירה של אימג', ליבה, פרמטרים של kubelet והגדרות רשת — בתמורה, אתם מטפלים בעדכונים, בהרחבה ובהחלפת חומרה. תכנית היברידית משלבת את שתי הגישות, כאשר חלק מהעומס חייב לעבוד בסביבה שלכם עקב דרישות רגולטור או בשל השהיה למערכות פנימיות.
הקריטריון המרכזי — היכן עובר הגבול של האחריות שלכם ועד כמה העומס צפוי. להלן חלופות אמיתיות שבוחרים ביניהן בתחילת הפרויקט.
| אפשרות | מתי מתאימה | מגבלות |
|---|---|---|
| אשכול מנוהל | שירותים סטנדרטיים, עומס משתנה, נדרשת התחלה מהירה והרחבה אוטומטית של קבוצות צמתים | מישור הבקרה מוסתר — אין גישה לפרמטרים שלו; תרחישי רשת לא סטנדרטיים נפתרים בדרכים עוקפות |
| צמתים עצמאיים מעל מנוהל | נדרשים אימג'ים ספציפיים, פרופילי GPU, דיסקים מקומיים או סביבת הרצה משלכם | עדכונים, סחף תצורה והחלפת צמתים באחריותכם; עלות תפעול גבוהה יותר |
| תכנית היברידית | חלק מהנתונים חייבים להישאר בסביבה שלכם, חלק — בענן | נדרשים שכבת רשת ומדיניות אחודה, סכימת גישה נפרדת וניטור לשני הצדדים |
| אשכול עצמאי לחלוטין | תקנות נוקשות, סביבה מבודדת, חוות חומרה משלכם | מישור בקרה, etcd, גיבוי, עדכונים — הכל על הצוות שלכם |
בפועל: רוב השירותים נכנסים לאשכול מנוהל עם הפרדת צמתים למאגרים לפי פרופילי עומס שונים. תכניות עצמאיות והיברידיות מוצדקות במקום שבו יש דרישה חיצונית, ולא העדפה הנדסית — אחרת הצוות משלם בזמן על מה שהפלטפורמה כבר מחזיקה בעצמה.
שלבי העבודה: ביקורת, תכנון, הגדרה, בדיקה, מסירה
העבודה מתנהלת באיטרציות: כל שלב מסתיים בארטיפקט שניתן לבדוק, ולא באמירה בעל פה "עשינו". כך הלקוח רואה באיזה שלב הפרויקט נמצא, ויכול לעצור או לתקן כיוון לפני שהשינויים נכנסים לסביבת העבודה.
- ביקורת תשתית. אנו מתעדים את המצב הנוכחי: מה הוקם ידנית, היכן התצורות סרו מהמציאות, אילו שירותים תלויים זה בזה, אילו מכסות כבר על הקצה. הפלט — מפת תלויות ורשימת סיכונים עם סדרי עדיפויות.
- תכנון האשכול. מתכננים מאגרי צמתים לפי סוגי עומס שונים, מפזרים אותם על פני אזורי זמינות, קובעים מדיניות עדכון והרחבה אוטומטית. את התכנית מאשרים לפני יצירת המשאבים, ולא אחרי.
- תיאור תשתית כקוד. אשכול, רשתות, הרשאות גישה וסודות מועברים לתצורות דקלרטיביות. הסביבה מתחילה להיפרס ממאגר, ופערים בין סביבות נתפסים בשלב הבדיקה, ולא בפרודקשן.
- הגדרה והפעלה. מקימים Yandex Managed Kubernetes, מפרידים תפקידים של חשבונות שירות, מחברים איסוף מדדים ולוגים, מציבים התראות על ספים משמעותיים לעסק. כל התראה נבדקת — היא צריכה לפעול לעניין, ולא לצלצל בלילה ללא סיבה.
- בדיקת עומס. מריצים פרופיל קרוב לזה המבצעי ובודקים היכן המערכת נתקעת: במגבלות הצמתים, בבסיס הנתונים, בתור. בנפרד בודקים עמידות לתקלות — מכבים צומת ורושמים תוך כמה זמן העומס עובר ללא אובדן בקשות.
- מסירה לתפעול. מוסרים נהלי תורנות, הוראות חזרה לאחור והתאוששות, סכמת ניטור וניתוח תקלות אופייניות. מעבירים הדרכה לצוות, כדי שמכאן והלאה השינויים ייעשו בכוחות עצמם.
לאחר המסירה נשארת שאלה אחת — מה בדיוק צריך לשפר קודם כל. תארו את המשימה, ונחזור עם תכנית עבודה והערכה.
מה נשאר אצלכם: תצורות, סכמות, מדיניות, נהלים
המסירה אינה מסתיימת במתן גישות לאשכול. כל מה שהגדרנו נשאר אצלכם כארטיפקטים שאפשר לקרוא, לשנות ולשחזר ללא מעורבותנו: התשתית מתוארת כקוד, המדיניות וכללי הגישה מתועדים, עדכונים והתאוששות מתבצעים לפי נהלים, ולא לפי הזיכרון של מהנדס מסוים.
- תיאור תשתית כקוד — מאגרים עם תצורת האשכול, מאגרי הצמתים, הרשתות וההרשאות: כל שינוי עובר סקירה, והסביבה מוקמת מאפס בפקודה אחת.
- מדיניות גישה — מודל תפקידים, חשבונות שירות והפרדה לפי מרחבי שמות: ברור מי ומה יכול, כולל גישת קבלנים וביקורת פעולות.
- סכמת גיבוי — מה מגבים (מצב האשכול, תיאורי אובייקטים, דיסקים עם נתונים), באיזו תדירות, כמה זמן נשמר וכיצד נבדקת ההתאוששות.
- נוהל עדכונים — סדר וחלונות עדכון של חלק הבקרה וצמתי העבודה, פינוי עומס בטוח, תנאי חזרה לגרסה קודמת.
- ניטור והתראות — לוחות מחוונים, מערכי מדדים וספים, מסלולי התראות לפי תורנויות; התצורה גם נשמרת כקוד ומנוהלת בגרסאות.
- תיעוד האשכול — סכמת הסביבה, מפת השירותים והתלויות שלהם, רשימת נקודות הכשל, הוראות לפעולות אופייניות.
- סדר הסלמה ומטריצת אחריות — למי מגיע האות, למי יש הרשאה לשינוי בפרודקשן, כיצד מתועדים אירועים.
אנו בודקים את המסירה למעשה: פורסים סביבה מאפס לפי המאגרים והנהלים שלכם, בלי להתחבר להגדרות קודמות. אם אין פערים — הצוות ממשיך לעבוד באופן עצמאי, ואנחנו נשארים זמינים למשימות ספציפיות.
מקרה בוחן: כיצד קיצרנו את זמן התאוששות האשכול
מה היה
הלקוח — שירות עם עומס שבשעות שיא גדל פי שלושה. האשכול התנהל על שינויים ידניים: התצורה נערכה ישירות בלוח הבקרה, מצב התשתית לא תועד בשום מקום, והגישות ניתנו בנדיבות.
התאוששות לאחר כשל בצומת או שחרור כושל ארכה 4–6 שעות — המהנדס החזיר את הסדר ידנית צעד אחר צעד, תוך השוואה לרשימות שלו.
במשך רבעון הצוות טיפל ב-3–4 תקלות, כל אחת גזלה מהתורן כמעט יממה. שחרורים יצאו בחלונות ליליים, אחד-שניים בשבוע: ביום איש לא העז לגעת בתשתית פעילה, והכל נשען על אדם אחד שידע איך האשכול בנוי.
מה שינינו ומה קיבלנו
אשכול ב-Yandex Managed Kubernetes הועבר לתיאור כקוד: צמתים, קבוצות, תפקידי גישה וחשבונות שירות משוחזרים מהמאגר בפקודה אחת. ההרשאות צומצמו למינימום הנדרש, שינויים עוברים בדיקה ומיושמים רק דרך אוטומציה — ידנית ללוח הבקרה כבר לא ניגשים.
הוספנו נראות: מדדי צמתים ויישומים, התראות על ירידה בביצועים, בדיקות מוכנות לפני העברת תעבורה לגרסה חדשה.
התאוששות האשכול הצטמצמה ל-30–40 דקות, ואת רוב העבודה המערכת עושה בעצמה. תדירות הכשלים ירדה: במקום כמה תקלות ברבעון — בודדות, וכמעט כולן נתפסות על ידי התראות לפני שהמשתמשים מבחינים בהן. השחרורים יצאו מהחלון הלילי: מספר פעמים בשבוע, ביום, עם חזרה לאימג' הקודם תוך דקות.
העומס על הצוות עבר מכיבוי שריפות לפיתוח המוצר. התורנות הפסיקה להיות תלויה במומחה אחד: התצורה מתוארת ובדוקה, מהנדס חדש מקים את הסביבה לפי התיעוד, ולא לפי סיפורים.
במה תיאור תשתית כקוד עדיף על הגדרה ידנית?
הגדרה ידנית בקונסולה אינה משאירה עקבות: הרכב קבוצות הצמתים, שיוך תפקידים, כללי רשת ופרמטרי הרחבה אוטומטית חיים רק במצב הנוכחי של האשכול. כעבור חודש איש לא יוכל להסביר מדוע לקבוצת צמתים אחת יש סוג דיסק אחר ומאין צץ חריג בכלל הגישה. זהו סחף תצורה — פער בין המתוכנן למה שבאמת עובד.
תשתית כקוד מעבירה את התיאור למאגר: אותה תצורה בדיוק מקימה אשכולות זהים בסביבת הבדיקה ובסביבה היצרנית. יכולת השחזור של סביבות מפסיקה להיות תלויה בזיכרון של המהנדס — הסביבה נוצרת על ידי יישום התיאור, ולא על ידי שחזור לפי רשימת בדיקה.
שינוי עובר סקירת תצורה: בהבדל רואים בדיוק מה מתווסף — קבוצת צמתים, מדיניות רשת, תפקיד לחשבון שירות, כלל ניטור. החזרה לאחור של שינויים הופכת לביטול קומיט עם יישום חוזר, ולא לפעולות הפוכות ביד, שכל אחת מהן קלה לשכוח.
כנגד עריכות בקונסולה פועלת השוואה תקופתית: התכנית מציגה פער בין התיאור לאשכול, והוא או מועבר לקוד, או מוחזר לאחור. Terraform שומר מצב ובכל הרצה בודק אם הוא תואם לתצורה בפועל.
התשובה לשאלה קצרה: קוד נותן יכולת שחזור, היסטוריית שינויים ניתנת לבדיקה וחזרה לאחור מבוקרת, הגדרה ידנית — אף אחד מהשלושה.
ניתוח ספקות: עדכונים, אזורי זמינות, הרשאות גישה
ספקות טכניים בצוותי הנדסה עולים לא בשלב התכנון, אלא בשלב התפעול: מי ואיך מעדכן את האשכול, מה יקרה בכשל של אזור, עד כמה קשיחות ההפרדה בהרשאות. להלן תשובות לשאלות שנשמעות כמעט בכל התחלה של עבודה עם Managed Kubernetes.
האם בעדכון יהיה צורך ליצור את האשכול מחדש?
לא. מעדכנים את שכבת הבקרה, ואז את קבוצות הצמתים בזה אחר זה: הצומת מוצא מאיזון, הפודים עוברים לשכנים, והצומת חוזר כבר בגרסה החדשה. עם בדיקות מוכנות תקינות ופיזור רפליקות בין אזורים, המשתמש לא מבחין במעבר. סדר וחלון העדכון נקבעים מראש.
מה יקרה אם אזור זמינות יכשל לחלוטין?
הצמתים מפוזרים על פני לפחות שלושה אזורים, לעומסי העבודה מוגדרים כללי הצבה ופיזור רפליקות. בכשל של אזור אחד, חלק מהפודים מופעלים מחדש באזורים הנותרים, והשירות שומר על זמינות. בנפרד מחשבים האם המכסות ומלאי הכוח מספיקים כדי לקלוט את העומס ללא ירידה בביצועים.
כיצד מופרדות הרשאות הגישה?
ההרשאות על התשתית וההרשאות בתוך האשכול מופרדות: מפתח רואה רק את מרחב השמות שלו, מהנדס תורן — קריאה בכל, אך ללא גישה לסודות, שינויים בתשתית עוברים דרך תפקידי הענן. ביקורת פעולות מופעלת, ולכן רואים מי ומה שינה.
מה ייכלל בניטור ובהתראות?
מדדי צמתים, פודים ושכבת הבקרה, לוגים של יישומים והתראות לתורן: אי-זמינות השירות, עלייה בשגיאות, מיצוי משאבים, הפעלת הרחבה אוטומטית. לכל התראה מוסיפים הוראה קצרה — מה בדיוק לבדוק קודם.
כיצד מאורגן הגיבוי וההתאוששות?
מגבים דיסקים ותיאורי אובייקטים של האשכול לפי לוח זמנים, ופעם ברבעון פורסים עותק בסביבה נפרדת. קיום עותק והתאוששות מאושרת — שני דברים שונים, ולכן בודקים את התהליך כולו, ולא רק את עצם יצירת הארכיון.
אם חלק מהתשובות אינן תואמות את התצורה הנוכחית שלכם — נדון במשימה ונחזור עם הערכה ותכנית הגירה.נדון במשימה ונחזור עם הערכה ותכנית עבודה
כדי לחזור עם הערכת לוחות זמנים ותכנית יישום, עלינו לראות את המצב הנוכחי: כיצד נפרס האשכול כעת, היכן נשמר מצב Terraform, כיצד מאורגנות הגישות ומה כבר נאסף בניטור. תארו זאת בצורה חופשית — בהמשך נברר פרטים לגבי רשת, קבוצות צמתים ומדיניות גישה.
בתפוקה תקבלו ארטיפקטים קונקרטיים, ולא הבטחות כלליות:
- תכנית יישום לפי שלבים — מהכנת הרשת והגישות ועד הוצאת העומס לסביבת העבודה;
- הערכת לוחות זמנים לכל שלב והרכב העבודות עם גבולות אחריות;
- סכמת ארכיטקטורה: אשכול, קבוצות צמתים, אזורי רשת, נקודות כשל;
- תצורות Terraform ומדיניות IAM בצורה המתאימה לבדיקה על ידי הצוות שלכם;
- מערך מדדים, התראות ולוחות ניטור עם ספי הפעלה;
- נוהל עדכון וחזרה לאחור של גרסאות האשכול והיישומים;
- העברת ידע: ניתוח התצורה עם המהנדסים שלכם ותיעוד תפעולי.
תארו את המשימה — מה כבר עובד, היכן צוואר הבקבוק ואיזו תוצאה נדרשת. נדון בה באופן ענייני ונחזור עם הערכה ותכנית.







