החלה של ComputeClasses על Pods כברירת מחדל

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

כדאי שתכירו את הגדרות ComputeClass בהתאמה אישית.

מידע על ComputeClasses שמוגדרים כברירת מחדל

אתם יכולים להגדיר אשכולות GKE או מרחבי שמות ספציפיים כך שיהיה להם ComputeClass ברירת מחדל. הכיתה שמוגדרת כברירת מחדל חלה על כל Pod באותו אשכול או מרחב שמות שלא נבחרה בו ComputeClass אחרת. כשפורסים Pod שלא נבחרה לו ComputeClass, ‏ GKE מחיל ComputeClass כברירת מחדל לפי הסדר הבא:

  1. אם למרחב השמות יש ComputeClass שמוגדר כברירת מחדל, ‏ GKE משנה את מפרט ה-Pod כדי לבחור את ה-ComputeClass הזה.
  2. אם למרחב השמות אין ComputeClass שמוגדר כברירת מחדל, חלה ברירת המחדל של המחלקה ברמת האשכול. ‫GKE לא משנה את מפרט ה-Pod.

כשמגדירים ComputeClass כברירת מחדל לאשכול או למרחב שמות, השינוי חל רק על Pods חדשים. השינוי לא ישפיע על תצורות Pod קיימות עד ליצירה מחדש של ה-Pods. ההתנהגות הזו רלוונטית גם אם הפעלתם את האפשרות להעברה פעילה של ComputeClass.

אם שדה activeMigration.optimizeRulePriority של ComputeClass שמוגדר כברירת מחדל מוגדר לערך true, ההגדרה הזו עשויה להשפיע על עומסי העבודה באשכולות. מידע נוסף זמין במאמר העברה פעילה ב-ComputeClasses שמוגדרים כברירת מחדל.

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

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

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

  • אם רוצים להגדיר ComputeClass מותאם אישית כברירת המחדל למרחב שמות, צריך לפרוס ComputeClass מותאם אישית.

דרישות

  • כדי להגדיר ComputeClass כברירת מחדל ברמת האשכול, האשכול צריך לפעול ב-GKE בגרסה 1.33.1-gke.1744000 ואילך.
  • כדי להגדיר ComputeClass כברירת המחדל ברמת מרחב השמות רק עבור Pods שאינם DaemonSet, צריך להפעיל את האשכול ב-GKE גרסה ‎1.33.1-gke.1788000 ואילך.

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

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

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

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

ההרשאות הנדרשות

כדי להגדיר ComputeClasses כברירת מחדל ברמת האשכול או מרחב השמות, נדרשות ההרשאות הבאות:

  • container.customResourceDefinitions.create
  • container.customResourceDefinitions.update
  • container.customResourceDefinitions.get
  • container.customResourceDefinitions.list
  • container.namespaces.get
  • container.namespaces.list
  • container.pods.get
  • container.nodes.get
  • container.nodes.list
  • container.deployments.create
  • container.deployments.get
  • הוספת תוויות למרחבי שמות: container.namespaces.update
  • מפעילים את ComputeClass שמוגדר כברירת מחדל ברמת האשכול: container.clusters.update

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

הגדרת ComputeClass כברירת מחדל למרחב שמות

אתם יכולים להוסיף הערה לכל מרחב שמות של Kubernetes באשכול עם השם של ComputeClass כדי להשתמש בו כברירת מחדל. אם פוד שנפרס במרחב השמות הזה לא בוחר כבר ComputeClass, ‏ GKE משנה את מפרט הפוד כדי לבחור את מחלקת ברירת המחדל במרחב השמות. אפשר להגדיר כל ComputeClass מותאם אישית או מובנה כברירת מחדל.

  • כדי להחיל ComputeClass על כל ה-Pods במרחב שמות כברירת מחדל, מוסיפים את התווית cloud.google.com/default-compute-class למרחב השמות הזה:

    kubectl label namespaces NAMESPACE_NAME \
        cloud.google.com/default-compute-class=COMPUTECLASS_NAME
    

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

    • NAMESPACE_NAME: השם של מרחב השמות שרוצים לעדכן.
    • COMPUTECLASS_NAME: השם של ComputeClass שרוצים להגדיר כברירת המחדל למרחב השמות.

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

    error: 'cloud.google.com/default-compute-class' already has a value, and --overwrite is false
    

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

  • כדי להחיל ComputeClass על כל ה-Pods שאינם DaemonSet במרחב שמות כברירת מחדל, מוסיפים את התווית cloud.google.com/default-compute-class-non-daemonset למרחב השמות הזה:

    kubectl label namespaces NAMESPACE_NAME \
        cloud.google.com/default-compute-class-non-daemonset=COMPUTECLASS_NAME
    

    אם הפקודה נכשלת ומוצגת הודעת השגיאה הבאה, מרחב השמות כבר כולל ComputeClass שמוגדר כברירת מחדל עבור Pods שאינם DaemonSet:

    error: 'cloud.google.com/default-compute-class-non-daemonset' already has a value, and --overwrite is false
    

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

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

עדכון של ComputeClass שמוגדר כברירת מחדל במרחב שמות

כדי להחליף את ComputeClass שמוגדר כברירת מחדל במרחב שמות, מריצים אחת מהפקודות הבאות:

  • מעדכנים את ברירת המחדל של ComputeClass לכל ה-Pods במרחב השמות:

    kubectl label namespaces NAMESPACE_NAME   \
        cloud.google.com/default-compute-class=COMPUTECLASS_NAME \
        --overwrite
    

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

    • NAMESPACE_NAME: השם של מרחב השמות שרוצים לעדכן.
    • COMPUTECLASS_NAME: השם של ComputeClass שרוצים להגדיר כברירת המחדל החדשה למרחב השמות.
  • מחליפים את ComputeClass שמוגדר כברירת מחדל עבור Pods שאינם DaemonSet במרחב השמות:

    kubectl label namespaces NAMESPACE_NAME \
        cloud.google.com/default-compute-class-non-daemonset=COMPUTECLASS_NAME \
        --overwrite
    

הגדרת ComputeClass כברירת מחדל למרחבי שמות של המערכת

ב-GKE נעשה שימוש במרחבי שמות של המערכת כדי להפעיל עומסי עבודה מנוהלים שונים, כמו סוכני מעקב. חלק מעומסי העבודה המנוהלים האלה הם DaemonSets, שצריכים לפעול בכל צומת באשכול כדי לספק פונקציונליות קריטית. עם זאת, אתם יכולים לציין ComputeClass כברירת מחדל עבור Pods שאינם DaemonSet במרחבי שמות של המערכת, כדי שה-Pods האלה יפעלו בנפרד מעומסי העבודה שלכם.

כדי להגדיר ComputeClass כברירת מחדל למרחבי שמות של המערכת, מבצעים את השלבים הבאים:

  1. שומרים את הסקריפט הבא בשם apply-system-cc.sh. הסקריפט הזה מאפשר להחיל ComputeClass מומלץ או ComputeClass קיים משלכם על מרחבי שמות של מערכת.

    #!/bin/bash
    
    # The recommended default ComputeClass name for system pods.
    DEFAULT_SYSTEM_CC_NAME="system-default-computeclass"
    
    # The YAML manifest for the recommended default ComputeClass for system pods.
    read -r -d '' DEFAULT_CC_YAML << EOF
    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: ${DEFAULT_SYSTEM_CC_NAME}
    spec:
      nodePoolAutoCreation:
        enabled: true
      whenUnsatisfiable: ScaleUpAnyway
      priorities:
      - machineFamily: t2d
    EOF
    
    # The label key to apply to namespaces.
    LABEL_KEY="cloud.google.com/default-compute-class-non-daemonset"
    
    
    # List of GKE system namespaces.
    SYSTEM_NAMESPACES=(
      "kube-system"
      "gke-gmp-system"
      "gmp-system"
      "gke-managed-cim"
      "gke-managed-volumepopulator"
      "gke-managed-checkpointing"
      "gkebackup"
      "gke-managed-lustrecsi"
    )
    
    
    # 1. Ask the user for their choice.
    echo "This script sets a default ComputeClass for GKE system namespaces."
    echo "--------------------------------------------------------------------"
    echo "The following ComputeClass is recommended for system Pods:"
    echo ""
    echo "$DEFAULT_CC_YAML"
    echo "--------------------------------------------------------------------"
    read -p "Do you want to use the recommended ComputeClass? (y/N): " user_choice
    
    CC_TO_APPLY=""
    
    # 2. Process the user's choice.
    if [[ "$user_choice" =~ ^[Yy]$ ]]; then
      # Path 1: User chose YES.
      echo "Installing the recommended default ComputeClass '${DEFAULT_SYSTEM_CC_NAME}'..."
    
      if ! echo "$DEFAULT_CC_YAML" | kubectl apply -f -; then
          # If kubectl apply fails, print an error and exit.
          echo "❌ Error: Failed to create the default ComputeClass. An internal error occurred."
          echo "Check for kubectl permissions or other cluster issues and re-run the script."
          exit 1
      fi
      # If the command succeeded, set the name to be used for labeling.
      CC_TO_APPLY="$DEFAULT_SYSTEM_CC_NAME"
    
    else
      read -p "Specify the name of an existing ComputeClass to set as the default for system Pods: " custom_cc_name
    
      # Validate that the user entered a name.
      while [[ -z "$custom_cc_name" ]]; do
        echo "Error: Name cannot be empty."
        read -p "Specify the name of an existing ComputeClass: " custom_cc_name
      done
    
      # Check if the specified ComputeClass actually exists in the cluster.
      echo "--> Verifying that ComputeClass '${custom_cc_name}' exists..."
      if kubectl get computeclass "$custom_cc_name" > /dev/null 2>&1; then
        echo "Verified."
        CC_TO_APPLY="$custom_cc_name"
      else
        echo "Error: ComputeClass '${custom_cc_name}' doesn't exist in the cluster."
        echo "Create the ComputeClass, and then then re-run this script."
        exit 1
      fi
    fi
    
    echo ""
    echo "Labelling system namespaces with ComputeClass: '${CC_TO_APPLY}'"
    echo "--------------------------------------------------------------------"
    
    # 3. Apply the label to all system namespaces.
    for ns in "${SYSTEM_NAMESPACES[@]}"; do
      # Gracefully handle namespaces that don't exist on this specific cluster.
      if kubectl get namespace "${ns}" > /dev/null 2>&1; then
        echo "--> Applying label to namespace: ${ns}"
        kubectl label namespace "${ns}" \
          "${LABEL_KEY}=${CC_TO_APPLY}" --overwrite
      else
        echo "--> Skipping namespace ${ns} (does not exist)"
      fi
    done
    
    echo ""
    echo "✅ Script finished successfully."

    הסקריפט הזה משתמש בתווית cloud.google.com/default-compute-class-non-daemonset, שמשפיעה רק על פודים שאינם DaemonSet במרחבי שמות של המערכת.

  2. מריצים את הסקריפט:

    ./apply-system-cc.sh
    

אחרי שהסקריפט מסתיים, כל הפודים החדשים של המערכת שאינם DaemonSet משתמשים ב-ComputeClass שצוין כברירת מחדל, אלא אם כבר יש להם ComputeClass. היא לא תשפיע על Pods קיימים במרחבי השמות האלה. אם GKE מוסיף מרחבי שמות חדשים של המערכת, צריך להריץ את הסקריפט הזה שוב כדי להחיל את השינויים על מרחבי השמות האלה.

כדי לבטל את ההגדרה של ComputeClass כברירת מחדל למרחבי שמות של המערכת, פועלים לפי השלבים הבאים:

  1. שומרים את הסקריפט הבא בשם unset-system-cc.sh:

    #!/bin/bash
    
    # The recommended default ComputeClass name for system pods.
    DEFAULT_SYSTEM_CC_NAME="system-default-computeclass"
    
    # The YAML manifest for the recommended default ComputeClass for system pods.
    read -r -d '' DEFAULT_CC_YAML << EOF
    apiVersion: cloud.google.com/v1
    kind: ComputeClass
    metadata:
      name: ${DEFAULT_SYSTEM_CC_NAME}
    spec:
      nodePoolAutoCreation:
        enabled: true
      whenUnsatisfiable: ScaleUpAnyway
      priorities:
      - machineFamily: t2d
    EOF
    
    # The label key to apply to namespaces.
    LABEL_KEY="cloud.google.com/default-compute-class-non-daemonset"
    
    
    # List of GKE system namespaces.
    SYSTEM_NAMESPACES=(
      "kube-system"
      "gke-gmp-system"
      "gmp-system"
      "gke-managed-cim"
      "gke-managed-volumepopulator"
      "gke-managed-checkpointing"
      "gkebackup"
      "gke-managed-lustrecsi"
    )
    
    
    # 1. Ask the user for their choice.
    echo "This script sets a default ComputeClass for GKE system namespaces."
    echo "--------------------------------------------------------------------"
    echo "The following ComputeClass is recommended for system Pods:"
    echo ""
    echo "$DEFAULT_CC_YAML"
    echo "--------------------------------------------------------------------"
    read -p "Do you want to use the recommended ComputeClass? (y/N): " user_choice
    
    CC_TO_APPLY=""
    
    # 2. Process the user's choice.
    if [[ "$user_choice" =~ ^[Yy]$ ]]; then
      # Path 1: User chose YES.
      echo "Installing the recommended default ComputeClass '${DEFAULT_SYSTEM_CC_NAME}'..."
    
      if ! echo "$DEFAULT_CC_YAML" | kubectl apply -f -; then
          # If kubectl apply fails, print an error and exit.
          echo "❌ Error: Failed to create the default ComputeClass. An internal error occurred."
          echo "Check for kubectl permissions or other cluster issues and re-run the script."
          exit 1
      fi
      # If the command succeeded, set the name to be used for labeling.
      CC_TO_APPLY="$DEFAULT_SYSTEM_CC_NAME"
    
    else
      read -p "Specify the name of an existing ComputeClass to set as the default for system Pods: " custom_cc_name
    
      # Validate that the user entered a name.
      while [[ -z "$custom_cc_name" ]]; do
        echo "Error: Name cannot be empty."
        read -p "Specify the name of an existing ComputeClass: " custom_cc_name
      done
    
      # Check if the specified ComputeClass actually exists in the cluster.
      echo "--> Verifying that ComputeClass '${custom_cc_name}' exists..."
      if kubectl get computeclass "$custom_cc_name" > /dev/null 2>&1; then
        echo "Verified."
        CC_TO_APPLY="$custom_cc_name"
      else
        echo "Error: ComputeClass '${custom_cc_name}' doesn't exist in the cluster."
        echo "Create the ComputeClass, and then then re-run this script."
        exit 1
      fi
    fi
    
    echo ""
    echo "Labelling system namespaces with ComputeClass: '${CC_TO_APPLY}'"
    echo "--------------------------------------------------------------------"
    
    # 3. Apply the label to all system namespaces.
    for ns in "${SYSTEM_NAMESPACES[@]}"; do
      # Gracefully handle namespaces that don't exist on this specific cluster.
      if kubectl get namespace "${ns}" > /dev/null 2>&1; then
        echo "--> Applying label to namespace: ${ns}"
        kubectl label namespace "${ns}" \
          "${LABEL_KEY}=${CC_TO_APPLY}" --overwrite
      else
        echo "--> Skipping namespace ${ns} (does not exist)"
      fi
    done
    
    echo ""
    echo "✅ Script finished successfully."
  2. מריצים את הסקריפט:

    ./unset-system-cc.sh
    

הגדרת ComputeClass כברירת מחדל לאשכול

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

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

  1. כדי להגדיר ComputeClass כברירת מחדל ברמת האשכול, משתמשים בדגל --enable-default-compute-class כשיוצרים או מעדכנים אשכול:

    • יצירת אשכול:

      gcloud container clusters create CLUSTER_NAME \
          --location=CONTROL_PLANE_LOCATION \
          --enable-default-compute-class
      

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

      • CLUSTER_NAME: שם לאשכול.
      • CONTROL_PLANE_LOCATION: המיקום של מישור הבקרה של האשכול, כמו us-central1.
    • עדכון אשכול:

      gcloud container clusters update CLUSTER_NAME \
          --location=CONTROL_PLANE_LOCATION \
          --enable-default-compute-class
      

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

      • CLUSTER_NAME: השם של האשכול.
      • CONTROL_PLANE_LOCATION: המיקום של מישור הבקרה של האשכול, כמו us-central1.

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

  2. יוצרים ComputeClass בשם default, כמו בדוגמאות הבאות:

    • הבקשות הבאות של ComputeClass מציינות סדרת מכונות ספציפית:

      apiVersion: cloud.google.com/v1
      kind: ComputeClass
      metadata:
        name: default
      spec:
        priorities:
        - machineFamily: n4
        - machineFamily: n2
        whenUnsatisfiable: ScaleUpAnyway
        nodePoolAutoCreation:
          enabled: true
      

      ה-ComputeClass הזה מבקש צמתים שמשתמשים במופעי N4. אם מכונות N4 לא זמינות, ComputeClass מבקש מכונות N2 במקום זאת. אפשר להגדיר את default ComputeClass עם כל אחד מהשדות שזמינים ב-ComputeClass CustomResourceDefinition.

    • הבקשה הבאה של ComputeClass מופנית לפלטפורמת המחשוב Autopilot עם אופטימיזציה לקונטיינרים:

      apiVersion: cloud.google.com/v1
      kind: ComputeClass
      metadata:
        name: default
      spec:
        autopilot:
          enabled: true
        priorities:
        - podFamily: general-purpose
        whenUnsatisfiable: ScaleUpAnyway
      

      ה-ComputeClass הזה תואם להתנהגות של ה-ComputeClass המובנה autopilot, למעט השדה whenUnsatisfiable, שהערך שלו הוא ScaleUpAnyway במקום DoNotScaleUp. השינוי הזה עוזר למנוע מצבים שבהם פודים שמשתמשים בבורר צמתים לחומרה ספציפית נשארים במצב 'בהמתנה' כי הוחלה עליהם ComputeClass שמוגדר כברירת מחדל ברמת האשכול.

      podFamily כלל העדיפות ממקם את ה-Pods בפלטפורמת המחשוב של Autopilot, שעברה אופטימיזציה לשימוש עם קונטיינרים. כלל העדיפות הזה מחייב GKE בגרסה 1.35.2-gke.1485000 ומעלה.

  3. יוצרים את default ComputeClass באשכול:

    kubectl apply -f PATH_TO_MANIFEST
    

    מחליפים את PATH_TO_MANIFEST בנתיב למניפסט של ComputeClass.

  4. אופציונלי: אם באשכול Standard כבר יש מאגרי צמתים שנוצרו באופן ידני ואתם משתמשים בהם כברירת מחדל לעומסי העבודה למטרות כלליות, אתם יכולים להעביר את עומסי העבודה האלה להפעלה במצב Autopilot אחרי שתגדירו ComputeClass של Autopilot כברירת המחדל ברמת האשכול. כדי להעביר את עומסי העבודה האלה, צריך לבודד את כל הצמתים במאגרי הצמתים ולנקז אותם. ‫GKE משתמש ב-ComputeClass שמוגדר כברירת מחדל ברמת האשכול כדי לתזמן את ה-Pods החדשים שממתינים להפעלה.

אחרי שמגדירים ComputeClass כברירת מחדל ברמת האשכול, GKE משנה את הגודל של מאגרי צמתים שעומדים בשתי הדרישות הבאות:

  • ההגדרה של הצומת זהה להגדרה של defaultComputeClass.
  • למאגר הצמתים אין כתמים או תוויות עבור ComputeClass אחר. ‫GKE יכול להרחיב מאגרי צמתים שיש להם taint ותווית עבור default ComputeClass.

לדוגמה, אם default ComputeClass מציין את סדרת המכונות N4,‏ GKE יכול להרחיב מאגר צמתים קיים שמשתמש במופעי N4 ואין לו taints או תוויות עבור ComputeClass אחר.

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

אימות התנהגות ברירת המחדל של ComputeClass

כדי לבדוק אם ה-ComputeClass שמוגדר כברירת מחדל למרחב שמות או לאשכול פועל כמצופה, מבצעים את הפעולות הבאות:

  1. דוגמה לפריסה:

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: helloweb
      labels:
        app: hello
    spec:
      selector:
        matchLabels:
          app: hello
          tier: web
      template:
        metadata:
          labels:
            app: hello
            tier: web
        spec:
          containers:
          - name: hello-app
            image: us-docker.pkg.dev/google-samples/containers/gke/hello-app:1.0
            ports:
            - containerPort: 8080
            resources:
              requests:
                cpu: 200m

    הפריסה הזו לא מבקשת במפורש ComputeClass.

  2. יוצרים את הפריסה:

    kubectl apply --namespace=NAMESPACE_NAME \
        -f https://raw.githubusercontent.com/GoogleCloudPlatform/kubernetes-engine-samples/refs/heads/main/quickstarts/hello-app/manifests/helloweb-deployment.yaml
    

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

    • השם של מרחב שמות שיש לו ComputeClass שמוגדר כברירת מחדל.
    • השם של מרחב שמות שאין לו ComputeClass שמוגדר כברירת מחדל.

    יכול להיות שיעבור זמן מה עד ש-GKE ייצור צמתים חדשים להפעלת ה-Pods.

  3. מזהים את הצמתים שמריצים את ה-Pods מהפריסה לדוגמה:

    kubectl get pods --namespace=NAMESPACE_NAME \
        --selector=app=hello -o=wide
    

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

    NAME                        READY   STATUS    RESTARTS   AGE     IP          NODE                                                  NOMINATED NODE   READINESS GATES
    helloweb-7795fbf856-58n5l   1/1     Running   0          9m21s   10.52.2.3   gke-cluster-1-nap-n2-highcpu-2-3muqi8-f213e529-rx7d   <none>           <none>
    
  4. קבלת תוויות הצומת:

    kubectl get node NODE_NAME --show-labels \
        | grep "cloud.google.com/compute-class"
    

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

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

    NODE_NAME   Ready    <none>   22m   v1.32.4-gke.1236007
    # lines are omitted from this output
    cloud.google.com/compute-class=COMPUTECLASS_NAME,cloud.google.com/gke-boot-disk=pd-balanced,cloud.google.com/gke-container-runtime=containerd
    

    הערך ב-COMPUTECLASS_NAME הוא אחד מהערכים הבאים:

    • ברירת מחדל של ComputeClass ברמת האשכול: default לצמתים שנוצרו על ידי GKE Autopilot או על ידי יצירה אוטומטית של מאגר צמתים. יכול להיות שלצמתים במאגרי צמתים קיימים שנוצרו באופן ידני לא תהיה התווית cloud.google.com/compute-class.
    • ברירת מחדל של ComputeClass ברמת מרחב השמות: השם של ComputeClass שהגדרתם כברירת המחדל של מרחב השמות.

השבתה של ComputeClass שמוגדר כברירת מחדל

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

  • כדי להשבית את ברירת המחדל של ComputeClass ברמת מרחב השמות לכל ה-Pods, מסירים את התווית cloud.google.com/default-compute-class ממרחב השמות:

    kubectl label namespaces NAMESPACE_NAME \
      cloud.google.com/default-compute-class-
    

    התו - בסוף מפתח התווית מסיר את כל התוויות עם המפתח הזה מהאובייקט Namespace ב-Kubernetes API.

  • כדי להשבית את ComputeClass שמוגדר כברירת מחדל ברמת מרחב השמות עבור Pods שאינם DaemonSet, צריך להסיר את התווית cloud.google.com/default-compute-class-non-daemonset ממרחב השמות:

    kubectl label namespaces NAMESPACE_NAME \
      cloud.google.com/default-compute-class-non-daemonset-
    
  • כדי להשבית את ComputeClass שמוגדר כברירת מחדל ברמת האשכול, משתמשים בפקודה gcloud container clusters update עם הדגל --no-enable-default-compute-class:

    gcloud container clusters update CLUSTER_NAME \
        --location=CONTROL_PLANE_LOCATION \
        --no-enable-default-compute-class
    

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