本頁說明如何將運算類別預設套用至未明確選取運算類別的 Google Kubernetes Engine (GKE) Pod。本頁說明如何將運算類別設為命名空間和整個叢集的預設值。這些操作說明適用於叢集管理員,可協助他們減少因個別工作負載和節點設定而造成的手動負擔。
閱讀本頁面之前,請先熟悉自訂運算類別。
關於預設運算級別
您可以將 GKE 叢集或特定命名空間設定為具有預設運算類別。如果您為叢集或命名空間設定預設類別,該叢集或命名空間中未選取其他運算類別的任何 Pod,都會套用預設類別。部署未選取運算子類的 Pod 時,GKE 會依下列順序套用預設運算子類:
- 如果命名空間有預設的運算類別,GKE 會修改 Pod 規格,選取該運算類別。
- 如果命名空間沒有預設運算類別,系統會套用叢集層級的預設類別。GKE 不會修改 Pod 規格。
事前準備
開始之前,請確認您已完成下列工作:
- 啟用 Google Kubernetes Engine API。 啟用 Google Kubernetes Engine API
- 如要使用 Google Cloud CLI 執行這項工作,請安裝並初始化 gcloud CLI。如果您先前已安裝 gcloud CLI,請執行
gcloud components update
,取得最新版本。
擁有 GKE Autopilot 或 Standard 叢集,且執行版本支援在叢集或命名空間層級設定預設運算級別。詳情請參閱「規定」一節。
如要將自訂運算類別設為命名空間的預設值,請部署自訂運算類別。
需求條件
- 如要將運算類別設為叢集層級的預設值,叢集必須執行 GKE 1.33.1-gke.1744000 以上版本。
- 如要將運算類別設為命名空間層級的預設值,且僅適用於非 DaemonSet Pod,叢集必須執行 GKE 1.33.1-gke.1788000 以上版本。
必要角色和權限
如要取得設定叢集或命名空間層級預設運算類別所需的權限,請要求管理員在 Google Cloud 專案中授予您下列 IAM 角色:
-
Kubernetes Engine 開發人員 (
roles/container.developer
) -
更新叢集層級的預設運算類別:
Kubernetes Engine 叢集管理員 (
roles/container.clusterAdmin
)
如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和機構的存取權」。
這些預先定義的角色具備設定叢集或命名空間層級預設運算類別所需的權限。如要查看確切的必要權限,請展開「必要權限」部分:
所需權限
如要設定叢集或命名空間層級的預設運算類別,您必須具備下列權限:
-
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
-
啟用叢集層級的預設運算級別:
container.clusters.update
為命名空間設定預設運算類別
您可以在叢集中使用運算類別名稱,為任何 Kubernetes 命名空間加上註解,做為預設值。如果部署到該命名空間的 Pod 尚未選取運算類別,GKE 會修改 Pod 規格,選取命名空間中的預設類別。您可以將任何自訂或內建的運算類別設為預設值。
如要預設將運算類別套用至命名空間中的所有 Pod,請將
cloud.google.com/default-compute-class
標籤新增至該命名空間:kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class=COMPUTECLASS_NAME
更改下列內容:
NAMESPACE_NAME
:要更新的命名空間名稱。COMPUTECLASS_NAME
:要設為命名空間預設值的運算類別名稱。
如果指令失敗並顯示下列錯誤訊息,表示命名空間已有預設運算類別:
error: 'cloud.google.com/default-compute-class' already has a value, and --overwrite is false
如要解決這個錯誤,請更新命名空間的預設運算類別。
如要預設將運算類別套用至命名空間中的所有非 DaemonSet Pod,請將
cloud.google.com/default-compute-class-non-daemonset
標籤新增至該命名空間:kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class-non-daemonset=COMPUTECLASS_NAME
如果指令失敗並顯示下列錯誤訊息,表示命名空間已為非 DaemonSet Pod 設定預設運算類別:
error: 'cloud.google.com/default-compute-class-non-daemonset' already has a value, and --overwrite is false
如要解決這個錯誤,請更新命名空間的預設運算類別。
更新命名空間中現有的預設運算類別
如要覆寫命名空間的現有預設運算類別,請執行下列其中一個指令:
更新命名空間中所有 Pod 的預設運算類別:
kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class=COMPUTECLASS_NAME \ --overwrite
更改下列內容:
NAMESPACE_NAME
:要更新的命名空間名稱。COMPUTECLASS_NAME
:要設為命名空間新預設值的運算類別名稱。
覆寫命名空間中非 DaemonSet Pod 的預設運算類別:
kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class-non-daemonset=COMPUTECLASS_NAME \ --overwrite
為叢集設定預設運算類別
本節說明如何將運算類別設為叢集的預設值。如果是叢集層級的預設運算類別,請勿為叢集中的現有節點集區手動指定節點汙點和節點標籤。GKE 不會擴充具有節點汙點的節點集區,以用於運算子類別。如果您手動為 default
計算類別新增標籤,GKE 就能擴縮該節點集區。不過,如要使用預設叢集層級的運算類別,則不需要手動設定。
如要為叢集啟用叢集層級的預設運算類別設定,請執行
gcloud container clusters update
指令並加上--enable-default-compute-class
旗標:gcloud container clusters update CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --enable-default-compute-class
更改下列內容:
CLUSTER_NAME
:叢集名稱。CONTROL_PLANE_LOCATION
:叢集控制平面的位置,例如us-central1
。
您也可以在建立 Autopilot 或標準叢集時指定這個標記。
儲存下列資訊清單,其中定義了名為
default
的ComputeClass
:apiVersion: cloud.google.com/v1 kind: ComputeClass metadata: name: default spec: priorities: - machineFamily: n4 - machineFamily: n2 whenUnsatisfiable: ScaleUpAnyway nodePoolAutoCreation: enabled: true
這個資訊清單範例要求使用 N4 執行個體的節點。如果 N4 執行個體無法使用,運算類別會改為要求 N2 執行個體。您可以使用 ComputeClass CustomResourceDefinition 中的任何可用欄位,設定
default
計算類別。將資訊清單套用至叢集:
kubectl apply -f PATH_TO_MANIFEST
將
PATH_TO_MANIFEST
替換為運算類別資訊清單的路徑。
設定叢集層級的預設運算類別後,GKE 會擴充符合下列兩項條件的節點集區:
- 節點設定與
default
運算類別的設定相同。 - 節點集區沒有其他運算類別的汙點或標籤。
GKE 可以擴充具有汙點和標籤的節點集區,適用於
default
計算機類別。
舉例來說,如果 default
計算類別指定 N4 系列機器,GKE 可以調整現有節點集區的資源配置,該集區使用 N4 執行個體,且沒有其他計算類別的汙點或標籤。
驗證預設運算類別行為
如要檢查為命名空間或叢集設定的預設運算類別是否正常運作,請按照下列步驟操作:
請參閱下列 Deployment 範例:
這個 Deployment 並未明確要求運算類別。
建立 Deployment:
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
替換為下列其中一項:- 具有預設運算類別的命名空間名稱。
- 沒有預設運算類別的命名空間名稱。
GKE 可能需要一些時間才能建立新節點來執行 Pod。
找出執行範例 Deployment 中 Pod 的節點:
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>
取得節點標籤:
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
中的值為下列其中一項:- 叢集層級的預設運算類別:適用於由 GKE Autopilot 或節點自動佈建建立的節點。
default
手動建立的現有節點集區中,節點可能沒有cloud.google.com/compute-class
標籤。 - 命名空間層級的預設運算類別:您設定為命名空間預設值的運算類別名稱。
- 叢集層級的預設運算類別:適用於由 GKE Autopilot 或節點自動佈建建立的節點。
停用預設運算級別
如要在命名空間或叢集中停用預設運算類別,請採取下列任一做法:
如要為所有 Pod 停用命名空間層級的預設運算類別,請從命名空間移除
cloud.google.com/default-compute-class
標籤:kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class-
標籤鍵結尾的
-
字元會從 Kubernetes API 的Namespace
物件中移除具有該鍵的所有標籤。如要為非 DaemonSet Pod 停用命名空間層級的預設運算類別,請從命名空間移除
cloud.google.com/default-compute-class-non-daemonset
標籤:kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class-non-daemonset-
如要停用叢集層級的預設運算類別,請使用
gcloud container clusters update
指令並加上--no-enable-default-compute-class
旗標:gcloud container clusters update CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --no-enable-default-compute-class
後續步驟
- 進一步瞭解 GKE 中的自訂運算級別。