Kubernetes の効果的な監視
このページでは、Sumo Logic を使用して Kubernetes 環境を効果的に監視するためのインサイトを提供します。Kubernetes アーキテクチャの個々の領域に従って構成されています。
重要な監視領域
Kubernetes の重要な監視領域には、コントロール プレーン、個々のノード、ポッドなどがあります。次の図は、Kubernetes クラスタ アーキテクチャの概要を示しています。
コントロール プレーン
Kubernetes コントロール プレーンは、Kubernetes とクラスタの通信方法を管理します。クラスタの健全性とパフォーマンスの管理では、コントロール プレーンのさまざまな部分が連携します。コントロール プレーンは、API サーバ、etcd、Controller Manager、Scheduler で構成されます。コントロール プレーンの各部分には、クラスタの最適な健全性とパフォーマンスのために監視すべき特定の領域があります。
API サーバ - kube-apiserver
API サーバは、Kubernetes のフロント ドアです。環境に加えた変更はすべて API サーバを介して伝達されます。API サーバは、すべてのリソースを使用してクラスタ内の変更をコミットします。kube-apiserver の場合、以下を監視する必要があります。
- API サーバのレイテンシ
- 1 分あたりのリクエスト数 (RPM)
- etcd のしきい値の問題
etcd
コントロール プレーンの etcd は、Kubernetes がクラスタのすべての望ましい状態を保存するために使用する値ストアです。クラスタの変更が望ましい状態と比較されて、必要な対応が決定されます。etcd の場合、以下を監視する必要があります。
- リーダーの変更
- クォーラム - クォーラム (定足数) が失われると、etcd は読み取り専用状態になるため、API を変更したり、クラスタから新しい状態を取得したりできなくなります。
- ディスク領域 - etcd のバックアップが失われた場合、クラスタ全体のすべての状態が失われることがあります。
Controller Manager
Controller Manager は、継続的にクラスタの実行状態と望ましい状態を比較します。Controller Manager は、API サーバへの変更をすべて監視して、変更がクラスタの望ましい状態と適合しているかどうか確認し、常にクラウド プロバイダに連絡しています。Controller Manager は、すべてのノードが稼働しているかどうかと、十分なポッドがあることをチェックし、クラスタが望ましい状態を維持していることを継続的に反復して確認します。Controller Manager の場合、以下を監視する必要があります。
- エンドツーエンドのスケジュールのレイテンシ
- クラウド プロバイダのレイテンシ
- 失敗したクラウド プロバイダへのリクエスト
Scheduler - kube-scheduler
Scheduler は、ノード上の個々のポッドをスケジュールします。ポッドをスケジュールするために、Scheduler は使用可能なリソースを、リソース リクエスト、個々のノードの可用性、およびスケーリングによってオンラインになる新しいノードと比較します。Scheduler の場合、以下を監視する必要があります。
- スケジュールに失敗したポッド
- リクエスト、クォータ制限、Anti-Affinity
- ビン パッキング - 個々のノードに収まるポッドの数
ノード
ノードは、アプリケーションの配信手段として機能する、Kubernetes クラスタのワーカー マシンです。ノードは、仮想マシン (VM) と物理マシンのどちらにもできます。ノードは基本的にベアボーン サーバです。他のサーバと同様に、各ノードで以下を監視する必要があります。
- CPU
- メモリ消費量
- システム負荷
- ファイル システム アクティビティ
- ネットワーク アクティビティ
各ノードは、クラスタによって管理され、ポッドの実行に必要なサービスが含まれます。ノードのサービスには、kubelet と kube-proxy が含まれます。
Kubelet
kubelet デーモンは、個々のノード上で実行され、ノード上のコンテナの健全性を監視し、コンテナ マネージャを使用して反復します。コンテナ マネージャは、Docker、rkt (ロケットと発音)、Kubernetes でサポートされる他のオープン ソースのコンテナ マネージャのいずれにもできます。
kubelet の場合、それ自体が監視サービスであるコンテナ マネージャを監視する必要があります。
Kube プロキシ - kube-proxy
kube-proxy は、クラスタの各ノード上で稼働するネットワーク プロキシです。kube-proxy は、ノード上のネットワーク ルールを維持して、クラスタ内外のネットワーク セッションからポッドへのネットワーク通信を促進します。kube プロキシの場合、以下を監視する必要があります。
- ネットワーク トラフィックの負荷
- クラスタの DNS
- サービス クラスタの IP およびポート
ポッド
ポッドは特定のノード上に常駐します。コンテナには複数のポッドを含めることができます。ポッドの場合、以下を監視する必要があります。
- 個々のポッドの Scheduler の健全性 - 再起動ループから抜け出せなくなるのを防ぐ
- ポッドの健全性 - 可用性、リソース消費量、パフォーマンス
Kubernetes ログおよびメトリクス
Sumo Logic は、以下のオープン ソース アプリケーションを使用して、Kubernetes 環境のログとメトリクスに関するインサイトを提供します。
- FluentD はオープン ソースの Collector で、Kubernetes クラスタからログを収集して Sumo Logic に転送するために使用されます。これには、クラスタおよびコンテナのオーケストレーション ログや、ポッドのアプリケーションで生成されるログが含まれます。
- Prometheus はオープン ソースの監視ツールで、クラスタ、ノード、およびポッド レベルのデータを提供するメトリクスを収集するために使用されます。
メトリクスで強化された監視
Sumo Logic には、Prometheus 形式のメトリクスをエクスポータから収集する Scraper ユーティリティが用意されています。収集されたメトリクスは、メタデータで強化され、HTTP 経由で Sumo Logic に送信されます。Sumo Logic Kubernetes アプリケーションでは、Prometheus 形式のメトリクスがグラフィック表示のダッシュボードに表示され、直感的な分析が可能です。
Kubernetes のメトリクス提供方法
- エクスポータは、特定のポートとエンドポイントでメトリクスを提供します。
- ノード エクスポータを実行してノード メトリクス (ノードの健全性の監視に使用可能な CPU 使用率やメモリ使用量など) を提供できます。
- Kube State アドオンがクラスタ レベルの状態情報を提供します。