このページでは、カスタム ComputeClass を使用して、ワークロードの特定のニーズに基づいて Google Kubernetes Engine(GKE)クラスタのコンピューティング インフラストラクチャと自動スケーリングの動作を制御する方法について説明します。ここでは、カスタム ComputeClass のコンセプトに精通していることを前提としています。詳細については、カスタム ComputeClass についてをご覧ください。
このページは、ノードの自動スケーリング プロファイルを宣言的に定義するプラットフォーム管理者と、特定の ComputeClass でワークロードを実行するクラスタ オペレーターを対象としています。
カスタム ComputeClass について
カスタム ComputeClass は、ワークロードを実行するノードをプロビジョニングするときに GKE が従う優先度を定義できる Kubernetes のカスタム リソースです。カスタム ComputeClass を使用すると、次のことができます。
- ノードのプロビジョニング時に GKE が適用する優先順位を設定する。各ノードには、Compute Engine マシンシリーズや最小リソース容量などの特定のパラメータが設定されます。
- 未使用のノードを削除し、既存のコンピューティング容量でワークロードを効率的に統合するための自動スケーリングのしきい値とパラメータを定義する。
- ワークロードのパフォーマンスを最適化するために、優先度の低いノード構成を優先度の高いノード構成に自動的に置き換えるように GKE に指示する。
これらの構成オプションと、それらの関係、また GKE Autopilot モードや GKE Standard モードとどのように連携するかについては、カスタム ComputeClass についてをご覧ください。
料金
ComputeClass
カスタム リソースは、GKE で追加料金なしで提供されます。次の料金に関する考慮事項が適用されます。
GKE Autopilot モード: ノードベースの課金モードで課金されます。詳細については、Autopilot モードの料金をご覧ください。
GKE Standard モード: Standard モードの料金をご覧ください。
始める前に
作業を始める前に、次のタスクが完了していることを確認してください。
- Google Kubernetes Engine API を有効にする。 Google Kubernetes Engine API の有効化
- このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、
gcloud components update
を実行して最新のバージョンを取得する。
- バージョン 1.30.3-gke.1451000 以降を実行している既存の GKE クラスタがあることを確認します。詳細については、Autopilot クラスタを作成するをご覧ください。
- Standard モードのクラスタを使用している場合は、自動スケーリングが有効になっているノードプールが少なくとも 1 つあるか、クラスタでノード自動プロビジョニングが使用されていることを確認します。
ComputeClass のシナリオ例
このページでは、カスタム ComputeClass を定義するシナリオの例を示します。実際には、特定のワークロードと組織の要件を考慮し、それらの要件を満たす ComputeClass を定義する必要があります。ComputeClass のオプションの詳細と特別な考慮事項については、カスタム ComputeClass についてをご覧ください。
例として、次のシナリオについて考えてみます。
- ワークロードの実行コストを最適化することを目標としている
- ワークロードがフォールト トレラントで、正常なシャットダウンやランタイムの延長が不要である
- ワークロードを最適に実行するには、少なくとも 64 個の vCPU が必要
- N4 Compute Engine マシンシリーズに限定されている
これらのシナリオに基づいて、次のような ComputeClass を作成するとします。
- 64 個以上の vCPU を持つ N4 Spot ノードを優先的に割り当てる
- コンピューティング容量に関係なく、GKE が任意の N4 Spot ノードにフォールバックできるようにする。
- N4 Spot ノードが使用できない場合は、GKE がオンデマンド N4 ノードを使用できるようにする。
- ワークロードが再び使用可能になったら、Spot ノードに移動するように GKE に指示する。
Autopilot モードで ComputeClass を構成する
GKE Autopilot では、ComputeClass を定義し、クラスタにデプロイして、ワークロードでその ComputeClass をリクエストします。GKE は、ラベルや taint の適用など、ノード構成のステップを自動的に実行します。
次のマニフェストを compute-class.yaml
として保存します。
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: cost-optimized
spec:
priorities:
- machineFamily: n4
spot: true
minCores: 64
- machineFamily: n4
spot: true
- machineFamily: n4
spot: false
activeMigration:
optimizeRulePriority: true
nodePoolAutoCreation:
enabled: true
Standard モードで ComputeClass を構成する
GKE Standard モードのクラスタで ComputeClass を定義した後、ComputeClass の Pod のスケジュールが想定どおりになるように手動での構成が必要になる場合があります。手動構成は、ノードプールが自動的にプロビジョニングされるかどうかによって異なります。
- ノード自動プロビジョニングによって管理されるノードプール: 手動構成は必要ありません。ノード自動プロビジョニングでは、ComputeClass の構成手順が自動的に実行されます。詳細については、ノード自動プロビジョニングと ComputeClass をご覧ください。
- 手動で作成したノードプール: 手動での構成が必要です。手動で作成したノードプールにノードラベルとノード taint を追加し、ノードを特定の ComputeClass に関連付ける必要があります。詳細については、ComputeClass で使用するために手動で作成したノードプールを構成するをご覧ください。
手動で作成したノードプールで ComputeClass を使用する
このセクションでは、手動で作成したノードプールのみを使用するクラスタで ComputeClass を定義する方法について説明します。
次のマニフェストを
compute-class.yaml
として保存します。apiVersion: cloud.google.com/v1 kind: ComputeClass metadata: name: cost-optimized spec: priorities: - machineFamily: n4 spot: true minCores: 64 - machineFamily: n4 spot: true - machineFamily: n4 spot: false activeMigration: optimizeRulePriority: true
Spot VM を使用する新しい自動スケーリング ノードプールを作成し、ComputeClass に関連付けます。
gcloud container node-pools create cost-optimized-pool \ --location=LOCATION \ --cluster=CLUSTER_NAME \ --machine-type=n4-standard-64 \ --spot \ --enable-autoscaling \ --max-nodes=9 \ --node-labels="cloud.google.com/compute-class=cost-optimized" \ --node-taints="cloud.google.com/compute-class=cost-optimized:NoSchedule"
次のように置き換えます。
LOCATION
: クラスタのロケーション。CLUSTER_NAME
: 既存のクラスタの名前。
オンデマンド VM を使用して新しい自動スケーリング ノードプールを作成し、ComputeClass に関連付けます。
gcloud container node-pools create on-demand-pool \ --location=LOCATION \ --cluster=CLUSTER_NAME \ --machine-type=n4-standard-64 \ --enable-autoscaling \ --max-nodes=9 \ --num-nodes=0 \ --node-labels="cloud.google.com/compute-class=cost-optimized" \ --node-taints="cloud.google.com/compute-class=cost-optimized:NoSchedule"
この ComputeClass をリクエストする Pod をデプロイし、新しいノードを作成する必要がある場合、GKE は cost-optimized-pool
ノードプールでのノードの作成を優先します。新しいノードを作成できない場合、GKE は on-demand-pool
ノードプールにノードを作成します。
手動で作成したノードプールがカスタム ComputeClass とどのように連携するかについて詳しくは、ComputeClass の使用のために手動で作成したノードプールを構成するをご覧ください。
自動プロビジョニングされたノードプールで ComputeClass を使用する
このセクションでは、ノード自動プロビジョニングを使用するクラスタで ComputeClass を定義する方法について説明します。
次のマニフェストを compute-class.yaml
として保存します。
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: cost-optimized
spec:
priorities:
- machineFamily: n4
spot: true
minCores: 64
- machineFamily: n4
spot: true
- machineFamily: n4
spot: false
activeMigration:
optimizeRulePriority: true
nodePoolAutoCreation:
enabled: true
この ComputeClass をリクエストする Pod をデプロイし、新しいノードを作成する必要がある場合、GKE は priorities
フィールドの順序項目にあるノードの作成を優先します。必要に応じて、GKE は ComputeClass のハードウェア要件を満たす新しいノードプールを作成します。
優先度で、正確なカスタム マシンタイプを指定することもできます。カスタム マシンタイプを使用するには、GKE バージョン 1.33.2-gke.1111000 以降が必要です。次の例では、n4-custom-8-20480
カスタム マシンタイプで Spot VM を優先し、Spot 容量が使用できない場合は同じタイプのオンデマンド VM にフォールバックする ComputeClass を構成します。
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: custom-machine-type
spec:
priorities:
- machineType: n4-custom-8-20480
spot: true
- machineType: n4-custom-8-20480
spot: false
nodePoolAutoCreation:
enabled: true
カスタム ComputeClass でのノード自動プロビジョニングの仕組みについて詳しくは、ノード自動プロビジョニングと ComputeClass をご覧ください。
ノード統合の自動スケーリングのしきい値をカスタマイズする
デフォルトでは、GKE は使用率の低いノードを削除し、ワークロードを他の使用可能なノードに再スケジュールします。次の例に示すように、ComputeClass 定義の autoscalingPolicy
フィールドを使用して、ノードが削除の候補になるしきい値とタイミングをカスタマイズできます。
apiVersion: cloud.google.com/v1
kind: ComputeClass
metadata:
name: cost-optimized
spec:
priorities:
- machineFamily: n4
spot: true
minCores: 64
- machineFamily: n4
spot: true
- machineFamily: n4
spot: false
activeMigration:
optimizeRulePriority: true
autoscalingPolicy:
consolidationDelayMinutes : 5
consolidationThreshold : 70
この例では、使用可能な CPU とメモリ容量の 70% 未満が 5 分以上使用されていないノードが削除の候補になります。使用可能なパラメータの一覧については、ノード統合の自動スケーリング パラメータを設定するをご覧ください。
クラスタに ComputeClass をデプロイする
ComputeClass を定義したら、クラスタにデプロイします。
kubectl apply -f compute-class.yaml
この ComputeClass は、クラスタで使用できる状態になりました。Pod 仕様で ComputeClass をリクエストできます。必要に応じて、特定の Namespace のデフォルトの ComputeClass として設定することもできます。
ワークロードで ComputeClass をリクエストする
ワークロードで ComputeClass をリクエストするには、マニフェストにその ComputeClass のノードセレクタを追加します。
次のマニフェストを
cc-workload.yaml
として保存します。apiVersion: apps/v1 kind: Deployment metadata: name: custom-workload spec: replicas: 2 selector: matchLabels: app: custom-workload template: metadata: labels: app: custom-workload spec: nodeSelector: cloud.google.com/compute-class: cost-optimized containers: - name: test image: gcr.io/google_containers/pause resources: requests: cpu: 1.5 memory: "4Gi"
ワークロードをデプロイします。
kubectl apply -f cc-workload.yaml
このワークロードをデプロイすると、GKE は、リクエストされた ComputeClass のノード taint に対応する toleration を Pod に自動的に追加します。この toleration により、ComputeClass をリクエストする Pod のみが ComputeClass ノードで実行されます。
デプロイされた ComputeClass を更新する
デプロイされた ComputeClass を更新するには、ComputeClass の YAML マニフェストを変更します。次に、以下のコマンドを実行して変更したマニフェストをデプロイします。
kubectl apply -f PATH_TO_FILE
PATH_TO_FILE
は、変更したマニフェストのパスに置き換えます。name
フィールドの値が変更されていないことを確認します。
更新した ComputeClass をデプロイすると、GKE はその構成を使用して新しいノードを作成します。GKE により既存のノードが更新後の構成で変更されることはありません。
ComputeClass でアクティブな移行が使用されており、既存の Pod が移行の対象である場合、既存の Pod が GKE により更新後の構成を使用するノードに移動されることがあります。