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

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

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

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

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

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

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

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

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

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

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

דרישות

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

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

כדי לקבל את ההרשאות שנדרשות להגדרת ברירות המחדל של ComputeClasses ברמת האשכול או מרחב השמות, בקשו מהאדמין להקצות לכם את תפקידי ה-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 החדשים במרחב השמות הזה. השינוי לא משפיע על 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 לפודים שאינם 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. השינוי הזה עוזר למנוע מצבים שבהם Pods שמשתמשים בבורר צמתים לחומרה ספציפית נשארים במצב המתנה, כי ה-ComputeClass שמוגדר כברירת מחדל ברמת האשכול הוחל על ה-Pods האלה.

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

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

    kubectl apply -f PATH_TO_MANIFEST
    

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

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

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

  • הגדרת הצומת זהה להגדרה של default ComputeClass.
  • למאגר הצמתים אין כתמים או תוויות עבור 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.
    • ‫Namespace-level default 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
    

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