Kubernetes監視とは、Kubernetesクラスター内で実行されているコンテナ化されたアプリケーションの健全性、パフォーマンス、コスト特性に関連するデータを収集して分析するプロセスを指します。
「k8s」や「kube」としても知られるKubernetesは、コンテナ化されたアプリケーションの導入、管理、スケーリングをスケジュール設定および自動化するためのコンテナ・オーケストレーション・プラットフォームです。元はGoogleによって設計されたこのプロジェクトは、現在はCloud Native Computing Foundation(CNCF)によって管理されています。
Kubernetesクラスターを監視することで、管理者とユーザーはアップタイム、クラスター・リソースの使用状況、クラスター・コンポーネント間の相互作用などを追跡できます。監視は、リソース不足、障害、起動できないポッド、クラスターに参加できないノードなどの問題を迅速に特定するのに役立ちます。
クラウドネイティブマイクロサービスとして配信されるKubernetes上のアプリケーションでは、相互に通信するコンポーネントが桁違いに多くなります。複数のインスタンス、さらにはロケーションに分散された最新のアーキテクチャは、モニタリング、アラート、トラブルシューティングといった日々のタスクに新たな複雑さを加えている。
また、コンテナの一時的な性質により、トラブルシューティングの作業が妨げられる可能性があります。コンテナは通常、内部で実行されているプロセス限り存在し、そのプロセスがなくなると消えます。これは、コンテナのトラブルシューティングにおいて最も難しい部分の1つです。コンテナが廃止されたり、代替ノードにスケジュール変更されたりすると、インシデント対応に必要な詳細情報が存在しなくなる可能性があります。
Kubernetesには、クラスターを監視し、実行中のポッドに基づいてアラートを送信するクラスター・オペレーターが組み込まれていますが、オープンソースのツールやサード・パーティー製の監視ソリューションは、Kubernetes環境の完全な可視化を実現するのに役立ちます。
適切なKubernetes監視には、アプリケーション・パフォーマンスの安定性と応答性の維持から、セキュリティーとコンプライアンスの強化まで、さまざまなメリットがあります。
CPU消費量、メモリー使用量、ネットワーク・トラフィック、応答時間などのメトリクスを追跡して分析することで、非効率な領域を特定し、リソース割り当てを最適化し、Kubernetesインフラストラクチャーを微調整して最適なパフォーマンスを得ることができます。
これにより、アプリケーションの応答性が向上し、ユーザー・エクスペリエンス体験が向上します。
CPU使用率、メモリー消費量、ネットワーク・トラフィックなどのリソース使用メトリクスを監視することで、使用率が低いかまたは過剰に利用されているKubernetesノードを特定し、リソース割り当てを最適化し、インフラストラクチャーのスケーリングについて情報に基づいた意思決定を行うことができます。
これによってアプリケーションが最適に動作するために必要なリソースを確保できるため、コストが削減されるという追加のメリットもあります。
Alerts and Notificationは、Kubernetesの問題が中断やダウンタイムにつながる前に、その根本原因をプロアクティブに特定して対処するのに役立ちます。
結果として、システムの安定性が向上し、潜在的な問題がアプリケーションやユーザーに与える影響を最小限に抑えることができます。
ログ、イベント、メトリクスを監視することで、ポッドの障害、リソースの制約、ネットワークの問題、アプリケーションのエラーなどの問題を迅速に特定し、診断することができます。
デバッグ・プロセスが高速化することで、ダウンタイムが短縮され、アプリケーションを利用可能な状態に維持できます。
履歴データを分析し、リソース使用率の傾向を監視することで、将来のリソースのニーズをより正確に予測し、より多くのKubernetesリソースが必要になるタイミングを特定し、それに応じてクラスターをスケーリングする計画を立てることができます。
最終的には、ワークロードの需要が増えてもリソース不足にはなりません。
Kubernetesのログ、ネットワーク・トラフィック、アクセス・パターンを監視することで、異常なアクティビティー、潜在的な侵害、不正アクセスの試みを容易に特定できます。
さらに、適切なセキュリティー管理とポリシーを導入し、積極的に監視することで、標準や規制への準拠を維持することができます。
Kubernetesスタックを完全に可視化するには、常に作成され、破壊され、相互に呼び出しを行うコンテナに関するテレメトリー・データを収集すると同時に、Kubernetesクラスター自体についてもテレメトリー・データを収集する必要があります。
クラスター監視では、Kubernetesクラスターの全体的な正常性を判断するのに役立つ、追跡できるクラスター・レベルのメトリクスがいくつかあります。
ノードの機能:すべてのクラスター・ノードが正常に動作しているかどうか、およびどの程度の能力で動作しているかを監視することは、クラスターの実行にどのようなクラウド・リソースが必要であるかを判別するのに役立ちます。
ノードの可用性:利用可能なクラスター・ノードの数を監視すると、どのクラウド・リソース(AWSやMicrosoft Azureなどのクラウド・プロバイダーを使用している場合)とクラスターの使用方法を判断するのに役立ちます。
ノードのリソース使用量:クラスター全体がリソース(メモリー、CPU、帯域幅、ディスク使用量)をどのように使用しているかを監視することで、クラスター内のノードのサイズや数を増減させる必要があるかどうかを決定できます。
実行中のポッドの数:実行中のポッドを監視すると、使用可能なノードの数が十分かどうか、ノードに障害が発生した場合には、ポッドのワークロード全体を処理できるかどうかがわかります。
Kubernetesクラスター内の個々のポッドが正しく機能していることを確認するには、ポッド・レベルの監視が必要です。これには、Kubernetesメトリクス、コンテナ・メトリクス、アプリケーション・メトリクスの3種類のメトリクスを調べる必要があります。
Kubernetesのメトリクスを監視することで、Kubernetesデプロイメント内のすべてのポッドが稼働し、健全であることを確認できます。
ポッドのインスタンス数: ポッドが持つ現在のインスタンス数が、予想された数と比較して少ない場合、クラスターはリソースが不足している可能性があります。
ポッドのステータス:ポッドが実行されているかどうか、または保留中、失敗、または終了したポッドの数について理解することで、ポッドの可用性と安定性に関する情報を得ることができます。
ポッドの再起動回数: ポッドの再起動回数を監視することで、ポッド内のアプリケーションの安定性を知ることができます。頻繁に再起動する場合は、クラッシュやリソースの制約などの根本的な問題が存在している可能性があります。
CPU使用率: ポッドのCPU消費量を監視することで、潜在的なパフォーマンスのボトルネックを特定し、ポッドに十分な処理リソースを確保することができます。
メモリー使用量:ポッドのメモリー消費量を監視することで、アプリケーションの安定性に影響を与える可能性のあるメモリー・リークや過剰なメモリー使用量を検知できます。
ネットワーク使用量: ポッドの送受信バイト数を監視すると、通信パターンについての洞察が得られ、ネットワークの問題を特定するのに役立ちます。
Kubernetesのメトリクスには、ヘルスチェック、ネットワークデータ、進行中のデプロイの状況(つまり、旧バージョンから新バージョンに切り替わったインスタンスの数など)も含まれます。
ポッド・コンテナのメトリクスを監視すると、設定したリソース制限にどれほど近づいているかを判断するのに役立ちます。これらのメトリクスを使用すると、CrashLoopBackoffでスタックしているポッドを検知することもできます。
CPU使用率/スロットリング:実行中のコンテナがCPUをどのように消費しているかを監視すると、リソースを大量に消費しているコンテナや、クラスターの全体的なパフォーマンスに影響を与える可能性のあるボトルネックを生み出しているコンテナを特定することができます。CPUスロットリングのメトリクスを追跡することで、リソースの制約や設定ミスによってコンテナのCPU使用率が制限されているかどうかが明らかになります。
メモリー使用量: 実行中のコンテナがメモリーをどのように消費しているかを監視することで、コンテナの安定性やシステム全体のパフォーマンスに影響を与えている可能性のあるメモリー・リーク、過剰なメモリー使用量、不十分なメモリー割り当てなどの問題に注意を向けることができます。
ネットワーク・トラフィック/エラー:コンテナのネットワーク・トラフィックと、パケット・ロスや接続エラーなどを監視することで、コンテナの通信パターンや過剰なネットワーク使用や予期しないトラフィック増大を評価することができます。
アプリケーションのメトリクスを監視することで、Kubernetesポッド内で実行されているアプリケーションのパフォーマンスと可用性を測定できます。これらのメトリクスは通常、Kubernetesアプリケーション自体によって開発されたものであり、レイテンシー、応答性、エラー率、応答時間など、Kubernetesアプリケーションが対処するBusiness Rulesに関連します。
以下は、Kubernetes環境を正常に監視するために考慮できるいくつかのベスト・プラクティスです。
Kubernetes DaemonSetsを使用する:DaemonSetsを使用すると、Kubernetes環境の各ノードとそのノード上のすべてのリソースをKubernetesクラスター全体で監視するエージェントをデプロイできます。デーモンは、ホストが表示され、メトリクスを提供する準備が整っていることを確認するのに役立ちます。
ラベルを賢く活用する:論理的で一貫性のあるラベル付けスキーマを策定することで、DevOpsチームはさまざまなコンポーネントを識別しやすくなり、Kubernetes監視から最大限の価値を引き出すことができます。
サービス・ディスカバリーを使用する:Google Kubernetes Engine(GKE)のサービス・ディスカバリーを使用すると、アプリケーションの実行場所がわからなくても、アプリケーションを継続的に監視できます。クラスターの正常性をより完全に把握するために、コンテナの移動に合わせてメトリクスの収集を自動的に適応させます。
Alerts and Notificationを設定する:CPUやメモリー使用率などの重要なメトリクスに対するAlerts and Notificationを設定し、それらのメトリクスが特定のしきい値に達したときに通知を受け取ります。インテリジェントなアラート機能を備えた監視ツールは、意味のあるイベントや変更に対してのみアラートを送信することで、アラート疲労を最小限に抑えます。
コントロール・プレーン要素を監視する:APIサーバー、kube-dns、kubelet、kube-proxy、etcd、コントローラー・マネージャーなどのKubernetesコントロール・プレーン要素を定期的に監視することで、クラスター・サービスがスムーズに実行されていることを確認できます。
ユーザー・エクスペリエンスを監視する:Kubernetesプラットフォームでネイティブには測定されませんが、ユーザー・エクスペリエンスを監視することで、クラスター内で発見される前に問題に関するアラートを受け取れる場合があります。
組み込みツールとオープンソース・ツールを使用する:ユースケースに関係なく、Kubernetesダッシュボード、cAdvisor(コンテナ・アドバイザー)、kube-state-metricsなどの組み込みKubernetes監視ツールや、Prometheus、Grafana、Jaeger、Elastic Stack(旧称ELK Stack)などの一般的なオープンソース・ツールを活用できます。これらのツールは、デプロイ、トラブルシューティング、監視に加えて、データの視覚化や、さまざまなソースからの時系列メトリクスの収集と保存などの追加機能を提供します。
SaaSベースのKubernetes監視ソリューションを使用する:Kubernetesの管理、インフラストラクチャーの開発、コスト管理を容易にし、定期的な更新を受け取るために、オンプレミスのシステムではなく、自動化が組み込まれたSaaSベースの監視システムを使用します。
Kubernetesクラスター全体を自動的に観察、監視、修正し、アプリケーションのパフォーマンスと可用性を向上させます。
ビジネスの俊敏性と成長を加速—IBMのクラウド・サービスとコンサルティングを利用して、あらゆるプラットフォーム上のアプリケーションを継続的にモダナイズします。
コンテナ・ソリューションは、セキュリティ、オープンソースの革新性、迅速なデプロイメントを駆使して、コンテナ化されたワークロードを実行およびスケールアップします。