クラスタ オートスケーラー

10

このページでは、クラスタを自動でスケーリングする方法について説明します。クラスタ オートスケーラーの仕組みについては、クラスタ オートスケーラーをご覧ください。

クラスタの自動スケーリングでは、ワークロードの需要に基づいて、特定のノードプール内のノード数が変更されます。クラスタにある各ノードプールの minReplicasmaxReplicas の値を指定します。

個々のノードプールでは、minReplicas は 1 以上を指定する必要があります。ただし、未保持のユーザー クラスタノードの合計は、常に 3 以上にする必要があります。つまり、自動スケーリングされたすべてのノードプールの minReplicas 値の合計と、自動スケーリングされていないすべてのノードプールの replicas 値の合計との和を 3 以上にする必要があります。

自動スケーリングを使用してユーザー クラスタを作成する

自動スケーリングを使用してユーザー クラスタを作成するには、ユーザークラスタ構成ファイルnodePools セクションに autoscaling フィールドを追加します。

nodePools:
- name: pool‐1
  …
  replicas: 3
  ...
  autoscaling:
    minReplicas: 1
    maxReplicas: 5

この構成では、3 つのレプリカを持つノードプールを 1 つ作成し、最小ノードプール サイズを 1、最大ノードプール サイズを 5 として自動スケーリングを適用します。

minReplicas の値は 1 以上である必要があります。

自動スケーリングを使用してノードプールを追加する

自動スケーリング対応のノードプールを既存のクラスタに追加するには:

  1. ユーザー クラスタ構成ファイルを編集して新しいノードプールを追加し、autoscaling フィールドを追加します。必要に応じて minReplicasmaxReplicas の値をそれぞれ調整します。
nodePools:
- name: my-new-node-pool
  …
  replicas: 3
  ...
  autoscaling:
    minReplicas: 1
    maxReplicas: 5
  1. gkectl update cluster --config <var class="edit">USER_CLUSTER_CONFIG</var> --kubeconfig <var class="edit">ADMIN_CLUSTER_KUBECONFIG</var> コマンドを実行します。

既存のノードプールの自動スケーリングを有効にする

既存のクラスタ内のノードプールの自動スケーリングを有効にするには:

  1. ユーザー クラスタの構成ファイルの特定の nodePool を編集し、autoscaling フィールドを追加します。必要に応じて minReplicasmaxReplicas の値をそれぞれ調整します。

    nodePools:

    • name: my-existing-node-pool … replicas: 3 ... autoscaling: minReplicas: 1 maxReplicas: 5
  2. gkectl update cluster --config <var class="edit">USER_CLUSTER_CONFIG</var> --kubeconfig <var class="edit">ADMIN_CLUSTER_KUBECONFIG</var> コマンドを実行します。

既存のノードプールの自動スケーリングを無効にする

特定のノードプールの自動スケーリングを無効にするには:

  1. ユーザー クラスタの構成ファイルを編集し、そのノードプールの autoscaling フィールドを削除します。

  2. gkectl update cluster コマンドを実行します。

クラスタ オートスケーラーの動作を確認する

クラスタ オートスケーラーの動作は、いくつかの方法で特定できます。

クラスタ オートスケーラーのログを確認する

まず、クラスタ オートスケーラー Pod の名前を確認します。次のコマンドを実行します。USER_CLUSTER_NAME はユーザー クラスタの名前に置き換えます。

kubectl --kubeconfig ADMIN_CLUSTER_KUBECONFIG get pods -n USER_CLUSTER_NAMEvar> | grep cluster-autoscaler

クラスタ オートスケーラー Pod のログを確認するには、POD_NAME は Pod 名に置き換えます。

kubectl --kubeconfig ADMIN_KUBECONFIG logs cluster-autoscaler-POD_NAME --container cluster-autoscaler ADMIN_KUBECONFIG

構成マップを確認する

クラスタ オートスケーラーは、kube-system/cluster-autoscaler-status 構成マップを公開します。このマップを表示するには、次のコマンドを実行します。

run kubectl --kubeconfig USER_KUBECONFIG get configmap cluster-autoscaler-status -n kube-system -o yaml

クラスタの自動スケーリング イベントを確認する。

クラスタの自動スケーリング イベントを確認できます。

  • Pod(特に、スケジュールできない Pod、十分に活用されていないノード)
  • ノード
  • kube-system/cluster-autoscaler-status 構成マップ。

トラブルシューティング

クラスタ オートスケーラーの以下のトラブルシューティング情報をご覧ください。

  • クラスタ オートスケーラーの制限のいずれかが発生している可能性があります。
  • クラスタのダウンスケーリングに問題がある場合は、Pod のスケジューリングと停止をご覧ください。kube-system Pod に PodDisruptionBudget を追加する必要が生じることがあります。kube-system Pod に PodDisruptionBudget を手動で追加する方法の詳細については、Kubernetes クラスタ オートスケーラーに関するよくある質問をご覧ください。
  • スケールダウンする場合、クラスタ オートスケーラーは、Pod に設定されているスケジューリング ルールとエビクション ルールを考慮します。この制限により、オートスケーラーによってノードが削除されるのを防ぐことができます。次のいずれかの条件を持つ Pod が含まれていると、ノードの削除を防ぐことができます。
    • Pod のアフィニティまたは反アフィニティ ルールにより、再スケジューリングが防止される。
    • Pod にローカル ストレージがある。
    • Pod が、Deployment、StatefulSet、Job、ReplicaSet などのコントローラによって管理されていない。

クラスタ オートスケーラーの詳細と停止を防ぐ方法については、Kubernetes クラスタ オートスケーラーに関するよくある質問で、以下の項目をご覧ください。