ポイント: Kubernetesモニタリングは、分散ワークロードを管理し、クラスター内のリソース使用を最適化するために不可欠です。これは、アプリケーションの健康を確保し、運用上の課題に対処するための主要なメトリクスを追跡することを含みます。
- 主要メトリクスには、クラスターとポッドのパフォーマンス指標が含まれます。
- モニタリングのための一般的なツールには、Prometheus、Kubernetesダッシュボード、EFKスタックがあります。
Kubernetes (K8s)におけるモニタリングは、クラスターコンポーネントの健康状態を調査するためのさまざまなツール、メトリクス、および方法論を含みます。このプロセスは、基本的に開発者と管理者が、複雑で分散されたクラスターでワークロードを運用する際に発生する可能性のある問題を確認することを可能にします。クラスター内の接続されたサービスとリソースの膨大な数のため、Kubernetesのモニタリングは特別な注意を要することが多いです。これは、分散クラスターコンポーネントにおける変更の追跡やイベントのログ記録が独自の複雑さを伴うからです。Kubernetesモニタリングのさまざまな側面を探ってみましょう:
Kubernetesモニタリングとは?
Kubernetesは、分散されたコンテナ化されたワークロードを実行することを容易にします。しかし、このモデルは、分散された接続されたコンピュート要素を扱う複雑さも導入します。このような複雑なセットアップでは、モニタリングはアプリケーションのライフサイクル管理に不可欠です。これは、クラスターが稼働しているときに発生する問題をデバッグするのに役立つからです。モニタリングは、クラスター内に単一の障害点が存在しないことを確認するためにすべての重要なコンポーネントをスキャンする実践です。Kubernetesモニタリングの主な理由は以下の通りです:
- チームまたは特定のアプリケーションによってリソースが最適に消費されていることを確認
- 負荷を分散することを、別のノードにホストされているアプリケーションのインスタンス間で行う
- 新しいノードがクラスターに参加したときに自動的に新たに利用可能なリソースを活用
- ホストがダウンしたときにワークロードを他のノードに再デプロイ
- 必要に応じて効率的な更新とロールバックを行う
(モニタリングと可観測性の違いを理解する。)
Kubernetesモニタリングメトリクス
さまざまなメトリクスは、開発者が本番ワークロードが効率的に実行されていることを確認するのに役立ちます。これらのメトリクスは、クラスターの特性からプロファイルを導き出すためにモニタリングツールが利用できるコンテナ、POD、ノード、アプリケーションの重要なイベントです。Kubernetesクラスターを調査する際、パフォーマンスメトリクスは次のようにカテゴリ分けできます:
- クラスターメトリクス
- PODメトリクス
クラスターメトリクス
これらのメトリクスは、開発者がクラスター内のすべてのノードと関連リソースの挙動を調べることを可能にします。このようなメトリクスは、管理者が:
- クラスターが意図した通りに稼働しているかどうかを監視
- アプリケーションのリソースと容量の使用状況をフラグ付け
- 各ノードのワークロードを監視
重要なクラスターレベルメトリクスには以下が含まれます:
- リソースベースのメトリクス。これには、CPU、ディスクおよびメモリ使用量、ネットワーク帯域幅の消費を含む、コンピュートリソースの消費に関するすべてのメトリクスが含まれます。
- ノードベースのメトリクス。ノードの数は、開発者が管理プラットフォーム上でクラスターの運用コストを追跡し、クラスターノードで実行されているワークロードを理解するのに役立ちます。
- PODベースのメトリクス。実行中のPODの数は、開発者が十分なノードがプロビジョニングされていることを確認でき、ノード障害時にクラスターが変化するワークロードに対応できることを保証します。
PODメトリクス
モニタリングツールは、特定のPODの挙動とKubernetesがデプロイメントをどのように処理するかを観察するためにも使用できます。PODメトリクスには3つのタイプがあります:コンテナメトリクス。これらのメトリクスは、メトリクスサーバーによって公開され、cAdvisorというコンテナ中心のサービスを通じて利用可能になります。コンテナメトリクスには:
- コンテナネットワーク使用量
- CPU消費
- ネットワーク帯域幅消費
Kubernetesメトリクス。これらのメトリクスは、デプロイメントがどの程度適切にオーケストレーションされたか、PODの状態を監視します。Kubernetesメトリクスには:
- PODの健康状態
- デプロイメントの進行状況
- ネットワークデータ
- 現在実行中のPODインスタンスの数
アプリケーションメトリクス。これらのメトリクスは、アプリケーションコード内で開発されており、ビジネスケースの要件により適合しています。たとえば、eコマースアプリは、以下のようなメトリクスに関するデータを公開することがあります:
- 現在ログインしているユーザーの数
- 特定の期間内の収益
- 時間あたりのクリック数
データベースアプリケーションは、一方で、集計されているデータに関連するメトリクスを公開することができます。モニタリングの過程で、アプリケーションは通常、これらのメトリクスをKubernetesモニタリングツールにAPIを通じて公開します。
Kubernetesモニタリング方法
Kubernetesクラスターからメトリクスデータを抽出する際の主なアプローチは2つあります:
- DaemonSetsを使用したモニタリング
- メトリクスサーバーを使用したモニタリング
DaemonSetsを使用したモニタリング
DaemonSetは、クラスター内のすべてのノードでワークロードのスナップショットが実行されることを保証する専門のPODです。開発者は、パフォーマンスメトリクスを収集するためにクラスター内のすべてのノードでモニタリングエージェントを実行するDaemonSetを作成できます。プロビジョニングが容易なため、多くのKubernetesモニタリングソリューションは、クラスターのノードでのモニタリングソフトウェアをデプロイするためにDaemonSetアプローチを使用しています。
メトリクスサーバーを使用したモニタリング
以前はHeapsterとして知られていたメトリクスサーバーは、クラスター統計を取得するために設計されたストレージサーバーにパフォーマンスデータを送信します。DaemonSetとは異なり、メトリクスサーバーは通常のPODとして機能し、Kubeletサービスからパフォーマンスデータを収集し、メトリクスAPIを使用してそれらをkube-apiserverに公開します。メトリクスサーバーは非常にスケーラブルであり、1つのデプロイメントで最大5,000ノードのクラスターを監視できると考えられており、大規模ワークロードを持つクラスターに効率的な選択肢です。
人気のK8sモニタリングツール
以下は、人気のK8sモニタリングツールの簡単な概要です。
Prometheus
Prometheusは、Cloud Native Computing Foundationによって管理されるオープンソースのコミュニティ主導のモニタリングツールです。このツールは、時系列データを保存し、カスタムクエリ言語を介して簡単にアクセスでき、その後、組み込みのブラウザプレゼンテーションで表示されます。Prometheusオペレーターを通じて、Kubernetesクラスターにモニタリングツールをプロビジョニングすることは、他の人気ツールと比較して比較的簡単です。
Kubernetesダッシュボード
Kubernetesスタックの一部としてメンテナンスされているこのUIベースのツールは、ワークロードを管理し、実行時のリソース使用状況を確認するための多くの機能を備えています。さまざまなビューを通じて、このツールは、すべてのクラスターのノードにわたって、永続ボリューム要求、ConfigMaps、ワークロードの種類、CPUおよびメモリ使用量など、詳細な洞察を提供します。
Kubewatch
Kubewatchは、開発者にイベントやログを通知するモニタリングエージェントです。開発者がYAMLファイルでリソースを指定できるようにすることで、Kubewatchは、Webhookを介してコラボレーションチャネルとの統合を可能にします。完全なモニタリングツールではなく、Kubewatchは、Kubernetesクラスターの重要なイベントを指定されたチャネルに引き出すイベント通知ツールです。
EFKスタック
EFKは、ツールのスタックで、ElasticSearch、Fluentd、およびKibanaを含み、運用中のKubernetesクラスターのログと重要な洞察を提供します。これらのツールは次のように協力して動作します:
- クラスターのログを収集する (Fluentdを通じて)
- 中央に保存する (ElasticSearch)
- メトリクスを視覚化する (Kibana UI)
このスタックは特に以下の用途に便利です:
- 発生する問題を検出する
- 問題をシンプルなGUIで提示する
K8sモニタリングのベストプラクティス
Kubernetesモニタリングには、特に以下のような課題があります:
- マイクロサービスアーキテクチャ
- エフェメラルコンテナ
- 高スケーリングインスタンス
多くのKubernetesベストプラクティスは、クラスター効率をサポートします。以下は、利用可能なモニタリングソリューションを最大限に活用するためのベストプラクティスです:
- クラスター内のリソースを見逃すことなく、正確なデータを収集できるようにする漏れのない計測戦略を強制すること。
- 隠れた問題を明らかにするために、履歴パフォーマンスデータを含めること。
- チームの生産性とクラスターのパフォーマンスを向上させるために、自動化を可能にするモニタリングをコードとしてデプロイすること。
- カーネルレベルでパフォーマンスの問題を掘り下げること。
- 開発の中心にモニタリングを維持するために、組織全体のモニタリング基準を開発すること。
モニタリングはクラスター効率を促進します
Kubernetes管理の自動化には、集中したアプローチ、専用ツール、および正しい方法論が必要です。効率的なモニタリングメカニズムを提供することにより、組織は:
- クラスター効率を向上させる
- 運用コスト (OpEx) を削減する
- 最適な基準でリソースを積極的に維持する
関連文献
Kubernetesガイド
- Kubernetes (K8s) とは何ですか? Kubernetes基本チュートリアル
- Kubernetesのベストプラクティス:クラスター効率の向上
- ベストプラクティス:Kubernetes用にアプリケーションを設計する方法
- Kubernetes Pods:イントロダクション
- Kubernetes ReplicaSets:簡単な紹介
- Kubernetesデプロイメント完全ガイド
- Kubernetes DaemonSetsの使用と管理
- Kubernetesサービスの仕組み
- Kubernetesのポート、ターゲットポート、ノードポートの使用
- KubernetesでのConfigMapsの作成と使用
- Kubernetesシークレットへのイントロダクション
- Kubernetesネットワーキングの基本
- Kubernetes Ingressの説明
- Kubernetes Helm Chartsへのイントロダクション
- Kubernetesオペレーターパターンとは?
- KubernetesでのステートフルセットとしてのPostgreSQLのデプロイ
- Kubernetesカスタムリソース定義 (CRDs) の説明
- クラウドネイティブアプリケーションのための3つのKubernetesパターン
- Kubernetesコンピュートリソースの説明
- DevOpsパイプラインのためのKubernetesセキュリティ
- 継続的デリバリーのためにKubernetesとSpinnakerを使用する
- Kubernetesマルチクラスター: どのようにそしてなぜそれを使用するのか
- Kubernetesモニタリング: 包括的ガイド
- KubernetesとDocker: 簡単な比較
- KubernetesとDocker Swarm: コンテナオーケストレーションツールの比較
- KubernetesとOpenShift: 違いは何ですか?
- Kubernetes認定: 取得方法と理由
これらの投稿は私自身のものであり、BMCの立場、戦略、または意見を必ずしも表すものではありません。