התאמה אישית של הגדרות קצה עורפי באמצעות היקפי GCPBackendPolicy

בסביבת multi-cluster Google Kubernetes Engine (GKE) Inference Gateway, אפשר להחיל הגדרות שונות של קצה עורפי על שירותים שנפרסו בכמה אשכולות. לדוגמה, אפשר להגדיר שיעורי בקשות מקסימליים שונים או גורמי קנה מידה של קיבולת לשרתי קצה עורפיים באזורים או בסביבות שונים.

כדי להבין את המאמר הזה, צריך להכיר את המושגים הבאים:

המסמך הזה מיועד לדמויות הבאות:

  • מהנדסי למידת מכונה (ML), מנהלי פלטפורמות ומפעילים ומומחי נתונים ו-AI שמעוניינים להשתמש ביכולות של תזמור קונטיינרים ב-Kubernetes כדי להפעיל עומסי עבודה של AI/ML.
  • מומחי Cloud Architect או מומחים ברשתות שמתקשרים עם רשתות Kubernetes.

מידע נוסף על תפקידים נפוצים ומשימות לדוגמה שאנחנו מתייחסים אליהם בCloud de Confiance by S3NS תוכן, זמין במאמר תפקידים נפוצים של משתמשים ב-GKE Enterprise ומשימות.

איך היקפי ההרשאות של GCPBackendPolicy פועלים

השדה scopes ב-GCPBackendPolicy מאפשר לכם להתאים אישית את ההגדרות של הקצה העורפי בהתאם לאשכולות הספציפיים שבהם הקצה העורפי פועל. אתם יכולים להחיל הגדרות שונות על שרתים עורפיים בסביבות או באזורים שונים, וכך לקבל שליטה מדויקת על עומסי העבודה המבוזרים של AI/ML. בקטעים הבאים מוסבר איך לטרגט משאבים, להגדיר היקפי מדיניות ולטפל בפתרון קונפליקטים.

משאבים של Target 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), הקצה העורפי צריך לעמוד בכל התנאים של התוויות האלה כדי שהמערכת תחיל את ההגדרה של היקף ההגדרה. הגישה הזו מאפשרת לכם לטרגט במדויק את השרתים העורפיים על סמך קריטריונים רבים.

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

בטבלה הבאה מפורטים השדות ברמת ה-Backend שאפשר להתאים אישית כדי לשלוט בהתנהגות ה-Backend בסביבות או באזורים שונים.

שם השדה תיאור הגדרה לדוגמה
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 בקשות לשנייה לכל נקודת קצה.

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