はじめに
GKEなりEKSなりフルマネージドk8sサービスを使ってるケースだと、ほぼ間違いなくCluster Autoscalerも活用してると思います。
EKSだとCluster Autoscalerを自分でデプロイする必要があります。結構大変ですね。
https://docs.aws.amazon.com/ja_jp/eks/latest/userguide/cluster-autoscaler.html
ですが、GKEだとCluster Autoscalerの部分までマネージドなので、ものすごく簡単にAutoscalerを設定できます。以下、公式の引用です。
自動スケーリングを使用してクラスタを作成するには、--enable-autoscaling フラグを使用して --min-nodes と --max-nodes を指定します。
このように、オプションをいくつか指定するだけです。Cloud Console経由で作成する場合でもチョンチョンチョンくらいで設定できます。
とても簡単に設定できてよろしいのですが、だからこそCluster Autoscalerの存在を意識せずに運用している人も多いのではないでしょうか?
そもそもGKEのCluster Autoscalerとは何なのか
フルマネージド故に普段意識することはないですが、Cluster Autoscalerの実態はこいつです。
Cluster Autoscalerのログの見方
GKE Cluster Autoscalerのログはstackdriver loggingで見ることができます。
詳しくはここに書いてありますね。
https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-autoscaler-visibility
例えば以下のようなイベントログを見ることができます。
イベント | 説明 |
---|---|
status | 定期的にnodeの状態を取得 |
scaleUp | スケールアップ時に発生 |
scaleDown | スケールダウン時に発生 |
noScaleUp | 何らかの理由でスケールアップできない時に発生 |
GKEにおけるexpanderの動作
expanderとは、「どのような基準でclusterをスケールアップするか」というルールですね。詳しくは以下。
cluster autoscalerそのもののデフォルトとしては、random
というルールが設定されます。文字通りランダムに選択されるというルールですね。
ですがGKEだと、price
というルールが適応されます。これは、選択可能なノードプールの内、最もコストの安いノードプールを拡張させるという物です。
この設定のおかげで、プリエンプティブVMで構成されたノードプールが選択可能な場合は、通常のVMよりもプリエンプティブVMが優先して立ち上がる訳ですね。
ちなみに、GKE以外だとprice
は設定できないようです。
最後に
というわけで、GKEにおけるCluster Autoscalerの裏側?に関して簡単に書きました。ちなみに、一応GKEでも自分で(GKEマネージドでない)Cluster Autoscalerをデプロイして動かすことも可能だと思われます(ちょっと工夫は必要)。