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

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

כדאי שתכירו את המאפיין ComputeClasses בהתאמה אישית.

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

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

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

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

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

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

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

  • מפעילים את ממשק ה-API של Google Kubernetes Engine.
  • הפעלת 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 ואילך.

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

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

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

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

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

כדי להשתמש נכון ב-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:

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

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

  3. מחילים את המניפסט על האשכול:

    kubectl apply -f PATH_TO_MANIFEST
    

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

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

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

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

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

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