במסמך הזה מוסבר איך להטמיע תרחישי שימוש נפוצים באמצעות Cloud Quotas API. ה-API הזה מאפשר לכם לשנות מכסות באופן פרוגרמטי ולבצע שינויים אוטומטיים במכסות ב Cloud de Confiance by S3NS פרויקטים, בתיקיות או בארגון.
מידע נוסף זמין בסקירה הכללית ובהפניה של Cloud Quotas API.
מגבלות
אלו המגבלות שחלות על מכסות ב-Cloud:
ברוב המקרים, צריך לבצע התאמות של הגדלת המכסה ברמת הפרויקט. רק מספר מוגבל של מוצרים תומכים בשינויים במכסת השימוש ברמת הארגון. כדי לבדוק אם אפשר להגדיל את מכסת השימוש במוצר מסוים ברמת הארגון, צריך לעיין במסמכי התיעוד של המוצר. Cloud de Confiance by S3NS
אפשר לבקש הקטנה של מכסות ברמת הפרויקט, הארגון והתיקייה.
מעקב אחר השימוש ושליחת בקשה להגדלת המכסה כשהשימוש עובר את רף ה-80%
בדוגמה הזו נעשה מעקב אחרי השימוש במכסה באמצעות Cloud Monitoring, ואז נשלחת בקשה להגדלת המכסה כשהשימוש בה עולה על 80%.
מתקשרים למשאב
QuotaInfoשל השירות כדי לקבוע אתquotaValueהנוכחי. השירות בדוגמה הזו הואcompute.googleapis.com:GET projects/PROJECT_NUMBER/locations/global/services/compute.googleapis.com/quotaInfosמחליפים את
PROJECT_NUMBERבמספר הפרויקט.כדי למצוא את מספר ליבות ה-CPU לכל פרויקט ואת המיקומים הרלוונטיים, מחפשים את מזהה המכסה
CPUS-per-project-regionבתגובהQuotaInfo. הערך שלquotaValueהוא 20."quotaInfos": [ ... { "name": "projects/PROJECT_NUMBER/locations/global/services/compute.googleapis.com/quotaInfos/CPUS-per-project-region", "quotaId": "CPUS-per-project-region", "metric": "compute.googleapis.com/cpus", "containerType": "PROJECT", "dimensions": [ "region" ], "dimensionsInfo": [ { "dimensions": [], "details": { "quotaValue": 20, "resetValue": 20 }, "applicableLocations": [ "us-central1", "us-central2", "us-west1", "us-east1" ] } ] }, ... ]
שולחים קריאה ל-Cloud Monitoring API כדי לראות את השימוש במכסה. בדוגמה הבאה, האזור
us-central1צוין. מדדי המכסות הנתמכים מפורטים בקטעserviceruntime.{ "name": "projects/PROJECT_NUMBER" "filter": "metric.type=\"serviceruntime.googleapis.com/quota/allocation/usage\" AND metric.labels.quota_metric=\"compute.googleapis.com/cpus\" AND resource.type=\"consumer_quota\" AND resource.label.location=\"us-central1\" ", "interval": { "startTime": "2023-11-10T18:18:18.0000Z", "endTime": "2023-11-17T18:18:18.0000Z" }, "aggregation": { "alignmentPeriod": "604800s", // 7 days "perSeriesAligner": "ALIGN_MAX", "crossSeriesReducer": "REDUCE_MAX" } }
כדי לקבוע את השימוש, צריך לטפל בתגובה מ-Cloud Monitoring API. משווים את הערך מ-Cloud Monitoring לערך
quotaValueמהשלבים הקודמים כדי לקבוע את השימוש.בדוגמה הבאה של תגובה, ערך השימוש ב-Cloud Monitoring הוא 19 באזור
us-central1. הערך שלquotaValueבכל האזורים הוא 20. השימוש גדול מ-80% מהמכסה, ואפשר ליזום עדכון של העדפת המכסה.time_series { metric { labels { key: "quota_metric" value: "compute.googleapis.com/cpus" } type: "serviceruntime.googleapis.com/quota/allocation/usage" } resource { type: "consumer_quota" labels { key: "project_id" value: "PROJECT_ID" } labels { key: "location" value: "us-central1" } } metric_kind: GAUGE value_type: INT64 points { interval { start_time { seconds: "2023-11-10T18:18:18.0000Z" } end_time { seconds: "2023-11-17T18:18:18.0000Z" } } value { int64_value: 19 } } }
כדי למנוע העדפות מכסה כפולות, צריך להתקשר אל
ListQuotaPreferencesקודם כדי לבדוק אם יש בקשות בהמתנה. הדגלreconciling=trueמציין בקשות בהמתנה.GET projects/PROJECT_NUMBER/locations/global/quotaPreferences?filter=service=%22compute.googleapis.com%22%20AND%20quotaId=%22CPUS-per-project-region%22%20AND%20reconciling=true
מחליפים את
PROJECT_NUMBERבמספר הפרויקט.מתקשרים אל
UpdateQuotaPreferenceכדי להגדיל את ערך המכסה לאזורus-central1. בדוגמה הבאה, צוין ערך מועדף חדש של 100.השדה
allow_missingמוגדר ל-true. התג הזה אומר למערכת ליצור משאבQuotaPreferenceאם לא קיים משאב עם השם שצוין.PATCH projects/PROJECT_NUMBER/locations/global/quotaPreferences/compute_googleapis_com-cpus-us-central1?allowMissing=true { "service": "compute.googleapis.com", "quotaId": "CPUS-per-project-region", "quotaConfig": { "preferredValue": 100 }, "dimensions": { "region": "us-central1" }, "justification": "JUSTIFICATION", "contactEmail": "EMAIL" }
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_NUMBER: המזהה הייחודי של הפרויקט. -
JUSTIFICATION: מחרוזת אופציונלית שמסבירה את הבקשה. -
EMAIL: כתובת אימייל שאפשר להשתמש בה ככתובת ליצירת קשר, למקרה ש- Cloud de Confiance by S3NS יצטרך מידע נוסף לפני שיוכל לאשר הקצאת נפח אחסון נוסף.
-
מתקשרים אל
GetQuotaPreferenceכדי לבדוק את הסטטוס של שינוי העדפת המכסה:GET projects/PROJECT_NUMBER/locations/global/quotaPreferences/compute_googleapis_com-cpus-us-central1מחליפים את
PROJECT_NUMBERבמספר הפרויקט.בזמן ש- Cloud de Confiance by S3NS בודק את ערך המכסה המבוקש, סטטוס המכסה שלכם מוגדר כ-
true.לפעמים Cloud de Confiance by S3NS מאשרת חלק מהבקשה להגדלת המגבלה במקום לאשר את ההגדלה המלאה. אם הבקשה אושרה באופן חלקי, העדפת המכסה כוללת את השדה
stateDetail. השדהstateDetailמתאר את המצב של אישור חלקי. בשדהgrantedValueמוצגת ההתאמה שבוצעה כדי למלא את הבקשה שלך באופן חלקי.כדי לראות אם הערך שאושר הוא הערך הסופי, בודקים את השדה
reconciling. אם הבקשה שלך עדיין בבדיקה, הערך של השדהreconcilingהואtrue. אם השדהreconcilingמוגדר לערךfalseאו שהוא מושמט, הערך שמאושר הוא הערך הסופי.בדוגמה הבאה, ערך המכסה המבוקש הוא 100, והשדה
reconcilingמציין שהבקשה נמצאת בבדיקה."name": "projects/PROJECT_NUMBER/locations/global/quotaPreferences/compute_googleapis_com-cpus-us-central1", "service": "compute.googleapis.com", "quotaId": "CPUS-per-project-region", "quotaConfig": { "preferredValue": 100, "grantedValue": 50, "traceId": "123acd-345df23", "requestOrigin": "ORIGIN_UNSPECIFIED" }, "dimensions": { "region": "us-central1" }, "reconciling": true, "createTime": "2023-01-15T01:30:15.01Z", "updateTime": "2023-01-16T02:35:16.01Z"
אחרי שההעדפה לגבי המכסה תעובד, השדה
reconcilingיוגדר לערךfalse. הערך שלgrantedValueזהה לערך שלpreferredValue. המכסה המועדפת אושרה במלואה.כש- Cloud de Confiance by S3NS דוחה או מאשר חלקית בקשת לקוח, ערך המכסה שאושר עדיין יכול להיות נמוך מהערך המועדף.
הקטנת מכסה
בדוגמה הבאה, מספר ה-TPU יורד ל-10 בכל אזור.
מקבלים את מזהה המכסה ואת ערך המכסה הנוכחי באמצעות קריאה ל-
ListQuotaInfos:GET projects/PROJECT_NUMBER/locations/global/services/compute.googleapis.com/quotaInfosמחליפים את
PROJECT_NUMBERבמספר הפרויקט.בודקים את שדות התגובה כדי למצוא רשומה של
QuotaInfoעבורV2-TPUS-per-project-region."quotaInfos": [ ... { "name": "projects/PROJECT_NUMBER/locations/global/services/compute.googleapis.com/quotaInfos/V2-TPUS-per-project-region", "quotaId": "V2-TPUS-per-project-region", "metric": "compute.googleapis.com/Tpus", "containerType": "PROJECT", "dimensions": [ "region" ], "dimensionsInfo": [ { "dimensions": [], "details": { "quotaValue": 20, "resetValue": 20 }, "applicableLocations": [ "us-central1", "us-central2", "us-west1", "us-east1" ] } ] }, ... ]
בתגובה הזו, מזהה הקוֹטָה הוא
V2-TPUS-per-project-region, והערך הנוכחי שלquotaValueהוא 20.צמצום מכסת ה-TPU בכל אזור ל-10 עם
CreateQuotaPreferenceRequest. מגדירים את הערךpreferredValueל-10.POST projects/PROJECT_NUMBER/locations/global/quotaPreferences?quotaPreferenceId=compute_googleapis_com-Tpu-all-regions { "quotaConfig": { "preferredValue": 10 }, "dimensions": [], "service": "compute.googleapis.com", "quotaId": "V2-TPUS-per-project-region", "justification": "JUSTIFICATION", "contactEmail": "EMAIL" }
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_NUMBER: המזהה הייחודי של הפרויקט. -
JUSTIFICATION: מחרוזת אופציונלית שמסבירה את הבקשה. -
EMAIL: כתובת אימייל שאפשר להשתמש בה ככתובת ליצירת קשר, למקרה ש- Cloud de Confiance by S3NS יצטרך מידע נוסף לפני שיוכל לאשר הקצאת נפח אחסון נוסף.
-
מאשרים את ערך המכסה החדש באמצעות קריאה ל-
GetQuotaInfoשבה מזהה המכסה מוגדר כ-V2-TPUS-per-project-region.GET projects/PROJECT_NUMBER/locations/global/services/compute.googleapis.com/quotaInfos/V2-TPUS-per-project-regionמחליפים את
PROJECT_NUMBERבמספר הפרויקט.זוהי דוגמה לתשובה, הערך
valueהוא 10 והוא רלוונטי בכל האזורים."name": "projects/PROJECT_NUMBER/locations/global/services/compute.googleapis.com/quotaInfos/V2-TPUS-per-project-region", "quotaId": "V2-TPUS-per-project-region", "metric": "compute.googleapis.com/v2_tpus", "containerType": "PROJECT", "dimensions": [ "region" ], "dimensionsInfo": [ { "dimensions": [], "details": { "value": 10, }, "applicableLocations": [ "us-central1", "us-central2", "us-west1", "us-east1" ] } ]
העתקת העדפות מכסה לפרויקט אחר
בדוגמה הבאה מועתפות כל העדפות המכסה מפרויקט אחד לפרויקט אחר. היא כתובה ב-Java, אבל אפשר להשתמש בכל שפת תכנות.
שיחה אל
ListQuotaPreferencesבפרויקט המקור ללא מסנן:GET projects/PROJECT_NUMBER1/locations/global/quotaPreferencesPROJECT_NUMBER1 הוא מספר הפרויקט של פרויקט המקור. התשובה מכילה את כל העדפות המכסה של פרויקט המקור.
לכל העדפת מכסה בתשובה, צריך להתקשר אל
UpdateQuotaPreferenceולהגדיר את השדות הבאים:
name– השדה המעודכן של השם נלקח מהתגובה, ומספר פרויקט המקור (PROJECT_NUMBER1) מוחלף במספר פרויקט היעד (PROJECT_NUMBER2).
service,quotaId,preferredValue,dimensions– אפשר לקחת את השדות האלה ישירות מהתגובה כמו שהם.
for (QuotaPreference srcPreference : listResponse.getQuotaPreferences()) { QuotaPreference.Builder targetPreference = QuotaPreference.newBuilder() .setName(srcPreference.getName().replace("PROJECT_NUMBER1", "PROJECT_NUMBER2")) .setService(srcPreference.getService()) .setQuotaId(srcPreference.getQuotaId()) .setJustification(srcPreference.getJustification()) .setContactEmail(srcPreference.getContactEmail()) .setQuotaConfig( QuotaConfig.newBuilder().setPreferredValue(srcPreference.getQuotaConfig().getPreferredValue())) .putAllDimensions(srcPreference.getDimensionsMap()); UpdateQuotaPreferenceRequest updateRequest = UpdateQuotaPreferenceRequest.newBuilder() .setQuotaPreference(targetPreference) .setAllowMissing(true) .build(); cloudQuotas.updateQuotaPreference(updateRequest); }
מתקשרים אל
ListQuotaPreferencesכדי לאמת את הסטטוס של העדפות המכסה בפרויקט היעד:GET projects/PROJECT_NUMBER2/locations/global/quotaPreferencesמחליפים את
PROJECT_NUMBER2במספר הפרויקט של פרויקט היעד.
רשימת בקשות מכסה בהמתנה
כדי לרשום את כל הבקשות להעדפות מכסה שממתינות לאישור בפרויקט, קוראים לפונקציה ListQuotaPreferences עם המסנן reconciling=true.
GET projects/PROJECT_NUMBER/locations/global/quotaPreferences?reconciling=true
מחליפים את PROJECT_NUMBER במספר הפרויקט.
בתגובה לבקשה הזו מוחזרת העדפת המכסה האחרונה בהמתנה. מכיוון ש-Cloud Quotas API הוא ממשק API הצהרתי, המערכת מנסה למלא את העדפת המכסה האחרונה.
דוגמה לתשובה:
"quotaPreferences": [ { "name": "projects/PROJECT_NUMBER/locations/global/quotaPreferences/compute_googleapis_com-cpus-us-central1", "service": "compute.googleapis.com", "quotaId": "CPUS-per-project-region", "quotaConfig": { "preferredValue": 100, "grantedValue": 30, "traceId": "123acd-345df23", "requestOrigin": "ORIGIN_UNSPECIFIED" }, "dimensions": { "region": "us-central1" }, "reconciling": true, "createTime": "2023-01-15T01:30:15.01Z", "updateTime": "2023-01-16T02:35:16.01Z" }, { "name": "projects/PROJECT_NUMBER/locations/global/quotaPreferences/compute_googleapis_com-cpus-cross-regions", "service": "compute.googleapis.com", "quotaId": "CPUS-per-project-region", "quotaConfig": { "preferredValue": 10, "grantedValue": 5, "traceId": "456asd-678df43", "requestOrigin": "ORIGIN_UNSPECIFIED" }, "reconciling": true, "createTime": "2023-01-15T01:35:15.01Z", "updateTime": "2023-01-15T01:35:15.01Z" } ]
בקשה להגדלת מכסות לקבוצה
כדי לבקש הגדלה של קבוצת מכסות בפרויקט חדש, צריך לשמור את המכסות המועדפות לפרויקט החדש בקובץ CSV עם הערכים הבאים: שם השירות, מזהה המכסה, ערך המכסה המועדף ומאפיינים.
לכל שורה בקובץ ה-CSV, קוראים את התוכן בשדות serviceName,
quotaId, preferredValue ו-dimensionMap.
CreateQuotaPreferenceRequest request = CreateQuotaPreferenceRequest.newBuilder() .setParent("projects/PROJECT_NUMBER/locations/global") .setQuotaPreferenceId(buildYourOwnQuotaPreferenceId(serviceName, quotaId, dimensionMap)) .setQuotaPreference( QuotaPreference.newBuilder() .setService(serviceName) .setQuotaId(quotaId) .setJustification(justification) .setContactEmail(contactEmail) .setQuotaConfig(QuotaConfig.newBuilder().setPreferredValue(preferredValue)) .putAllDimensions(dimensionMap)) .build(); cloudQuotas.createQuotaPreference(request);
מחליפים את PROJECT_NUMBER במספר הפרויקט.
מכיוון שפרויקט היעד הוא חדש, אפשר לבצע קריאה ל-method CreateQuotaPreference בזמן הקריאה וההקצאה של השדות. אפשרות אחרת היא להתקשר לשיטה UpdateQuotaPreference עם allow_missing שמוגדר ל-true.
השיטה buildYourOwnQuotaPreferenceId יוצרת מזהה של העדפת מכסה על סמך שם השירות, מזהה המכסה ומפה של מאפיינים בהתאם לסכמת מתן השמות שלכם. אפשר גם לא להגדיר מזהה העדפת מכסת אחסון. נוצר בשבילכם מזהה העדפת מכסת אחסון.
בקשה לשינוי מכסות שלא נעשה בהן שימוש
יכול להיות שמכסות שעדיין לא נעשה בהן שימוש ושכוללות מאפיינים ספציפיים לשירות, כמו vm_family, לא יופיעו במסוף Cloud de Confiance . יכול להיות שתצטרכו להשתמש ב-Cloud Quotas API במקום זאת.
לדוגמה, יכול להיות שתשכפלו פרויקט ותדעו מראש שאתם צריכים להגדיל את הערך של compute.googleapis.com/gpus_per_gpu_family.
הערך הזה מופיע במסוף Cloud de Confiance רק עבור משפחות של יחידות GPU שכבר השתמשתם בהן. כדי להשתמש ב-Cloud Quotas API כדי לבקש הגדלה של מכסת NVIDIA_H100 GPUs ב-us-central1, אפשר לשלוח בקשה כמו הבקשה הבאה:
POST projects/PROJECT_NUMBER/locations/global/quotaPreferences?quotaPreferenceId=compute_googleapis_com-gpus-us-central1-NVIDIA_H100 {
"service": "compute.googleapis.com",
"quotaId": "GPUS-PER-GPU-FAMILY-per-project-region",
"quotaConfig": { "preferredValue": 100 },
"dimensions": { "region": "us-central1", "gpu_family": "NVIDIA_H100" },
"justification": "JUSTIFICATION",
"contactEmail": "EMAIL"
}
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_NUMBER: המזהה הייחודי של הפרויקט. -
JUSTIFICATION: מחרוזת אופציונלית שמסבירה את הבקשה. -
EMAIL: כתובת אימייל שאפשר להשתמש בה ככתובת ליצירת קשר, למקרה ש- Cloud de Confiance by S3NS יצטרך מידע נוסף לפני שיוכל להעניק מכסת אחסון נוספת.
מידע נוסף זמין גם בתיאורים של הקדימות של מאפיינים ושל שילוב מאפיינים.
קבלת מידע על מכסות של מאפיין ספציפי בשירות
משפחת GPU היא מאפיין ספציפי לשירות. בדוגמה הבאה של בקשה נעשה שימוש במזהה המכסה GPUS-PER-GPU-FAMILY-per-project-region כדי לקבל את המשאב QuotaInfo.
GET projects/PROJECT_NUMBER/locations/global/services/compute.googleapis.com/quotaInfos/GPUS-PER-GPU-FAMILY-per-project-regionמחליפים את PROJECT_NUMBER במספר הפרויקט.
זוהי דוגמה לתשובה. לכל מפתח ייחודי מסוג gpu_family, הערכים quotaValue ו-applicableLocations שונים:
"name": "projects/PROJECT_NUMBER/locations/global/services/compute.googleapis.com/quotaInfos/GpusPerProjectPerRegion", "quotatName": "CPUS-per-project-region", "metric": "compute.googleapis.com/gpus_per_gpu_family", "isPrecise": true, "quotaDisplayName": "GPUs per GPU family", "metricDisplayName": "GPUs", "dimensions": [ "region", "gpu_family" ], "dimensionsInfo": [ { "dimensions": { "region": "us-central1", "gpu_family": "NVIDIA_H200" }, "details": { "quotaValue": 30, "resetValue": 30, }, "applicableLocations": [ "us-central1" ] }, { "dimensions": { "region": "us-central1" } "details": { "quotaValue": 100, "resetValue": 100, }, "applicableLocations": [ "us-central1" ] }, { "dimensions": { "gpu_familly": "NVIDIA_H100" } "details": { "quotaValue": 10, }, "applicableLocations": [ "us-central2", "us-west1", "us-east1" ] } { "dimensions": [], "details": { "quotaValue": 50, "resetValue": 50, }, "applicableLocations": [ "us-central1", "us-central2", "us-west1", "us-east1" ] } ]
יצירת העדפת מכסה למאפיין ספציפי לשירות
בדוגמה הבאה מוסבר איך ליצור מכסת שימוש באזור מסוים ובמשפחת GPU מסוימת עם ערך מועדף של 100. מיקום היעד מצוין במפת המאפיינים עם המפתח region, ומשפחת ה-GPU של היעד מצוינת עם המפתח gpu_family.
בדוגמה הבאה של CreateQuotaPreference מצוינת משפחת GPU NVIDIA_H100 ואזור us-central1.
POST projects/PROJECT_NUMBER/locations/global/quotaPreferences?quotaPreferenceId=compute_googleapis_com-gpus-us-central1-NVIDIA_H100 { "service": "compute.googleapis.com", "quotaId": "GPUS-PER-GPU-FAMILY-per-project-region", "quotaConfig": { "preferredValue": 100 }, "dimensions": {"region": "us-central1", "gpu_family": "NVIDIA_H100"}, "justification": "JUSTIFICATION", "contactEmail": ""EMAIL" }
מחליפים את מה שכתוב בשדות הבאים:
-
PROJECT_NUMBER: המזהה הייחודי של הפרויקט. -
JUSTIFICATION: מחרוזת אופציונלית שמסבירה את הבקשה. -
EMAIL: כתובת אימייל שאפשר להשתמש בה ככתובת ליצירת קשר, למקרה ש- Cloud de Confiance by S3NS יצטרך מידע נוסף לפני שיוכל להעניק מכסת אחסון נוספת.
עדכון העדפה של מכסה למאפיין ספציפי לשירות
בדוגמת הקוד הבאה מתקבל הערך הנוכחי של המאפיין
{"region" : "us-central1"; gpu_family:"NVIDIA_H100"},
ואז הערך המועדף מוגדר ככפול מהערך. היא כתובה ב-Java, אבל אפשר להשתמש בכל שפת תכנות.
// Get the current quota value for the target dimensions Map<String, String> targetDimensions = Maps.createHashMap("region", "us-central1", "gpu_family", "NVIDIA_H100"); long currentQuotaValue = 0; QuotaInfo quotaInfo = cloudQuotas.GetQuotaInfo( "projects/PROJECT_NUMBER/locations/global/services/" + serviceName + "quotaInfos/" + quotaId; for (dimensionsInfo : quotaInfo.getDimensionsInfoList()) { If (targetDimensions.entrySet().containsAll(dimensionsInfo.getDimensionsMap().entrySet()) { currentQuotaValue = dimensionsInfo.getDetails().getValue(); break; }) } // Set the preferred quota value to double the current value for the target dimensions QuotaPreference.Builder targetPreference = QuotaPreference.newBuilder() .setName(buildYourOwnQuotaPreferenceId(serviceName, quotaId, targetDimensions)) .setService(serviceName) .setQuotaId(quotaId) .setJustification(justification) .setContactEmail(contactEmail) .setQuotaConfig(QuotaConfig.newBuilder().setPreferredValue(currentQuotaValue * 2)) .putAllDimensions(targetDimensions)); UpdateQuotaPreferenceRequest updateRequest = UpdateQuotaPreferenceRequest.newBuilder() .setQuotaPreference(targetPreference) .setAllowMissing(true) .build(); cloudQuotas.updateQuotaPreference(updateRequest);
מחליפים את PROJECT_NUMBER במזהה הייחודי של הפרויקט.
המאמרים הבאים
מידע על Cloud Quotas API
הפניה ל-Cloud Quotas API
הסבר על מכסות