הפחתת זמן האחזור באמצעות חימום מראש של תמונות

חימום מראש של תמונות מאפשר להפעיל באופן מפורש את ההורדה של תמונות קונטיינר למטמון של Image Streaming לפני שלקוח זמן ריצה מבקש אותן. הפעולה הזו למעשה מבטלת את זמן האחזור של 'הפעלה במצב התחלתי (cold start)' שקשור למשיכה הראשונה של גרסת תמונה חדשה עבור עומסי עבודה שמשתמשים בסטרימינג של תמונות.

סקירה כללית

כשמעבירים תמונה ל-Artifact Registry, היא נשמרת במערכת אחסון בסיסית. כדי לאפשר גישה עם השהיה נמוכה, Artifact Registry משתמש גם במטמון של Image Streaming, שמתמלא בדרך כלל בשליפה הראשונה מלקוח שהפעלתם בו את Image Streaming. בעומסי עבודה שרגישים לזמן האחזור, כמו הגדלה של אשכול Google Kubernetes Engine, ההמתנה עד שהמטמון יתמלא עלולה לגרום לעיכובים. חימום מראש עוזר להכניס תמונות למטמון של סטרימינג תמונות מראש.

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

מגבלות

  • ‫API בלבד: אפשר להשתמש בחימום מראש רק באמצעות Artifact Registry API בארכיטקטורת REST. אי אפשר להשתמש ב-CLI של gcloud או במסוף Google Cloud כדי להפעיל חימום מראש.
  • רק ב-GKE: חימום מראש יעיל רק באשכולות GKE שמופעל בהם Image Streaming. הזרמת תמונות מחייבת תוכנה ספציפית שפועלת בצומת הלקוח.
  • פריט מידע יחיד: אפשר לבצע חימום מראש רק של פריט מידע אחד (גרסה או תג) לכל בקשת API.
  • תמונות מרובות ארכיטקטורות: לא נתמכות. משתמשים בגרסה הספציפית לתמונה של הארכיטקטורה.
  • מגבלת פרויקט: יש מגבלה כוללת של 100GB לכל פרויקט לצרכן לתמונות שהוכנו מראש. כשמגיעים למגבלה, תמונות ישנות יותר נמחקות כדי לפנות מקום לתמונות חדשות.

לפני שמתחילים

  1. מפעילים את Artifact Registry API. מידע נוסף זמין במאמר הפעלת Artifact Registry.
  2. מתקינים את ה-CLI של gcloud כדי לקבל אסימוני אימות לבקשות API בארכיטקטורת REST.

התפקידים הנדרשים

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

  • טעינה מראש של ארטיפקטים במטמון או הסרה שלהם מהמטמון (artifactregistry.repositories.prewarmArtifact, artifactregistry.repositories.removePrewarmedArtifact): Artifact Registry Writer (roles/artifactregistry.writer)
  • בדיקה או הצגה של רשימת ארטיפקטים שחוממו מראש (artifactregistry.repositories.checkPrewarmedArtifact, artifactregistry.repositories.listPrewarmedArtifacts): Artifact Registry Reader (roles/artifactregistry.reader)

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

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

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

חימום מראש של תמונה

כדי לבצע חימום מראש של תמונה, שולחים בקשת POST אל ה-method‏ :prewarmArtifact של המאגר.

‫API בארכיטקטורת REST

מקור: projects.locations.repositories.prewarmArtifact

גוף הבקשה בנוי באופן הבא:

{
  "version": "projects/PROJECT_ID/locations/LOCATION/repositories/REPOSITORY/packages/PACKAGE/versions/VERSION",
  "retention_days": 3
}

אפשרות אחרת היא להשתמש בתג:

{
  "tag": "projects/PROJECT_ID/locations/LOCATION/repositories/REPOSITORY/packages/PACKAGE/tags/TAG",
  "retention_days": 3,
  "force": true
}
שדה תיאור
tag אופציונלי. תג ספציפי של ארטיפקט לחימום מראש. חובה לציין version או tag.
version אופציונלי. גרסת פריט המידע שנוצר בתהליך הפיתוח (Artifact) שרוצים לבצע חימום מראש. חובה לציין version או tag.
retention_days אופציונלי. מספר הימים לשמירת הארטיפקט במטמון. אם לא מציינים את השדה הזה, ברירת המחדל היא 3 ימים.
force אופציונלי. אם true, המערכת עשויה להסיר פריטים ישנים כדי לפנות מקום לפריט הזה.
stream_location אופציונלי. האזור הספציפי שבו התמונה תעבור חימום מראש. כברירת מחדל, המיקום הזה תואם למיקום התמונה. שימו לב: אין תמיכה בהגדרות של כמה אזורים. אם מציינים אזור רחב, ברירות המחדל הן us-central1 (ארה"ב), europe-north1 (האיחוד האירופי) ו-asia-east1 (אסיה).

דוגמה: הפעלה מוקדמת של גרסה ספציפית

בדוגמה הבאה, מתבצעת חימום מראש של גרסה sha256:52e... של חבילת nginx במאגר my-repo באזור us-east1.

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{
    "version": "projects/my-project/locations/us-central1/repositories/my-repo/packages/nginx/versions/sha256:52e85304675567b5e656f5e997576a9d20c57176",
    "retention_days": 7,
    "stream_location": "us-east1",
  }' \
  "https://artifactregistry.googleapis.com/v1/projects/my-project/locations/us-central1/repositories/my-repo:prewarmArtifact"

דוגמה: חימום מראש של תג

בדוגמה הבאה, מתבצעת חימום מראש של האימג' שתויג production בחבילה my-app.

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{
    "tag": "projects/my-project/locations/us-central1/repositories/my-repo/packages/my-app/tags/production",
    "force": true
  }' \
  "https://artifactregistry.googleapis.com/v1/projects/my-project/locations/us-central1/repositories/my-repo:prewarmArtifact"

בדיקת סטטוס החימום מראש

כדי לבדוק אם ארטיפקט עבר חימום מראש, משתמשים בשיטה :checkPrewarmedArtifact.

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{
    "version": "projects/my-project/locations/us-central1/repositories/my-repo/packages/nginx/versions/sha256:52e85304675567b5e656f5e997576a9d20c57176"
  }' \
  "https://artifactregistry.googleapis.com/v1/projects/my-project/locations/us-central1/repositories/my-repo:checkPrewarmedArtifact"

הצגת רשימה של פריטי מידע שנוצרו בתהליך פיתוח (Artifact) שחוממו מראש

כדי לראות רשימה של כל פריטי המידע שחוממו מראש במאגר, משתמשים בשיטה GET בקולקציה prewarmedArtifacts. בדוגמה הבאה מוצגת רשימה של כל התמונות שחוממו מראש ב-my-repo ב-us-east1. חובה להזין מסנן stream_location.

curl -X GET \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  "https://artifactregistry.googleapis.com/v1/projects/my-project/locations/us-central1/repositories/my-repo/prewarmedArtifacts?filter=stream_location=us-east1"/

הסרה מהמטמון

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

curl -X POST \
  -H "Authorization: Bearer $(gcloud auth print-access-token)" \
  -H "Content-Type: application/json" \
  -d '{
    "version": "projects/my-project/locations/us-central1/repositories/my-repo/packages/nginx/versions/sha256:52e85304675567b5e656f5e997576a9d20c57176"
  }' \
  "https://artifactregistry.googleapis.com/v1/projects/my-project/locations/us-central1/repositories/my-repo:removePrewarmedArtifact"

המאמרים הבאים