クラスタ管理者とアプリケーション オペレーターは、Standard モードのクラスタで、Google Kubernetes Engine(GKE)Autopilot のメリット(料金や事前構成された設定など)を利用できます。このページでは、ComputeClasses を使用して Standard クラスタに Autopilot ワークロードをデプロイする方法について説明します。次のコンセプトに精通している必要があります。
Autopilot ComputeClass について
GKE は、他の Kubernetes リソースと同様にクラスタにデプロイできる ComputeClasses という名前の Kubernetes カスタム リソースを提供します。ComputeClass は、マシンタイプや Spot VM などのノード構成のリストを定義します。ワークロードで ComputeClass を選択すると、新しいノードがリスト内の構成のいずれかを使用するように GKE に指示されます。
ワークロードが autopilot
フィールドが有効になっている ComputeClass を選択すると、GKE は Pod を Autopilot モードで実行します。GKE が作成するノードは Google によって管理され、デフォルトの Autopilot 機能とセキュリティ設定の多くが含まれています。Standard クラスタで Autopilot ワークロードを実行する場合の影響(ワークロードのデプロイ時に発生する可能性のある違いなど)については、GKE Standard での Autopilot モードのワークロードについてをご覧ください。
Autopilot ComputeClass のタイプ
GKE には、ほとんどの汎用ワークロードで使用できる組み込みの Autopilot ComputeClass が用意されています。Autopilot モードを使用するように、新しいカスタム ComputeClass または既存のカスタム ComputeClass を構成することもできます。使用する Autopilot ComputeClass のタイプは、ワークロードに特定のハードウェアが必要かどうかによって次のように異なります。
- 汎用ワークロード: 組み込みの Autopilot ComputeClass のいずれかを使用します。これにより、Pod がコンテナ最適化コンピューティング プラットフォームに配置されます。
- 特定のハードウェアを必要とするワークロード: カスタム ComputeClass の Autopilot モードを有効にし、その ComputeClass をクラスタにデプロイして、ワークロードでその ComputeClass を選択します。
これらのオプション、使用するタイミング、各オプションの料金の詳細については、Autopilot ComputeClasses でのハードウェアの選択をご覧ください。
料金
GKE Autopilot の料金は、Autopilot ComputeClass を使用するワークロードとノードに適用されます。適用される料金モデルは、組み込みの Autopilot ComputeClass を使用するか、カスタムの Autopilot ComputeClass を使用するかによって異なります。詳細については、「GKE Standard での Autopilot モードのワークロードについて」の料金をご覧ください。
始める前に
作業を始める前に、次のタスクが完了していることを確認してください。
- Google Kubernetes Engine API を有効にする。 Google Kubernetes Engine API の有効化
- このタスクに Google Cloud CLI を使用する場合は、gcloud CLI をインストールして初期化する。すでに gcloud CLI をインストールしている場合は、
gcloud components update
を実行して最新のバージョンを取得する。
- バージョン 1.33.1-gke.1107000 以降を実行し、Rapid リリース チャンネルに登録されている GKE Standard クラスタを使用します。新しいクラスタを作成するには、リージョン クラスタの作成をご覧ください。
- ワークロードが拒否されないように、Autopilot の要件とセキュリティ制約について学習します。詳細については、Autopilot ノードの事前定義された設定をご覧ください。
要件
クラスタ内の少なくとも 1 つのノードプールにノード taint がない必要があります。
このノードプールは、GKE がノードに追加する taint が原因で Standard クラスタの Autopilot ノードで実行できない GKE Standard システム Pod を実行するために必要です。
シールドされた GKE ノードは必須で、デフォルトで有効になっています。
VPC ネイティブ クラスタを使用する必要があります。
制限事項
- Rapid リリース チャンネルのみがサポートされています。
- クラスタ内の既存の
ComputeClass
リソースを更新して Autopilot モードを使用するには、更新された仕様で ComputeClass を再作成する必要があります。詳細については、既存のカスタム ComputeClass で Autopilot を有効にするをご覧ください。 - 独自の ComputeClass で
podFamily
優先度ルールを使用することはできません。このルールは、組み込みの Autopilot ComputeClass でのみ使用できます。 - 組み込みの Autopilot ComputeClass では、クラスタ全体で Confidential GKE Node を有効にすることはできません。クラスタで Confidential GKE Node を有効にすると、組み込みの Autopilot ComputeClass を選択する新しい Pod は、
Pending
状態のままになります。
必要なロールと権限
ComputeClass をデプロイするために必要な権限を取得するには、クラスタまたはプロジェクトに対する Kubernetes Engine デベロッパー (roles/container.developer
)IAM ロールを付与するよう管理者に依頼してください。ロールの付与については、プロジェクト、フォルダ、組織に対するアクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
ワークロードで Autopilot ComputeClass を選択する
ワークロードで Autopilot ComputeClass を選択するには、cloud.google.com/compute-class
ラベルのノードセレクタを使用します。これは、GKE で他の ComputeClass を選択するために使用するラベルと同じです。次の手順では、ComputeClass を選択する Deployment の例を作成し、Pod が Autopilot モードで実行されていることを確認する方法を示します。
次の Deployment の例を
autopilot-cc-deployment.yaml
として保存します。COMPUTE_CLASS
は、使用するコンピューティング クラスの名前に置き換えます。この値は、次のいずれかになります。次のいずれかの組み込み Autopilot ComputeClass。汎用ワークロードを Autopilot コンテナ最適化コンピューティング プラットフォームに配置します。
autopilot
autopilot-spot
作成した ComputeClass(カスタム Autopilot ComputeClass を構成するセクションの
autopilot-n2-class
ComputeClass など)。
ワークロードをデプロイします。
kubectl apply -f autopilot-cc-deployment.yaml
Pod が Autopilot を使用していることを確認するには、ホストノードの名前を確認します。
kubectl get pods -l=app=hello -o wide
出力は次のようになります。
NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES helloweb-79b9f6f75-5wwc9 1/1 Running 0 152m 10.102.1.135 gk3-cluster-1-nap-10abc8ya1-f66c6cef-wg5g <none> <none> helloweb-79b9f6f75-9skb9 1/1 Running 0 4d3h 10.102.0.140 gk3-cluster-1-nap-10abc8ya1-632bac02-hjl6 <none> <none> helloweb-79b9f6f75-h7bdv 1/1 Running 0 152m 10.102.1.137 gk3-cluster-1-nap-10abc8ya1-f66c6cef-wg5g <none> <none>
この出力では、[ノード] 列の
gk3-
接頭辞は、ノードが Autopilot によって管理されていることを示します。
カスタム Autopilot ComputeClass を構成する
Autopilot を使用するようにカスタム ComputeClass を構成できます。ワークロードで GPU や特定の Compute Engine マシンシリーズなど、最適な実行に特定のハードウェアが必要な場合は、カスタム Autopilot ComputeClass を使用します。
ワークロードに特定のハードウェアが必要ない場合は、組み込みの Autopilot ComputeClass のいずれかを使用することをおすすめします。組み込みの Autopilot ComputeClass を選択するには、前のワークロードで Autopilot ComputeClass を選択するセクションをご覧ください。
新しいカスタム Autopilot ComputeClass を作成する
次の ComputeClass マニフェストの例を
autopilot-n2-class.yaml
として保存します。apiVersion: cloud.google.com/v1 kind: ComputeClass metadata: name: autopilot-n2-class spec: autopilot: enabled: true priorities: - machineFamily: n2 spot: true minCores: 64 - machineFamily: n2 spot: true - machineFamily: n2 spot: false activeMigration: optimizeRulePriority: true whenUnsatisfiable: DoNotScaleUp
このマニフェストには次のフィールドがあります。
autopilot
: ComputeClass の Autopilot モードを有効にします。Autopilot クラスタにデプロイする ComputeClass でこのフィールドを指定すると、GKE はこのフィールドを無視します。priorities
: 3 つの異なる N2 マシン ファミリー構成の配列を定義します。activeMigration
: リソースが使用可能になったときに、GKE が Pod を優先度の高い構成に移行できるようにします。whenUnsatisfiable
: このフィールドのDoNotScaleUp
の値により、GKE は新しいノードにpriorities
フィールドのルールのいずれかを必ず使用します。これらの優先度ルールのいずれも満たされない場合、GKE はリソースが使用可能になるまで Pod をPending
状態のままにします。DoNotScaleUp
は、このフィールドのデフォルト値であり、推奨値です。
ComputeClass をデプロイします。
kubectl apply -f autopilot-n2-class.yaml
ComputeClass が存在することを確認します。
kubectl get computeclasses
出力は次のようになります。
NAME AGE autopilot-n2-class 3s
既存のカスタム ComputeClass で Autopilot を有効にする
Standard クラスタにあり、仕様の nodePoolAutoCreation.enabled
フィールドが true
に設定されている既存のカスタム ComputeClass で Autopilot を有効にできます。Autopilot クラスタ内のコンピューティング クラスで Autopilot を有効にしても、クラスタ全体で Autopilot モードが使用されるため、効果はありません。
既存の ComputeClass で Autopilot を有効にすると、GKE は Autopilot を使用して、ComputeClass を選択する新しい Pod を実行します。Autopilot ComputeClass を選択する Standard ノードに既存の Pod がある場合、これらの Pod は再作成された場合にのみ Autopilot を使用します。
既存のカスタム ComputeClass を更新して Autopilot モードを使用するには、次の操作を行います。
テキスト エディタで、既存の ComputeClass のマニフェスト ファイルを更新して、
spec.autopilot
フィールドを追加します。spec: autopilot: enabled: true
Kubernetes API の既存の
ComputeClass
リソースを更新された仕様に置き換えます。kubectl replace --force -f PATH_TO_UPDATED_MANIFEST
PATH_TO_UPDATED_MANIFEST
は、更新されたマニフェスト ファイルのパスに置き換えます。新しいノードの作成をトリガーするには、コンピューティング クラスを使用するワークロードを再作成します。
更新されたマニフェストを適用すると、GKE がこの ComputeClass 用に作成する新しいノードはすべて Autopilot を使用します。GKE は、更新前に作成された既存のノードを変更しません。
ワークロードで Autopilot が使用されていることを確認する
kubectl get
コマンドを使用して、クラスタ内の Pod のリストを取得します。kubectl get pods --output=custom-columns=Pod:.metadata.name,Node:.spec.nodeName
出力は次のようになります。
Pod Node helloweb-84c865764b-nzhxt gk3-cluster-1-pool-3-68fc8dca-t54b # lines omitted for clarity
ノード名の
gk3-
接頭辞は、Pod が Autopilot モードで実行されていることを示します。
デフォルトで Autopilot ComputeClass を適用する
GKE では、ComputeClass を Namespace のデフォルトとして設定できます。Namespace のデフォルト クラスは、別の ComputeClass を明示的に選択していないその Namespace 内のすべての Pod に適用されます。Autopilot ComputeClass をデフォルトとして設定すると、ワークロードが別のオプションを選択しない限り、Namespace 内のすべての Pod をデフォルトで Autopilot モードで実行できます。
詳細については、Namespace のデフォルトの ComputeClass を構成するをご覧ください。
次のステップ
- ComputeClass で指定できるパラメータについては、ComputeClass CustomResourceDefinition をご覧ください。