このページでは、クラスタを自動でスケーリングする方法について説明します。クラスタ オートスケーラーの仕組みについては、クラスタ オートスケーラーをご覧ください。
クラスタの自動スケーリングでは、ワークロードの需要に基づいて、特定のノードプール内のノード数が変更されます。クラスタにある各ノードプールの minReplicas
と maxReplicas
の値を指定します。
個々のノードプールでは、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 以上である必要があります。
自動スケーリングを使用してノードプールを追加する
自動スケーリング対応のノードプールを既存のクラスタに追加するには:
- ユーザー クラスタ構成ファイルを編集して新しいノードプールを追加し、
autoscaling
フィールドを追加します。必要に応じてminReplicas
とmaxReplicas
の値をそれぞれ調整します。
nodePools: - name: my-new-node-pool … replicas: 3 ... autoscaling: minReplicas: 1 maxReplicas: 5
gkectl update cluster --config <var class="edit">USER_CLUSTER_CONFIG</var> --kubeconfig <var class="edit">ADMIN_CLUSTER_KUBECONFIG</var>
コマンドを実行します。
既存のノードプールの自動スケーリングを有効にする
既存のクラスタ内のノードプールの自動スケーリングを有効にするには:
ユーザー クラスタの構成ファイルの特定の
nodePool
を編集し、autoscaling
フィールドを追加します。必要に応じてminReplicas
とmaxReplicas
の値をそれぞれ調整します。nodePools:
- name: my-existing-node-pool … replicas: 3 ... autoscaling: minReplicas: 1 maxReplicas: 5
gkectl update cluster --config <var class="edit">USER_CLUSTER_CONFIG</var> --kubeconfig <var class="edit">ADMIN_CLUSTER_KUBECONFIG</var>
コマンドを実行します。
既存のノードプールの自動スケーリングを無効にする
特定のノードプールの自動スケーリングを無効にするには:
ユーザー クラスタの構成ファイルを編集し、そのノードプールの
autoscaling
フィールドを削除します。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 クラスタ オートスケーラーに関するよくある質問で、以下の項目をご覧ください。
- スケールダウンの仕組み
- スケールダウン時にクラスタ オートスケーラーは PodDisruptionBudget と連携しますか?
- クラスタ オートスケーラーによるノードの削除を防ぐポッドの種類はありますか?