EKS上のCluster Autoscalerの挙動
学習のアウトプットの場としてブログに戻ってきてみました。 最近K8sに入門したので、その辺りを中心に自分まとめのようなものを挙げてみます。
今回は主にEKS上のCluster AutoscalerとEC2 AutoScaling Groupについての整理です。
(誤りや改善点があればご指摘いただけると幸いです)
そもそもCluster Autoscalerとは
- Cluster Autoscalerはノードをオートスケールするコンポーネント
- クラスタ自体のオートスケーリング。ノードを自動的に追加する機能
- スケジュール不可能な(=pending) podの検出をトリガーに、スケジュールに最適なノードグループを決定してスケールアウトする
- デフォルトでは10分以上、そのノードで動く全podの合算の要求リソース(request)が、ノードの割り当て可能なリソースの50%以下であり、かつ全podが他のノードに安全に移動可能で、スケールインを妨げる他の要因(PDBやアノテーションなど)がない場合、スケールインされる
- Cluster Autoscalerの状態は、
cluster-autscaler-status
configmapで確認できる
EKS上のCluster AutoscalerとEC2 AutoScaling Group
- EKSでは、ノードグループがノードの作成、管理を行う
- このノードグループはEC2 AutoScaling Groupとして実装される。ノードグループを新規で定義すると、自動的にEC2 AutoScaling Groupとして追加される
- EC2 AutoScaling Groupは、Capacityに基づきノードを増減させる
- Cluster AutoscalerをEKSにデプロイすることで、クラスタのresource使用状況を踏まえて、EC2 AutoScaling Groupの、Minimum CapacityとMaximum Capacityを尊重しながら、Desired Capacityの調整を自動化できる。(また、どのノードグループを採用するかも決定する)
- そのためノードの増減を行う実態は、EC2 AutoScaling Groupとなる
- オートスケーリングの判断や、適切なノードグループの選択は、Cluster Autoscalerが行う