הגדרת ArgoCD Image Updater לעדכון אוטומטי של אימג'ים

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

היכולות שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1359
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

ArgoCD Image Updater: מדוע עדכון אימג'ים ידני שובר שחרורים

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

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

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

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

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

ArgoCD Image Updater סוגר בדיוק את הפער הזה: הוא עוקב אחרי הרג'יסטרי, משווה את התג העדכני לזה שכתוב במניפסט, וכותב את החדש לאותו מקום שממנו כלי האספקה לוקח את המצב הרצוי. בהמשך נפרק איך זה מוגדר — מדיניות עדכון, פילטרים לפי תגים, הרשאות כתיבה למאגר והתנהגות בזמן רולבק.

מה נותן עדכון אימג'ים אוטומטי: מהירות, יציבות, שליטה

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

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

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

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

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

מצבי עבודה של Image Updater: אפשרויות עדכון אוטומטי

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

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

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

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

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

ArgoCD Image Updater מסיר שגרה, אבל טעות כאן מתגלה לא בבנייה, אלא בסביבת עבודה שעברה לתג לא מאומת. לכן סדר העבודה קבוע: קודם מיפוי וסכמה מוסכמת, ורק אחר כך הפעלה.

  1. ביקורת מאגרים. מפרקים את השירותים: היכן נמצאים המניפסטים, איך מפורסמים תגים, מי הבעלים. בפלט — מפת שירותים עם אסטרטגיות נוכחיות וסימון היכן האוטומציה בטוחה.
  2. סכמת עדכון. לכל שירות קובעים למה להירשם: ענף תגים יציב, דייג'סט בלתי משתנה או ערוץ נפרד לסביבה. מסכימים אילו סביבות מתעדכנות מעצמן ואילו לפי החלטה.
  3. הגדרת כללים. רושמים כללי בחירת תגים, הרשאות כתיבה למאגר הקונפיגורציה והתנהגות כשאין תג מתאים. שירותים שבהם אוטומציה אסורה מוגבלים במפורש.
  4. בדיקת תרחישים. מריצים לא רק עדכון מוצלח, אלא גם מה שנשבר בפועל: רג'יסטרי לא זמין, קונפליקט עם עריכה ידנית של המניפסט, חזרה לאימג' הקודם, כיבוי האוטומציה.
  5. הוצאה לסביבת עבודה. מפעילים לפי שירותים: קודם לא קריטיים, אחר כך השאר, ובודקים את מצב האפליקציה אחרי כל עדכון.

מסירת נהלים

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

מה מוסרים לידיים: קונפיגורציות, מדיניות ונהלים

ארטיפקטים נאספים כך שעדכון אימג'ים אוטומטי לא ייתלה על מהנדס אחד: את ההגדרה אפשר למסור למשמרת תורן או לקבלן חדש בלי הסברים בעל פה. להלן המינימום שיוצא יחד עם ArgoCD Image Updater מוגדר.

  • קונפיגורציות. מניפסט כלל העדכון: אפליקציית היעד, רשימת האימג'ים, פילטר תגים (מתעלמים מ-latest, ענפים ותוויות קדם-שחרור), מרווח סקר רג'יסטרי ואופן כתיבת הגרסה החדשה למאגר.
  • סכמת סביבות. איך הגרסה עוברת dev → stage → prod: היכן מופעל עדכון אוטומטי, היכן רק מכינים שינויים, באיזו סביבה נדרש מעבר ידני.
  • מדיניות גישה. הרשאות חשבונות שירות: קריאה מהרג'יסטרי, כתיבה — רק לספריית המניפסטים של האפליקציה, בלי הרשאות מיותרות בקלאסטר.
  • נוהל רולבק. לפי אילו סימנים מורידים גרסה, איך מתקבעים התג הקודם או הדייג'סט הבלתי משתנה, מי מאשר את החזרה וכמה זמן היא לוקחת.
  • הוראות לתורן. טיפול בתקלות טיפוסיות: התג החדש לא נקלט, העדכון הוחל והשירות לא עלה, מצב המאגר והקלאסטר התפצל.
  • נצפות. אילו התראות מוגדרות — פער גרסאות, סנכרון כושל, סירוב הרשאה ברג'יסטרי — ולפי אילו סימנים התורן מבין שהעניין בעדכון.
  • יומן החלטות. למה נבחרו פילטרים, מרווחים וסדר סביבות כאלה: העריכה הבאה לא צריכה לבטל פשרה מודעת.

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

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

חיברו Argo CD Image Updater ותיארו כללים לפי סוגי שירותים: מסכות תגים ומדיניות בחירה, כתיבת התג החדש חזרה ל-git, מגבלת עדכונים במקביל כדי שהרג'יסטרי והקלאסטר לא יטולטלו. לשירותי דומיין השאירו סכמה דו-שלבית — קודם תג קדם-שחרור בסביבת קנרית, אחר כך פרודקשן. כל מה שלא התעדכן בחלון שהוגדר נכנס להתראה כאימג' מפגר.

מה השתנה במספרים

מדד לפני אחרי
שיעור פריסות ידניות כ-9 מתוך 10 פחות מ-1 מתוך 10
יציאת תיקון לפרודקשן שעות, היה תלוי בתורן 10–20 דקות מבניית האימג'
תקלות בגלל פער גרסאות באופן קבוע, כמה בחודש בודדות, נתפסות בהתראה מראש
חזרה לגרסה הקודמת עריכה ידנית של המניפסט היפוך אחד של קומיט

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

במה שונה עדכון לפי תג מעדכון לפי דייג'סט?

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

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

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

הדייג'סט חף מהחיסרון הזה — הוא מצביע על שכבות מסוימות שקיימות ברג'יסטרי כל עוד מדיניות השמירה בתוקף.

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

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

הבחירה המעשית ברורה. לסביבות מוצר — רק הפניות בלתי משתנות: ArgoCD Image Updater פותר תג לדייג'סט וכותב למניפסט אותו, האוטומציה נשמרת, והפריסה הופכת לשחזורית וניתנת לרולבק. תג בלי פתרון מתאים למקום שצריך "אימג' אחרון מהענף": עמדות פיתוח, הרצות בדיקות, סביבות דמו.

ספקות טכניים נפוצים: רולבקים, הרשאות, קונפליקטים בסנכרון

עדכון אימג'ים אוטומטי מסיר שגרה ידנית, אבל אצל מהנדסים מיד עולות שאלות לגבי צפיות: מה יקרה כשרג'יסטרי לא זמין, איך לא לפגוע בסביבת הייצור, מי יכול לעצור את האוטומציה. להלן תשובות קצרות לספקות שצפים כמעט בכל פרויקט עם ArgoCD Image Updater.

מה יקרה אם רג'יסטרי האימג'ים לא זמין?

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

איך מפרידים בין כמה סביבות כדי שבנייה מבדיקות לא תעבור לייצור?

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

מי ואיך יכול לעצור עדכון אוטומטי?

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

איך מבצעים רולבק לגרסה ומה עם קונפליקטים בסנכרון?

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

נדון במשימה: נבנה סכמת עדכון אוטומטי לסביבה שלכם

<cite> לא נחוץ. ArgoCD Image Updater מזכירים פעם אחת. --- ArgoCD Image Updater עובד מעל רג'יסטרי האימג'ים והמניפסטים שלכם, לכן דיוק ההערכה תלוי לא במספר הפגישות, אלא בכמה מלא מתואר המצב הקיים.

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

כדי לחזור עם הערכה ותוכנית, נדרשים נתוני קלט מהלקוח:

  • סכמת סביבות: כמה קלאסטרים, היכן סביבת בדיקות, קדם-ייצור וייצור, במה הם שונים;
  • כללי תיוג אימג'ים: אילו תגים נחשבים לשחרור, האם יש בלתי משתנים, איך מסומנות בניות תיקון חם;
  • גישות: קריאה לרג'יסטרי, הרשאות למאגר המניפסטים, תפקיד בקלאסטר לשירות העדכון;
  • חלונות עדכון וכללי רולבק: האם הייצור מתעדכן אוטומטית או לפי אישור;
  • מגבלות: שירותים עם מצב, מיגרציות של סכמת נתונים, רכיבים שאסור לגעת בהם באוטומציה;
  • תוצאה רצויה: מה נחשב להצלחה — מהירות אספקת התיקון, שיעור פעולות ידניות, צפיות של רולבק.

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