第3章 クラスターの自動スケーリング
OpenShift Dedicated に自動スケーリングを適用するには、クラスターオートスケーラーを設定してから、クラスター内の少なくとも 1 つのマシンプールに対してマシンオートスケーラーを設定する必要があります。
Cluster Autoscaler は、マシン API が機能しているクラスターでのみ設定できます。
Cluster Autoscaler はクラスターごとに 1 つだけ作成できます。
3.1. Cluster Autoscaler について リンクのコピーリンクがクリップボードにコピーされました!
Cluster Autoscaler は、現行のデプロイメントのニーズに合わせて OpenShift Dedicated クラスターのサイズを調整します。これは、Kubernetes 形式の宣言引数を使用して、特定のクラウドプロバイダーのオブジェクトに依存しないインフラストラクチャー管理を提供します。Cluster Autoscaler には cluster スコープがあり、特定の namespace には関連付けられていません。
Cluster Autoscaler は、リソース不足のために現在のワーカーノードのいずれにもスケジュールできない Pod がある場合や、デプロイメントのニーズを満たすために別のノードが必要な場合に、クラスターのサイズを拡大します。Cluster Autoscaler は、指定の制限を超えてクラスターリソースを拡大することはありません。
Cluster Autoscaler は、コントロールプレーンノードを管理しない場合でも、クラスター内のすべてのノードのメモリー、CPU の合計を計算します。これらの値は、単一マシン指向ではありません。これらは、クラスター全体での全リソースの集約です。たとえば、最大メモリーリソースの制限を設定する場合、Cluster Autoscaler は現在のメモリー使用量を計算する際にクラスター内のすべてのノードを含めます。この計算は、Cluster Autoscaler にワーカーリソースを追加する容量があるかどうかを判別するために使用されます。
作成する ClusterAutoscaler
リソース定義の maxNodesTotal
値が、クラスター内のマシンの想定される合計数に対応するのに十分な大きさの値であることを確認します。この値は、コントロールプレーンマシンの数とスケーリングする可能性のあるコンピュートマシンの数に対応できる値である必要があります。
自動ノード削除
クラスターオートスケーラーは 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 コアにすることができます。
制限事項
クラスターオートスケーラーを設定する場合は、使用に関する追加の制限が適用されます。
- 自動スケーリングされたノードグループにあるノードを直接変更しないようにしてください。同じノードグループ内のすべてのノードには同じ容量およびラベルがあり、同じシステム Pod を実行します。
- Pod の要求を指定します。
- Pod がすぐに削除されるのを防ぐ必要がある場合、適切な PDB を設定します。
- クラウドプロバイダーのクォータが、設定する最大のノードプールに対応できる十分な大きさであることを確認します。
- クラウドプロバイダーで提供されるものなどの、追加のノードグループの Autoscaler を実行しないようにしてください。
クラスターオートスケーラーが自動スケーリング対象のノードグループにノードを追加するのは、その追加によって Pod がスケジュール可能になる場合に限られます。利用可能なノードタイプが Pod 要求の要件を満たすことができない場合、またはその要件を満たすことができるノードグループが最大サイズに達している場合、クラスターオートスケーラーはスケールアップできません。
他のスケジュール機能との連携
Horizontal Pod Autoscaler (HPA) とクラスターオートスケーラーは、異なる方法でクラスターリソースを変更します。HPA は、現在の CPU 負荷に基づいてデプロイメント、またはレプリカセットのレプリカ数を変更します。負荷が増大すると、HPA はクラスターで利用できるリソース量に関係なく、新規レプリカを作成します。リソースが不足している場合、クラスターオートスケーラーは、HPA によって作成された Pod が実行できるようにリソースを追加します。負荷が減少する場合、HPA は一部のレプリカを停止します。この動作によってノードの使用率が低下するか、ノードが完全に空になった場合、クラスターオートスケーラーは不要なノードを削除します。
クラスターオートスケーラーは Pod の優先度を考慮します。Pod の優先度とプリエンプション機能を使用すると、クラスターに十分なリソースがない場合に優先度に基づいて Pod をスケジュールできますが、クラスターオートスケーラーにより、クラスターにすべての Pod を実行するためのリソースが確保されます。両方の機能の意図を反映するために、クラスターオートスケーラーには、優先度のカットオフ機能が搭載されています。このカットオフ機能を使用すると、"ベストエフォート" の Pod をスケジュールできます。この Pod は、クラスターオートスケーラーによるリソースの増加を引き起こすことなく、予備のリソースが利用可能な場合にのみ実行されます。
カットオフ値よりも低い優先度を持つ Pod は、クラスターのスケールアップを引き起さず、クラスターのスケールダウンを妨げることもありません。これらの Pod を実行するために新規ノードは追加されず、これらの Pod を実行しているノードはリソースを解放するために削除される可能性があります。