תמלול הפרק (לחצו לפתיחה)
קוברנטיס פרק 5: דפלויימנט (Deployment) – פריסת תשתיות
היי, ברוכים הבאים ל"הייטקיסטים בדרכים". אני אורן, והיום אנחנו נלמד על Deployment (דפלויימנט) בקוברנטיס.
מה זה בכלל Deployment?
נתחיל מהמשמעות של השם כמו תמיד: מה זה אומר Deployment באנגלית? אז Deployment זה בעצם פריסה. לא פריסה שעושים כשמסיימים תפקיד בצבא או מי שמכיר את זה בתור "שתייה", אלא פריסה של תשתית מסוימת. פריסה של תשתית זה יכול להיות גם משהו פיזי בעולם וזה יכול להיות משהו תוכנתי, אז Deployment זה בעצם פריסה.
למה קוברנטיס בחרו בישות הזאת וקראו לה דפלויימנט?
דיברנו בהרצאות הקודמות על פודים (Pods) וסרוויסים (Services) שהם ישויות ברמה יותר נמוכה מדפלויימנט; אלו ישויות שבעצם מגדירות כל מיני חלקים בקוברנטיס שהם ברמה יותר נמוכה, יותר ספציפית ופחות כוללת.
Deployment זה בעצם משהו שמאגד כמה ישויות קטנות יותר בקוברנטיס ובעצם נותן "מרשם" לקוברנטיס איך אנחנו רוצים לנהל את המיקרו-סרוויס שלנו.
הערה: בכוונה אני משתמש במילה "מיקרו-סרוויס" ולא "סרוויס", כי ראינו בהרצאה הקודמת שיש דבר כזה שנקרא Service בקוברנטיס וזה משהו אחר.
אם יש לנו מיקרו-סרוויס מסוים ואנחנו רוצים לתת לקוברנטיס מרשם מלא של כל האספקטים שלו – איך לנהל אותו, איך לעשות לו עדכון גרסאות ואיפה לשמור את המידע – את כל זה נעשה בעזרת ה-Deployment.
הכלי שלכם: קובץ ה-YAML
אנחנו נגדיר את הדפלויימנט על ידי קובץ YAML. יאמל זה פורמט מסוים של קובץ (כמו JSON, XML או CSV) שקוברנטיס יודע לעבוד איתו. זה נכון גם לסרוויסים ופודים. הקובץ הזה יחזיק את הדפלויימנט ויתאר אותו.
נניח שיש לנו מיקרו-סרוויס שאחראי על יצירת יוזרים (Users). הקוד שלו ארוז בתוך Docker Image, והאימג' הזה ייצר לנו בסוף פוד. הדפלויימנט הוא הדרך שלנו להגיד לקוברנטיס:
"תשמע, יש לנו מיקרו-סרוויס A, הוא אחראי על יצירת יוזרים, עכשיו אני אתן לך את המפרט המדויק איך אני רוצה שתנהל אותו".
המתח בין ה-Desired ל-Actual
קוברנטיס עובד תמיד עם שני מצבים:
Desired State (המצב הרצוי): מה שכתבנו בקובץ.
Actual State (המצב האמיתי): מה שקורה בשטח בפועל.
קוברנטיס כל הזמן רוצה להביא את ה-Actual להיות בדיוק כמו ה-Desired.
דוגמה א': הגדרנו 10 פודים ב-Desired. בשטח (Actual) אחד הפודים נהיה לא בריא וירד. עכשיו יש רק 9. קוברנטיס מבין שיש הפרה של האיזון, ומיד ייצור פוד עשירי כדי לחזור ל-10.
דוגמה ב': אנחנו החלטנו לשנות את ה-Desired (למשל לעבור לגרסה חדשה או לשנות כמות פודים). עכשיו ה-Actual יתחיל להשתנות כדי לרדוף אחרי ה-Desired החדש עד שהם יהיו שווים.
מה תמצאו בתוך קובץ ה-Deployment?
הנה הרכיבים העיקריים שחוזרים על עצמם כמעט תמיד:
Pod Template: הגדרה של איך הפוד בנוי (איזה אימג', אילו פורטים ומשתני סביבה).
ReplicaSet: מגדיר כמה פודים אנחנו רוצים ואיך לעשות להם Autoscale (הגדלה אוטומטית) לפי עומס, זיכרון או כמות קריאות.
Selector (סלקטור): שימוש בלייבלים (תגיות) כדי לסמן לקוברנטיס: "אלה הפודים הספציפיים שהדפלויימנט הזה מנהל".
Rollout & Rollback: מדיניות עדכוני גרסה. במקום להפיל הכל בבת אחת (Downtime), אפשר להגדיר שמעלים גרסה חדשה בהדרגה (למשל, שני פודים בכל פעם). אם משהו משתבש – עושים Rollback חזרה.
Health Checks: הבדיקות שקובעות אם המערכת תקינה:
Readiness: מתי הפוד מוכן להתחיל לקבל גולשים (Traffic).
Liveness: האם הפוד חי ובריא? אם לא – קוברנטיס יהרוג אותו ויקים חדש.
סיכום
לסיכום, דפלויימנט זו ישות ברמה מאוד גבוהה, וזו הישות שבדרך כלל נשתמש בה בחברות ובפרודקשן (ולא בישויות הנמוכות יותר). יש אפשרויות כמעט אינסופיות לתת הסברים לקוברנטיס איך אנחנו רוצים שהמיקרו-סרוויס שלנו יהיה פרוס.
זהו, זה היה ההסבר על דפלויימנט. תודה רבה לכולם ונתראה בהרצאה הבאה.