לדלג לתוכן

מה זה Kubernetes, בהסבר פשוט בלי להיבהל

Kubernetes הוא אחד השמות שגורמים לכי הכי הרבה מתחילים לפחד. הוא נשמע מסובך, כתוב עליו שהוא קשה ללמידה, ובדרך כלל מוזכר יחד עם רשימה ארוכה של קיצורים מוזרים כמו pods, nodes ו-deployments. אז בואו נעצור רגע, נשכח מכל הקיצורים, ונבין קודם כל מה הבעיה שהוא בכלל בא לפתור.

הבעיה - כשיש לכם לא קונטיינר אחד, אלא מאות

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

לעשות את כל זה ידנית זה בלתי אפשרי בפועל. Kubernetes, שלרוב מכנים בקיצור K8s, הוא בעצם "מנהל" אוטומטי שמפקח על כל הקונטיינרים שלכם, מריץ אותם על אשכול (cluster) של שרתים, ודואג שהמצב בפועל תמיד יתאים למה שביקשתם שיקרה.

איך זה עובד ברמת הרעיון

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

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

המושגים הבסיסיים, בלי בלגן

יש הרבה מונחים בKubernetes, אבל אם תבינו את שלושת אלה, כבר יש לכם תמונה מוצקה:

  • Pod - היחידה הכי בסיסית. בדרך כלל זה קונטיינר בודד (או כמה קרובים שרצים תמיד ביחד), שהוא היחידה שKubernetes מנהל ומזיז ממקום למקום.
  • Node - שרת בודד באשכול, שעליו רצים Pods. אשכול Kubernetes מורכב מכמה Nodes ביחד.
  • Deployment - התיאור שאתם כותבים, שאומר כמה עותקים של Pod מסוים אתם רוצים שיהיו תמיד רצים, ואיזו גרסה של הקונטיינר להשתמש בה.

זהו, בערך. כל שאר המושגים המורכבים יותר נבנים על שלושת אלה.

אז למה כולם אומרים שזה קשה

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

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

האם צריך את זה מלכתחילה

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

איך לגשת ללמידה שלו

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

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

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

הצטרפו לקהילה בדיסקורד

לסיכום

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