PerfectScalePerfectScale

PerfectScale

Kubernetesアラートでクラスタの健全性とパフォーマンスを守る

このページはEnglish、Deutsch、Español、Français、Italiano、Portuguêsでもご覧いただけます。

By Brendan CooperJun 19, 20244 min read

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アラートのベストプラクティスは何ですか?

主要なパフォーマンス指標に対してアラートを設定することがベストプラクティスのひとつです。