בסביבת multi-cluster Google Kubernetes Engine (GKE) Inference Gateway, אפשר להחיל הגדרות שונות של קצה עורפי על שירותים שנפרסו בכמה אשכולות. לדוגמה, אפשר להגדיר קצב בקשות מקסימלי או קנה מידה שונה לקיבולת של בקשות ל-backend באזורים או בסביבות שונות.
כדי להבין את המאמר הזה, אתם צריכים להכיר את הנושאים הבאים:
- תזמור של AI/ML ב-GKE.
- טרמינולוגיה של AI גנרטיבי.
- מושגים בנושא רישות ב-GKE, כולל Services, GKE Multi Cluster Ingress ו- GKE Gateway API.
- איזון עומסים ב-Google Cloud, ובמיוחד איך מאזני עומסים פועלים עם GKE.
המסמך הזה מיועד לבעלי התפקידים הבאים:
- מהנדסי למידת מכונה (ML), מנהלי פלטפורמות ומפעילים ומומחי נתונים ו-AI שמעוניינים להשתמש ביכולות של תזמור קונטיינרים ב-Kubernetes כדי להפעיל עומסי עבודה של AI/ML.
- מומחי Cloud Architect או מומחי רשתות שמתקשרים עם רשתות Kubernetes.
במאמר תפקידים ומשימות נפוצים של משתמשי GKE Enterprise מפורט מידע נוסף על תפקידים נפוצים ודוגמאות למשימות שאנחנו מתייחסים אליהן בתוכן שלGoogle Cloud .
איך היקפי ההרשאות של GCPBackendPolicy פועלים
השדה scopes ב-GCPBackendPolicy מאפשר לכם להתאים אישית את הגדרות הבק-אנד
על סמך האשכולות הספציפיים שבהם פועלים הבק-אנדים. אתם יכולים להחיל הגדרות שונות על קצוות עורפיים בסביבות או באזורים שונים, וכך לשלוט בצורה מדויקת בעומסי העבודה המבוזרים של AI/ML. בקטעים הבאים מוסבר איך לטרגט משאבים, להגדיר היקפי מדיניות ולטפל בפתרון קונפליקטים.
משאבי GKE Inference Gateway לטירגוט
כדי להשתמש במדיניות של Inference Gateway בסביבת GKE מרובת אשכולות, השדה GCPBackendPolicy של targetRef צריך להפנות למשאב GCPInferencePoolImport:
targetRef:
group: networking.gke.io
kind: GCPInferencePoolImport
name: example
הגדרת היקף המדיניות
בשדה scopes ב-GCPBackendPolicy אפשר להחיל הגדרות שונות של קצה עורפי על קבוצות ספציפיות של קצה עורפי. כשמגדירים אובייקטים של הגדרות ב-default.scopes, אפשר להשתמש בתוויות של אשכולות כדי לטרגט במדויק את הקצוות העורפיים ולהחיל הגדרות ספציפיות. לדוגמה, אתם יכולים להגדיר מגבלות קיבולת ייחודיות או שיעורי בקשות שונים לשרתי קצה עורפיים באזורים או באשכולות שונים.
אי אפשר לציין את אותם שדות ברמת ה-backend (כמו maxRatePerEndpoint) גם בקטע הראשי default וגם ברשומות default.scopes.
אם תנסו לעשות את זה, המדיניות תידחה. כך אפשר לוודא שההגדרות ברורות ועקביות.
פתרון התנגשויות
כשבקצה העורפי יש התאמה לכמה היקפי הרשאות, המערכת מחילה את הכללים הבאים כדי להבטיח התנהגות צפויה:
- התאמה לפי סדר עדיפויות: אם קצה עורפי מתאים לכמה סלקטורים ברשימה
scopes, המערכת מחילה רק את ההגדרות מהסלקטור התואם הראשון. כדי לוודא שההגדרה הרצויה תיכנס לתוקף, כדאי לסדר את ההיקפים מהספציפי ביותר לכללי ביותר. - טירגוט מדויק: כשבורר יחיד מכיל כמה תוויות (לדוגמה,
gke.io/region: us-central1ו-env: prod), הקצה העורפי צריך לעמוד בכל התוויות האלה כדי שהמערכת תחיל את ההגדרה של היקף הפעולה. הגישה הזו מאפשרת לכם לטרגט במדויק את הקצוות העורפיים על סמך כמה קריטריונים.
שדות נתמכים לכל קצה עורפי
בטבלה הבאה מפורטים השדות ברמת הקצה העורפי שאפשר להתאים אישית כדי לשלוט בהתנהגות של הקצה העורפי בסביבות או באזורים שונים.
| שם השדה | תיאור | הגדרה לדוגמה |
|---|---|---|
backendPreference |
מציין אם העורף המקורי הוא המועדף (PREFERRED) או ברירת המחדל (DEFAULT) במהלך מעקב אחרי קיבולת לאיזון עומסים במספר אזורים. |
backendPreference: PREFERRED |
balancingMode |
מציינת את אלגוריתם האיזון. הערכים הנתמכים הם RATE, UTILIZATION או CUSTOM_METRICS. |
balancingMode: CUSTOM_METRICS |
capacityScalerPercent |
הגדרת חלוקת התנועה על סמך הקיבולת. הערך הזה הוא אחוז בין 0 ל-100, והוא פועל כמכפיל של קיבולת היעד שהוגדרה בקצה העורפי. ערך ברירת המחדל הוא 100%. | capacityScalerPercent: 20 |
customMetrics |
מציין מדדים מותאמים אישית שמשמשים לאיזון עומסים כש-balancingMode מוגדר ל-CUSTOM_METRICS. השדה הזה
הוא רשימה של הגדרות מדדים. |
customMetrics: [{ name: "my-metric", value: 0.8 }] |
maxInFlightPerEndpoint |
ההגדרה קובעת את המספר המקסימלי של בקשות או חיבורים בו-זמניים לכל נקודת קצה. | maxInFlightPerEndpoint: 100 |
maxRatePerEndpoint |
ההגדרה קובעת את קצב הבקשות המקסימלי לכל נקודת קצה, בבקשות לשנייה (RPS). | maxRatePerEndpoint: 50 |
ציון סלקטורים של היקף
השדה selectors בכל היקף מאפשר לכם לקבוע אילו שרתי קצה יקבלו הגדרות מדיניות ספציפיות. אתם יכולים לטרגט עורפי קצה על סמך תוויות האשכול שלהם – תוויות GKE מובנות או תוויות מותאמות אישית משלכם – כדי להתאים אישית את ההגדרות לקבוצות שונות של עורפי קצה.
kind: GCPBackendPolicy
apiVersion: networking.gke.io/v1
metadata:
name: echoserver-v2
spec:
targetRef:
group: "networking.gke.io"
kind: GCPInferencePoolImport
name: test-inference-pool
default:
balancingMode: IN_FLIGHT # IN_FLIGHT mode is set at the default level
scopes:
- selector:
gke.io/zone: "us-central1-a"
maxInFlightPerEndpoint: 100 # Invalid: maxInFlightPerEndpoint cannot be set within a scope when balancingMode is IN_FLIGHT at the default level
תוויות GKE מרומזות
התוויות המשתמעות הבאות זמינות לשימוש כבוררים. מערכת GKE מוסיפה את התוויות האלה לאשכולות באופן אוטומטי:
| תווית | תיאור | ערך לדוגמה |
|---|---|---|
gke.io/cluster-name |
השם של אשכול GKE. | my-cluster |
gke.io/region |
האזור שבו האשכול נמצא. | us-central1 |
gke.io/zone |
האזור שבו האשכול נמצא. | us-central1-a |
תוויות מותאמות אישית לאשכולות
תוויות מותאמות אישית של אשכולות מספקות יותר גמישות בקיבוץ ובניהול של שרתי הקצה העורפיים. אם מגדירים תוויות משלכם באשכולות GKE, אפשר ליצור סלקטורים ספציפיים מאוד ב-GCPBackendPolicy כדי להחיל הגדרות ייחודיות. לדוגמה, אפשר לבסס את ההגדרות האלה על קריטריונים כמו סביבות שונות (dev, staging או prod) או גרסאות ספציפיות של אפליקציות.
כדי להוסיף תווית בהתאמה אישית, כמו environment=production, לאשכול GKE, מריצים את הפקודה הבאה:
gcloud container clusters update CLUSTER_NAME \
--region=REGION \
--update-labels=LABEL_KEY=LABEL_VALUE
מחליפים את מה שכתוב בשדות הבאים:
-
CLUSTER_NAME: השם של האשכול. -
REGION: האזור של האשכול. -
LABEL_KEY: המפתח של התווית המותאמת אישית, לדוגמה,environment. -
LABEL_VALUE: הערך של התווית המותאמת אישית, לדוגמה,production.
לאחר מכן תוכלו לבחור בקצה העורפי באשכול הזה באמצעות בורר התוויות המותאם אישית במדיניות.
דוגמה ל-GCPBackendPolicy עם בוררי היקף הרשאות
בדוגמה הבאה מוגדר GCPBackendPolicy שמטרגט GCPInferencePoolImport בשם experimental. המדיניות משתמשת בתוויות מרומזות ובתוויות בהתאמה אישית כדי להגדיר ערכים ל-backendPreference, ל-maxRatePerEndpoint ול-capacityScalerPercent.
apiVersion: networking.gke.io/v1
kind: GCPBackendPolicy
metadata:
name: backend-policy
spec:
targetRef:
kind: GCPInferencePoolImport
name: experimental
default:
scopes:
# Selector 1: Targets backends in us-west2, sets capacity to 50%
- capacityScalarPercent: 50
selector:
gke.io/region: us-west2
# Selector 2: Targets backends in clusters labeled 'env: prod'
- maxRatePerEndpoint: 40
selector:
env: prod
# Selector 3: Targets backends in a specific US-Central zone and marks them as PREFERRED
- backendPreference: PREFERRED
maxRatePerEndpoint: 50
selector:
gke.io/cluster-name: my-cluster
gke.io/zone: us-central1-a
אחרי שמחילים את המדיניות הזו, אפשר לראות את ההתנהגויות הבאות:
- הקיבולת האפקטיבית של שרתי קצה עורפיים באשכולות באזור
us-west2תוגדל ל-50%. - בשרתי קצה עורפיים באשכולות שמסומנים בתווית
env: prod, יש מגבלה של 40 בקשות לשנייה לכל נקודת קצה. - לשרתי קצה עורפי באשכולות שממוקמים באופן ספציפי באזור
us-central1-aיש עדיפות (PREFERRED) במהלך איזון העומסים, והקצב המקסימלי שלהם הוא 50 בקשות לשנייה לכל נקודת קצה.
המאמרים הבאים
- איך מגדירים
GCPBackendPolicy - מידע נוסף על שער הסקת מסקנות (Inference Gateway) של GKE עם כמה אשכולות
- מידע נוסף על הגדרת שער ההסקה של GKE עם כמה אשכולות