このページでは、コンピューティング クラスを明示的に選択していない Google Kubernetes Engine(GKE)Pod にデフォルトでコンピューティング クラスを適用する方法について説明します。このページでは、Namespace とクラスタ全体のデフォルトとしてコンピューティング クラスを設定する手順について説明します。この手順は、個々のワークロードとノード構成によって発生する手動オーバーヘッドを削減したいクラスタ管理者を対象としています。
このページを読む前に、カスタム コンピューティング クラスについて理解しておいてください。
デフォルトのコンピューティング クラスについて
GKE クラスタまたは特定の Namespace にデフォルトのコンピューティング クラスを設定できます。構成したデフォルト クラスは、別のコンピューティング クラスを選択していないクラスタまたは Namespace 内のすべての Pod に適用されます。コンピューティング クラスを選択しない Pod をデプロイすると、GKE は次の順序でデフォルトのコンピューティング クラスを適用します。
- Namespace にデフォルトのコンピューティング クラスがある場合、GKE はそのコンピューティング クラスを選択するように Pod 仕様を変更します。
- Namespace にデフォルトのコンピューティング クラスがない場合、クラスタレベルのデフォルト クラスが適用されます。GKE は Pod 仕様を変更しません。
始める前に
作業を始める前に、次のタスクが完了していることを確認してください。
- Google Kubernetes Engine API を有効にする。 Google Kubernetes Engine API の有効化
- このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、
gcloud components update
を実行して最新のバージョンを取得する。
クラスタレベルまたは Namespace レベルでデフォルトのコンピューティング クラスを設定することをサポートするバージョンを実行する GKE Autopilot クラスタまたは GKE Standard クラスタがある。詳しくは、要件のセクションをご覧ください。
Standard クラスタの場合は、ノードの自動プロビジョニングまたはクラスタ オートスケーラーを有効にします。
カスタム コンピューティング クラスを Namespace のデフォルトとして設定する場合は、カスタム コンピューティング クラスをデプロイします。
要件
- コンピューティング クラスをクラスタレベルのデフォルトとして設定するには、クラスタで GKE バージョン 1.33.1-gke.1744000 以降を実行する必要があります。
- DaemonSet 以外の Pod の Namespace レベルのデフォルトとしてコンピューティング クラスを設定するには、クラスタで GKE バージョン 1.33.1-gke.1788000 以降を実行する必要があります。
必要なロールと権限
クラスタレベルまたは Namespace レベルのデフォルトのコンピューティング クラスを構成するために必要な権限を取得するには、 Google Cloud プロジェクトに対する次の IAM ロールを付与するよう管理者に依頼してください。
-
Kubernetes Engine デベロッパー (
roles/container.developer
) -
クラスタレベルのデフォルトのコンピューティング クラスを更新する: Kubernetes Engine クラスタ管理者 (
roles/container.clusterAdmin
)
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
これらの事前定義ロールには、クラスタレベルまたは Namespace レベルのデフォルトのコンピューティング クラスを構成するために必要な権限が含まれています。必要とされる正確な権限については、「必要な権限」セクションを開いてご確認ください。
必要な権限
クラスタまたは Namespace レベルのデフォルトのコンピューティング クラスを構成するには、次の権限が必要です。
-
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
-
Namespace にラベルを追加します。
container.namespaces.update
-
クラスタレベルのデフォルトのコンピューティング クラスを有効にします。
container.clusters.update
カスタムロールや他の事前定義ロールを使用して、これらの権限を取得することもできます。
Namespace のデフォルトのコンピューティング クラスを構成する
クラスタ内の任意の Kubernetes Namespace に、デフォルトとして使用するコンピューティング クラスの名前をアノテーションできます。その Namespace にデプロイされた Pod がコンピューティング クラスをまだ選択していない場合、GKE は Pod 仕様を変更して、Namespace のデフォルト クラスを選択します。カスタムまたは組み込みのコンピューティング クラスをデフォルトとして設定できます。
デフォルトで Namespace 内のすべての Pod にコンピューティング クラスを適用するには、その Namespace に
cloud.google.com/default-compute-class
ラベルを追加します。kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class=COMPUTECLASS_NAME
次のように置き換えます。
NAMESPACE_NAME
: 更新する Namespace の名前。COMPUTECLASS_NAME
: Namespace のデフォルトとして設定するコンピューティング クラスの名前。
コマンドが次のエラー メッセージで失敗した場合、Namespace にはすでにデフォルトのコンピューティング クラスがあります。
error: 'cloud.google.com/default-compute-class' already has a value, and --overwrite is false
このエラーを解決するには、Namespace のデフォルトのコンピューティング クラスを更新します。
デフォルトで Namespace 内のすべての非 DaemonSet Pod にコンピューティング クラスを適用するには、その Namespace に
cloud.google.com/default-compute-class-non-daemonset
ラベルを追加します。kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class-non-daemonset=COMPUTECLASS_NAME
コマンドが次のエラー メッセージで失敗した場合、Namespace には DaemonSet 以外の Pod のデフォルトのコンピューティング クラスがすでに存在します。
error: 'cloud.google.com/default-compute-class-non-daemonset' already has a value, and --overwrite is false
このエラーを解決するには、Namespace のデフォルトのコンピューティング クラスを更新します。
Namespace の既存のデフォルトのコンピューティング クラスを更新する
Namespace の既存のデフォルトのコンピューティング クラスを上書きするには、次のいずれかのコマンドを実行します。
Namespace 内のすべての Pod のデフォルトのコンピューティング クラスを更新します。
kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class=COMPUTECLASS_NAME \ --overwrite
次のように置き換えます。
NAMESPACE_NAME
: 更新する Namespace の名前。COMPUTECLASS_NAME
: Namespace の新しいデフォルトとして設定するコンピューティング クラスの名前。
Namespace 内の非 DaemonSet Pod のデフォルトのコンピューティング クラスをオーバーライドします。
kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class-non-daemonset=COMPUTECLASS_NAME \ --overwrite
クラスタのデフォルトのコンピューティング クラスを構成する
このセクションでは、コンピューティング クラスをクラスタのデフォルトとして設定する方法について説明します。クラスタレベルのデフォルトのコンピューティング クラスでは、クラスタ内の既存のノードプールのノード taint とノードラベルを手動で指定しないでください。GKE は、コンピューティング クラスのノード taint を持つノードプールをスケーリングしません。default
コンピューティング クラスのラベルを手動で追加すると、GKE はそのノードプールをスケーリングできます。ただし、デフォルトのクラスタレベルのコンピューティング クラスを使用するために、この手動構成は必要ありません。
クラスタのクラスタレベルのデフォルト コンピューティング クラスの設定を有効にするには、
--enable-default-compute-class
フラグを指定してgcloud container clusters update
コマンドを実行します。gcloud container clusters update CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --enable-default-compute-class
次のように置き換えます。
CLUSTER_NAME
: クラスタの名前。CONTROL_PLANE_LOCATION
: クラスタ コントロール プレーンのロケーション(us-central1
など)。
このフラグは、Autopilot クラスタまたは Standard クラスタの作成時に指定することもできます。
次のマニフェストを保存します。このマニフェストは、
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 インスタンスをリクエストします。
default
コンピューティング クラスは、ComputeClass CustomResourceDefinition で使用可能な任意のフィールドを使用して構成できます。マニフェストをクラスタに適用します。
kubectl apply -f PATH_TO_MANIFEST
PATH_TO_MANIFEST
は、コンピューティング クラスのマニフェストのパスに置き換えます。
クラスタレベルのデフォルトのコンピューティング クラスを設定すると、GKE は次の両方の要件を満たすノードプールをスケーリングします。
- ノード構成は、
default
コンピューティング クラスの構成と同じです。 - ノードプールに、別のコンピューティング クラスの taint やラベルがない。GKE は、
default
コンピューティング クラスの taint とラベルを持つノードプールをスケーリングできます。
たとえば、default
コンピューティング クラスで N4 マシンシリーズが指定されている場合、GKE は N4 インスタンスを使用し、別のコンピューティング クラスの taint やラベルがない既存のノードプールをスケーリングできます。
デフォルトのコンピューティング クラスの動作を確認する
Namespace またはクラスタに設定したデフォルトのコンピューティング クラスが想定どおりに機能するかどうかを確認する手順は次のとおりです。
次の 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
は、確認する内容に応じて次のいずれかに置き換えます。- デフォルトのコンピューティング クラスを持つ Namespace の名前。
- デフォルトのコンピューティング クラスがない Namespace の名前。
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
ラベルがない場合があります。 - Namespace レベルのデフォルトのコンピューティング クラス: Namespace のデフォルトとして構成したコンピューティング クラスの名前。
- クラスタレベルのデフォルトのコンピューティング クラス: GKE Autopilot またはノードの自動プロビジョニングによって作成されたノードの
デフォルトのコンピューティング クラスを無効にする
Namespace またはクラスタでデフォルトのコンピューティング クラスを無効にするには、次のいずれかを行います。
すべての Pod で Namespace レベルのデフォルトのコンピューティング クラスを無効にするには、Namespace から
cloud.google.com/default-compute-class
ラベルを削除します。kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class-
ラベルキーの末尾にある
-
文字は、そのキーを持つラベルを Kubernetes API のNamespace
オブジェクトから削除します。非 DaemonSet Pod の Namespace レベルのデフォルトのコンピューティング クラスを無効にするには、Namespace から
cloud.google.com/default-compute-class-non-daemonset
ラベルを削除します。kubectl label namespaces NAMESPACE_NAME \ cloud.google.com/default-compute-class-non-daemonset-
クラスタレベルのデフォルトのコンピューティング クラスを無効にするには、
--no-enable-default-compute-class
フラグを指定してgcloud container clusters update
コマンドを使用します。gcloud container clusters update CLUSTER_NAME \ --location=CONTROL_PLANE_LOCATION \ --no-enable-default-compute-class
次のステップ
- GKE のカスタム コンピューティング クラスの詳細を確認する。