בידוד של עומסי עבודה ב-GKE באמצעות שרתים לדייר יחיד (sole-tenant)

בדף הזה מוסבר איך לבודד את עומסי העבודה שפועלים באשכולות רגילים של Google Kubernetes Engine ‏ (GKE) באמצעות צמתים של דייר יחיד ב-Compute Engine. אלה שרתים פיזיים ייעודיים שמריצים רק מכונות וירטואליות של פרויקט ספציפי. אתם יכולים להשתמש בצמתים של דייר יחיד כדי להפריד פיזית בין המכונות הווירטואליות שלכם לבין מכונות וירטואליות בפרויקטים אחרים, או כדי לקבץ את המכונות הווירטואליות שלכם יחד באותה חומרה של מארח.

התכונה הזו לא נתמכת ב-GKE Autopilot. מידע נוסף על גבולות האבטחה ב-Autopilot זמין במאמר גבולות האבטחה ב-Autopilot.

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

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

לפני שמתחילים, חשוב לוודא שביצעתם את הפעולות הבאות:

  • מפעילים את ממשק Google Kubernetes Engine API.
  • הפעלת Google Kubernetes Engine API
  • כדי להשתמש ב-CLI של Google Cloud למשימה הזו, צריך להתקין ואז להפעיל את gcloud CLI. אם התקנתם בעבר את ה-CLI של gcloud, מריצים את הפקודה gcloud components update כדי לקבל את הגרסה העדכנית. יכול להיות שגרסאות קודמות של ה-CLI של gcloud לא יתמכו בהרצת הפקודות שמופיעות במסמך הזה.

שליחת בקשה להגדלת המכסה

הצמתים של דייר יחיד גדולים (לדוגמה, 96 vCPU וזיכרון של 624GB), והמכסות שמוגדרות כברירת מחדל בפרויקט נמוכות מדי בשביל לטפל בהם.

כדי ליצור צמתים של דייר יחיד, צריך לבקש הגדלה של המכסה על מעבדים ב-Compute Engine API בדף המכסות. מידע נוסף על בקשה להגדלת מכסה

מספר המעבדים שאתם צריכים תלוי בגורמים הבאים:

  • ניצול המכסה הנוכחי של המעבד.
  • הגודל של קבוצת הצמתים.
  • תבנית הצומת.

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

יצירת תבנית של שרת לדייר יחיד

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

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

המסוף

  1. נכנסים לדף Sole-tenant nodes במסוף Google Cloud .

    כניסה לדף Sole-tenant nodes

  2. לוחצים על יצירת תבנית של צומת.

  3. מציינים שם ואזור לתבנית הצומת.

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

  5. אפשר גם להוסיף תווית אחת או יותר של שיוך צומת.

  6. לוחצים על יצירה כדי ליצור את תבנית הצומת.

gcloud

משתמשים בפקודה gcloud compute sole-tenancy node-templates create כדי ליצור תבנית של צומת:

gcloud compute sole-tenancy node-templates create TEMPLATE_NAME \
    --node-type=NODE_TYPE \
    --node-affinity-labels=AFFINITY_LABELS \
    --region=COMPUTE_REGION

מחליפים את מה שכתוב בשדות הבאים:

  • TEMPLATE_NAME: השם של תבנית הצומת החדשה.
  • NODE_TYPE: סוג הצומת של צמתים לדייר יחיד שנוצרו על סמך התבנית הזו. אפשר להשתמש בפקודה gcloud compute sole-tenancy node-types list כדי לקבל רשימה של סוגי הצמתים שזמינים בכל אזור.
  • AFFINITY_LABELS: המפתחות והערכים, [KEY=VALUE,...], של תוויות שקשורות לתחום עניין משותף. תוויות שיוך מאפשרות לקבץ באופן לוגי צמתים וקבוצות של צמתים. לאחר מכן, כשמבצעים הקצאה של מכונות וירטואליות, אפשר לציין תוויות שיוך במכונות הווירטואליות כדי לתזמן אותן בקבוצה ספציפית של צמתים או קבוצות של צמתים. מידע נוסף זמין במאמר Node affinity and anti-affinity.
  • COMPUTE_REGION: האזור שבו יוצרים את תבנית הצומת. אפשר להשתמש בתבנית הזו כדי ליצור קבוצות של צמתים בכל אזור של האזור הזה.

הפלט אמור להיראות כך:

Created [https://www.googleapis.com/compute/v1/projects/my-project/regions/us-central1/nodeTemplates/template-name].

יצירה של קבוצת שרתים לדייר יחיד

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

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

המסוף

כדי ליצור קבוצת צמתים עם דייר יחיד:

  1. נכנסים לדף Sole-tenant nodes במסוף Google Cloud .

    כניסה לדף Sole-tenant nodes

  2. לוחצים על יצירת קבוצת צמתים.

  3. מציינים שם לתבנית הצומת.

  4. בוחרים את אותו אזור שבו יצרתם את תבנית הצומת, ואז בוחרים אזור בתוך אותו אזור.

  5. בוחרים את תבנית הצומת.

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

  7. מציינים את מספר הצמתים שרוצים בקבוצה.

  8. משאירים את מדיניות התחזוקה כברירת מחדל, כי ערכים אחרים עלולים לגרום לשיבושים.

  9. אופציונלי: כדי לשתף את קבוצת הצמתים עם דייר יחיד, מגדירים את הגדרות השיתוף על ידי ציון אחת מהאפשרויות הבאות בקטע Configure share settings (הגדרת הגדרות השיתוף):

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

gcloud

יוצרים קבוצת צמתים מהתבנית:

gcloud compute sole-tenancy node-groups create GROUP_NAME \
    --zone COMPUTE_ZONE \
    --node-template TEMPLATE_NAME --target-size TARGET_SIZE \
    --share-settings=SHARE_SETTING \
    --share-with=PROJECTS \
    --maintenance-policy=default

מחליפים את מה שכתוב בשדות הבאים:

  • GROUP_NAME: השם שרוצים לתת לקבוצת הצמתים החדשה.
  • COMPUTE_ZONE: האזור שבו נמצאת קבוצת הצמתים הזו. האזור הזה צריך להיות באותו אזור כמו תבנית הצומת שבה אתם משתמשים.
  • TEMPLATE_NAME: השם של תבנית הצומת שבה אתם משתמשים.
  • TARGET_SIZE: מספר הצמתים שרוצים ליצור בקבוצה.
  • SHARE_SETTING: הגדרת השיתוף של קבוצת הצמתים. מגדירים את הערך projects כדי לשתף עם פרויקטים ספציפיים, או מגדירים את הערך organization כדי לשתף עם כל הארגון.
  • PROJECTS: רשימה של מזהי פרויקטים או מספרי פרויקטים שרוצים לשתף איתם את קבוצת הצמתים. חובה רק אם מגדירים את SHARE_SETTING לערך projects.

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

יצירת מאגר צמתים לדייר יחיד ב-GKE

אחרי שיצרתם קבוצת צמתים עם דייר יחיד ב-Compute Engine, אתם יכולים ליצור מאגר צמתים עם דייר יחיד.

אם כבר יש לכם אשכול GKE, אתם יכולים להוסיף לו מאגר צמתים עם דייר יחיד. אם לא, יוצרים אשכול באמצעות gcloud container clusters create.

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

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

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

יוצרים מאגר צמתים חדש עם קבוצת צמתים שצוינה:

למאגרי צמתים אזוריים:

  gcloud container node-pools create NODE_POOL_NAME \
      --node-group GROUP_NAME --cluster CLUSTER_NAME \
      --location CONTROL_PLANE_LOCATION --machine-type=MACHINE_TYPE \
      --node-locations=COMPUTE_ZONE1

למאגרי צמתים אזוריים:

  gcloud container node-pools create NODE_POOL_NAME \
      --node-group GROUP_NAME --cluster CLUSTER_NAME \
      --location CONTROL_PLANE_LOCATION --machine-type=MACHINE_TYPE \
      --node-locations=COMPUTE_ZONE1,COMPUTE_ZONE2

מחליפים את מה שכתוב בשדות הבאים:

  • NODE_POOL_NAME: שם למאגר הצמתים החדש.
  • GROUP_NAME: השם של קבוצת הצמתים הקיימת עם דיירות יחידה שרוצים להשתמש בה.
  • CLUSTER_NAME: שם האשכול שבו יוצרים את מאגר הצמתים.
  • CONTROL_PLANE_LOCATION: המיקום של מישור הבקרה של האשכול ב-Compute Engine. מציינים אזור לאשכולות אזוריים או אזור זמין לאשכולות אזוריים.
  • MACHINE_TYPE: סוג המכונה של מאגר הצמתים.
  • COMPUTE_ZONE1, COMPUTE_ZONE2,[...]: האזורים של קבוצות הצמתים עם דיירות בלעדית.

רשימה מלאה של הדגלים האופציונליים שאפשר לציין מופיעה במסמכי התיעוד בנושא gcloud container node-pools create.

יצירת מאגר צמתים עם צומת משותף של דייר יחיד באמצעות קובץ של צירוף צמתים

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

כדי להפנות לתוויות, פועלים לפי ההוראות ליצירת מאגר צמתים, ומחליפים את הדגל --node-group בדגל --sole-tenant-node-affinity-file. מעבירים קובץ JSON עם התוויות האלה. לדוגמה, הפקודה הבאה:

  gcloud container node-pools create sole-tenant-node-pool \
      --sole-tenant-node-affinity-file /path/to/affinity/file --cluster my-cluster \
      --location us-central1 --machine-type n1-standard-4  \
      --node-locations=us-central1-a,us-central1-b,us-central1-c

בקטעים הבאים מתוארים תרחישי שימוש בתוויות של קירבה לצומת עם צמתים של דייר יחיד.

מציינים שם של קבוצת צמתים מתוך פרויקט

כדי להשתמש בקבוצות של צמתים עם דייר יחיד מפרויקט ספציפי ומקבוצה ספציפית של צמתים, צריך לציין את הערכים האלה בקובץ של זיקת הצמתים. אפשר להשתמש בהעדפה הזו אם יוצרים מאגר צמתים מרובה אזורים, שבו שמות קבוצות הצמתים מכל אזור צריכים להיות זהים. כדי להשתמש בקבוצת צמתים כלשהי בפרויקט הבעלים שצוין, משמיטים את כל הבלוק compute-googleapis.com/node-group-name מקובץ ה-JSON.

מקרה לדוגמה:

[
  {
    "key" : "compute.googleapis.com/project",
    "operator" : "IN",
    "values" : ["OWNER_PROJECT"]
  },
  {
    "key" : "compute.googleapis.com/node-group-name",
    "operator" : "IN",
    "values" : ["GROUP_NAME"]
  },
]

ציון תוויות מותאמות אישית

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

מקרה לדוגמה:

[
  {
    "key" : "compute.googleapis.com/project",
    "operator" : "IN",
    "values" : ["OWNER_PROJECT"]
  },
  {
    "key" : "workload",
    "operator" : "IN",
    "values" : ["frontend"]
  },
]

מגבלות

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

CPU overcommit

‫CPU overcommit היא תכונה אופציונלית שמאפשרת לכם להקצות יותר מדי משאבי CPU בצמתים שלכם עם דייר יחיד. הקצאת יתר של CPU יכולה להיות שימושית לעומסי עבודה שלא מוגבלים על ידי CPU, וכך אפשר להריץ יותר Pods בפחות צמתים ולצמצם את העלויות.

כדי להפעיל הקצאת יתר של CPU, צריך לציין את הדגל --cpu-overcommit-type=enabled כשיוצרים תבנית של צומת עם דייר יחיד. כשיוצרים מאגר צמתים, אפשר לציין את המספר המינימלי של מעבדים וירטואליים שצריכים להיות זמינים בצומת עם דייר יחיד באמצעות הדגל --sole-tenant-min-node-cpus. לפיצ'ר של הקצאת יתר של CPU יש את אותן מגבלות שמתוארות במאמר הקצאת יתר של CPU במכונות וירטואליות עם דייר יחיד. התכונה הזו נתמכת ב-GKE מגרסה 1.33.1-gke.1545000 ואילך.

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