4.9. Cluster Autoscaler について
Cluster Autoscaler は、現行のデプロイメントのニーズに合わせて OpenShift Container Platform クラスターのサイズを調整します。これは、Kubernetes 形式の宣言引数を使用して、特定のクラウドプロバイダーのオブジェクトに依存しないインフラストラクチャー管理を提供します。Cluster Autoscaler には cluster スコープがあり、特定の namespace には関連付けられていません。
Cluster Autoscaler は、リソース不足のために現在のワーカーノードのいずれにもスケジュールできない Pod がある場合や、デプロイメントのニーズを満たすために別のノードが必要な場合に、クラスターのサイズを拡大します。Cluster Autoscaler は、指定される制限を超えてクラスターリソースを拡大することはありません。
Cluster Autoscaler は、コントロールプレーンノードを管理しない場合でも、クラスター内のすべてのノードのメモリー、CPU、および GPU の合計を計算します。これらの値は、単一マシン指向ではありません。これらは、クラスター全体での全リソースの集約です。たとえば、最大メモリーリソースの制限を設定する場合、Cluster Autoscaler は現在のメモリー使用量を計算する際にクラスター内のすべてのノードを含めます。この計算は、Cluster Autoscaler にワーカーリソースを追加する容量があるかどうかを判別するために使用されます。
作成する ClusterAutoscaler リソース定義の maxNodesTotal 値が、クラスター内のマシンの想定される合計数に対応するのに十分な大きさの値であることを確認します。この値は、コントロールプレーンマシンの数とスケーリングする可能性のあるコンピュートマシンの数に対応できる値である必要があります。
4.9.1. 自動ノード削除 リンクのコピーリンクがクリップボードにコピーされました!
クラスターオートスケーラーは 10 秒ごとにクラスター内の不要なノードをチェックし、そのノードを削除します。クラスターオートスケーラーは、次の条件が当てはまる場合に、ノードを削除対象とみなします。
-
ノード使用率が、クラスターの ノード使用率 レベルのしきい値を下回っている。ノード使用率レベルとは、要求されたリソースの合計をノードに割り当てられたリソースで除算したものです。
ClusterAutoscalerカスタムリソースで値が指定されいない場合、クラスターオートスケーラーはデフォルト値の0.5を使用します。これは 50% の使用率に相当します。 - クラスターオートスケーラーが、ノード上で実行されているすべての Pod を他のノードに移動できる。Kubernetes スケジューラーは、ノード上の Pod のスケジュールを担当します。
- クラスターオートスケーラーに、スケールダウンを無効にするアノテーションがない。
ノードに次のタイプの Pod が存在する場合、クラスターオートスケーラーはノードを削除しません。
- 制限のある Pod Disruption Budget を持つ Pod。
- デフォルトでノードで実行されない kube-system Pod。
- PDB を持たないか、制限が厳しい PDB を持つ kube-system Pod。
- デプロイメント、レプリカセット、またはステートフルセットなどのコントローラーオブジェクトによってサポートされない Pod。
- ローカルストレージを持つ Pod。
- リソース不足、互換性のないノードセレクターまたはアフィニティー、アンチアフィニティーの一致などの理由で、他の場所に移動できない Pod。
-
それらに
"cluster-autoscaler.kubernetes.io/safe-to-evict": "true"アノテーションがない場合、"cluster-autoscaler.kubernetes.io/safe-to-evict": "false"アノテーションを持つ Pod。
たとえば、CPU の上限を 64 コアに設定し、それぞれ 8 コアのマシンのみを作成するようにクラスターオートスケーラーを設定したとします。クラスターが 30 コアで起動した場合、クラスターオートスケーラーはさらに最大 4 ノードを追加して 32 コアを増やし、合計 62 コアにすることができます。