Kubernetesのアラートを設定しておけば、レジリエンス指標の変化をいち早く検知し、システムに影響が及ぶ前に問題を取り除けます。
ここでは、Kubernetesクラスタに設定しておきたい特に重要な10のアラートをご紹介します。これらはすべてPerfectScaleのKubernetes監視プラットフォームに含まれており、PerfectScaleなら検出されたリスクをリアルタイムで通知として受け取れます。
PerfectScaleは、システムの異常な挙動をタイムリーかつ確実にアラートでお知らせします。
レジリエンス指標
OOM
Out-of-Memory(OOM)イベントは、通常次のような状況で発生します。
- Podのメモリリミットが低すぎる場合。Podのメモリ使用量が定義されたリミットに達すると、イベントが発生します。
- ノードがメモリ逼迫の状態にあり、一部のPodを退避(evict)しようとする場合。公式ドキュメント
CPU Throttling
CPUスロットリングは、Podが定義されたCPUリミットに達したときに発生し、アプリケーションの応答に遅延を引き起こすおそれがあります。
Kubernetesはリミットの実装にCFSのクォータ機構を利用しています。このクォータは利用可能なCPUパワーではなく、時間の周期に基づいています。周期の定義には
cfs_period_usが使われ、常に100000us(100ms)です。たとえば、1コアのリミットが設定されたコンテナは、消費しているCPUコア数にかかわらず、2コアのノードでは50ms後に、4コアのノードでは25ms後にスロットリングされます。
RestartsObserved
再起動が頻発している場合、目標とするSLAを損なう可能性の高い問題が潜んでいるサインです。
Eviction
Evictionとは、実行中のPodをノードから強制的に終了・削除することを指します。Evictionイベントは通常、ノードのメモリまたはCPUの逼迫が原因で発生します。
Evictionが検出されると、即座にアラートが発生し、ユーザーに通知されます。SlackやMS Teamsのチャンネルでタイムリーに通知を受け取るには、インテグレーションプロファイルを設定し、クラスタに割り当てておいてください。
HPAAtMaxReplicasObserved
サービスやアプリケーションへの需要が増加すると、HPAはレプリカを動的に追加してシステムをスケールし、増加した負荷に対応します。設定されたレプリカ数の上限に達すると、PerfectScaleはHPAAtMaxReplicasObservedの指標を発報します。これは、現在の設定ではシステムがこれ以上スケールできないことを意味します。
この指標の重大度は、ワークロードが最大レプリカ数で稼働している時間の長さによって変わります。たとえば、最大レプリカ数での稼働時間が長いほど、重大度は高くなります。
Limit/Request未設定の指標
CpuRequestNotSet
適切な CPU requests を設定することで、Kubernetesスケジューラが各コンテナに適切な量のCPUを割り当てられるようになり、クラスタのノード容量が需要を満たすようになります。
MemRequestNotSet
適切な MEMORY requests を設定することで、Kubernetesスケジューラが各コンテナに適切な量のメモリを割り当てられるようになり、クラスタのノード容量が需要を満たすようになります。
MemLimitNotSet
適切な MEMORY limit を設定することで、ワーカーノードをOOMから保護し、メモリの過剰割り当てのリスクを防げます。
圧縮可能なCPU(100msごとに新しいサイクルが始まる)とは異なり、メモリは圧縮不可能なリソースであり、過剰に割り当てることはできません。
プロビジョニング不足の指標
UnderProvisionedCpuRequest
適切な CPU requests を設定することで、Kubernetesスケジューラが各コンテナに適切な量のCPUを割り当てられるようになり、クラスタのノード容量が需要を満たすようになります。
UnderProvisionedMemRequest
適切な MEMORY requests を設定することで、Kubernetesスケジューラが各コンテナに適切な量のメモリを割り当てられるようになり、クラスタのノード容量が需要を満たすようになります。
UnderProvisionedMemLimit
適切な MEMORY limit を設定することで、ワーカーノードをOOMから保護し、メモリの過剰割り当てのリスクを防げます。一方で、MEMORY limit が不足していると、Podレベルで意図しないOOMイベントが発生し、目標とするSLAを損なうおそれがあります。
無駄(Waste)の指標
OverProvisionedCpuRequest
適切な CPU requests を設定することで、Kubernetesスケジューラが各コンテナに適切な量のCPUを割り当てられるようになり、クラスタのノード容量が需要を満たすようになります。CPUリクエストが過剰にプロビジョニングされている場合、割り当てられたまま活用されないクラウドリソースが無駄になってしまいます。
OverProvisionedMemoryRequest
適切な MEMORY requests を設定することで、Kubernetesスケジューラが各コンテナに適切な量のメモリを割り当てられるようになり、クラスタのノード容量が需要を満たすようになります。しかし、メモリリクエストが過剰にプロビジョニングされていると、割り当てられたまま一度も使われないクラウドリソースが無駄になります。
FAQ
1. Kubernetesアラートとは何ですか?
Kubernetesアラートは、クラスタ内の潜在的な問題をユーザーに通知する仕組みです。
2. Kubernetesでアラートを設定するにはどうすればよいですか?
PerfectScaleのような監視ツールを使ってアラートを設定できます。
3. Kubernetesアラートのメリットは何ですか?
アラートにより、安定した運用と迅速な問題解決を実現できます。
4. Kubernetesでアラートルールをカスタマイズするにはどうすればよいですか?
特定のメトリクスに基づいてルールを定義・設定できます。
5. Kubernetesアラートのベストプラクティスは何ですか?
主要なパフォーマンス指標に対してアラートを設定することがベストプラクティスのひとつです。