KEDA で Cron を使って replica 数を変更する¶
はじめに¶
KEDA は、Kubernetes Event-driven Autoscaling の略で、Kubernetes 上でイベントをトリガーとしてアプリケーションの自動スケーリングを行うためのコンポーネントです。CPU やメモリの使用率だけでなく、メッセージキューの長さや HTTP リクエスト数などの外部イベントに基づいて Pod の数を 0 から n に自動的に調整できます。
KEDA の特徴¶
KEDA の主な機能は次のとおりです。
- イベントドリブンなスケーリング: メッセージキューの長さや HTTP リクエスト数などの外部イベントをトリガーとして、Pod の数を自動的に調整します。
- ゼロスケール: アプリケーションが非アクティブな場合に、Pod の数を 0 に下げてリソースを節約できます。
- 柔軟なスケーリング条件: Cron ベースのスケーリングや、複数のトリガーを組み合わせた複雑なスケーリング条件を設定できます。
- Kubernetes ネイティブ: Kubernetes の標準コンポーネントである Horizontal Pod Autoscaler(HPA)と連携し、KEDA の機能を拡張できます。
例¶
cron¶
KEDA は、Cron 機能を使用して特定の時間に replica 数を変更できます。この機能を使うことで、利用されない時間帯は replica 数を 0 にして、利用される時間帯は replica 数を増やすことができます。 以下は、KEDA の Cron 機能を使用して、特定の時間に replica 数を変更する例です。
上記の例では、複数の Cron トリガーを使用して、特定の時間帯に replica 数を変更しています。複数のトリガーを設定した際は、レプリカ数が最も大きくなるトリガーが優先されます。上記の例だと、10 時から 12 時までの間は replica 数が 5 になり、それ以外の指定された時間帯 replica 数が 1 になります。指定されていない時間帯は replica 数が 0 になります。
気をつける点として、KEDA 以外で replicas を指定すると ArgoCD と KEDA で replica 数の上書き合戦が発生してしまいます。Deployment や StatefulSet のマニフェストで replicas を指定しないようにするか、ArgoCD で replicas の値を ignore することで解決できます。
その他¶
fallback¶
replica 数を決めるために使っているメトリクスの取得に失敗した場合、fallback として replica 数をどうするか設定できます。
- static (default): Use the specified replicas count
- currentReplicas: Use the current number of replicas
- currentReplicasIfHigher: Use the higher of current or specified replicas
- currentReplicasIfLower: Use the lower of current or specified replicas
status¶
ScaledObject の status を見てみると condition の状態を確認できます。condition には次の 4 つがあります。
Condition Type Description Ready Whether the ScaledObject is configured correctly Active Whether any trigger is currently active Fallback Whether fallback is currently active Paused Whether scaling is currently paused