Kubernetes監視とは?
Kubernetes監視の定義
Kubernetes監視はレポートシステムであり、DevOpsやIT部門が問題を特定し、複雑なKubernetesクラスターを能動的に管理できるようにします。効果的なKubernetes監視により、コンテナー化されたインフラ全体をリアルタイムで管理できます。また、アップタイムとクラスターリソース(メモリ、CPU、ストレージなど)の使用状況を追跡します。クラスターコンポーネントの連携も追跡します。
Kubernetes監視では、クラスターオペレーターが機能を監視できます。必要な数のポッドが稼働していないとき、リソースの利用率が重大な限界に近づいたとき、ポッドやノードが障害や構成エラーでクラスターに参加できないときなどに報告が行われます。
Kubernetes監視により、クラスターの内部的な正常性、リソース数、パフォーマンスメトリックに関するインサイトが提供されます。また、能動的なアラートと機械学習ベースの異常検知により、問題を迅速に検出し、解決することができます。適切なKubernetes監視ツールを利用して、一元化されたログ、メトリック、トレースを確認することで、Kubernetesクラスターやクラスターで実行されているアプリケーションの状況と正常性を把握する方法の詳細をご覧ください。
Kubernetesとは?
Kubernetes(K8s)は、ソフトウェアデプロイの自動化、スケーリング、コンテナー化されたアプリケーションの管理を行うためのオープンソースコンテナーオーケストレーションシステムです。もともとは2014年にGoogleが開発したプロジェクトで、現在はCloud Native Computing Foundation(CNCF)が保守しています。Kubernetesは、コンテナ化されたアプリケーションの管理に関わる多くの手動プロセスを解消します。コンテナオーケストレーションは、個々のコンテナーをまとまった調整された全体として結合します。
Kubernetesは、自己管理型システムだけでなく、さまざまなクラウドプラットフォームにデプロイでき、IT部門やDevOpsチームを効率化できます。AWS、Google、Azureなど、多くのクラウドサービスプロバイダーは、そのほかに、何らかの形態でマネージドKubernetesサービスをユーザーに提供しています。Kubernetesでは、複数のホストにまたがるコンテナーを統合することで、次のことを実現できます。
- アプリを実行するために必要なリソースを最大化
- アプリケーションのデプロイと更新を自動化
- コンテナー化されたアプリケーションを迅速にスケール
- サービスを管理し、アプリケーションが想定どおりに実行されていることを保証
Kubernetesの監視が重要な理由
Kubernetes監視には、ホスト、コンテナー、コンテナー化されたアプリ、Kubernetesプラットフォーム自体など、多くの小さなコンポーネントが含まれます。問題が発生した場合、原因の特定が困難になる可能性があります。適切なKubernetes監視では、問題が発生している場所や問題が発生しそうな場所を確認し、対策を講じることができます。
Kubernetes監視ソリューションは、クラスター、デプロイ、ポッド、ノード、およびコンテナーに関するアクショナブルなレポートとインサイトを提供することもできます。また、アラートを設定することで、セキュリティやパフォーマンスのイベントに対して、チームが迅速に対応できます。得られたデータにより、クラスターの正常性、パフォーマンス、およびセキュリティ構成を最適化できます。これはリソース利用の最適化とコストの削減につながります。
Kubernetes監視では次のことができます。
- チームやアプリケーションがリソースを最適に消費していることを保証する
- 新しいノードがクラスターに参加したときに自動的に新しいリソースを利用する
- ホストがダウンした場合には、ワークロードを利用可能なノードに再デプロイする
- 更新とロールバックのプロビジョニングを効率化する
Kubernetes監視の方法
Kubernetesを監視するには、次の条件を満たす必要があります。
- メトリックサーバーがクラスター内で実行されている
- kube-state-metricsがオンになっている
- 収集メカニズムがデプロイされている
- Kubernetesメトリックとログを処理できるKubernetes監視ツール
環境全体を完全に可視化するために、包括的なオブザーバビリティツールは、Kubernetesデータだけではなく、アプリケーションのトレース、メトリック、ログを監視できます。 - メトリックとログを収集するためにデプロイされたエージェント
Kubernetes監視ソリューションの多くは、プロビジョニングが比較的容易なため、DaemonSetアプローチを採用しています。DaemonSetは、クラスターのすべてのノードでワークロードのコピーが実行されることを保証する特殊なポッドです。開発者はDaemonSetを作成して、クラスターの各ノードで監視エージェントを実行し、パフォーマンスメトリックを収集できます。
Kubernetes監視ユースケースで重要なメトリック
Kubernetes監視の重要なメトリックは、コントロールプレーン、ノード、ポッド、コンテナーです。
- Kubernetesコントロールプレーンメトリックは、クラスターのパフォーマンスを全体として理解するのに役立ちます。中心はkube-apiserverです。これによって、次のような要素を観察できます。
- Etcd:すべてのクラスターデータのKubernetesのバッキングストアとして使用される、一貫性と可用性が高いキー値のストア。
- Kube-scheduler:新しいポッドをキューに追加し、利用可能な各ノードを評価してから、ポッドを適切なノードにバインドすることで、新しいポッドを配置する場所を決定するスケジューリングプロセス。
- Kube-controller-manager:すべてのコントローラーを1つのプロセスに結合し、まとめて実行することで複雑さを軽減するコンポーネント。
- Cloud-controller-manager:クラウドプロバイダーのリソースと連携するコントローラー。クラウドプロバイダーのAPIにクラスターをリンクすることができます。
- Kubernetesノードメトリックは、Kubernetesクラスター全体のパフォーマンスを監視します。これには、使用されるリソースの数、各ノードで実行されているアプリケーションの数、ノードが正常に動作しているかどうかなどが含まれます。ディスクやメモリの使用率、CPU、ネットワーク帯域幅など、ノードのリソース使用に関するメトリックを調べます。各ノードには次の要素が含まれます。
- Kubelet:クラスターの各ノードで実行されるエージェント。コンテナーがポッドで実行されていることを確認します。
- Kube-proxy:クラスターの各ノードで実行されているネットワークプロキシ。Kubernetesサービス概念の一部を実装します。
- コンテナーランタイム:コンテナーエンジンとも呼ばれる、コンテナーを実行するソフトウェア。
- Kubernetesコンテナーメトリックでは、コンテナーCPU使用率、コンテナーメモリ使用率、ネットワーク使用率のメトリックといった設定したリソース制限と比較して、現在の状況を評価できます。
- Kubernetesポッドメトリックは、デプロイのすべてのポッドが正常に動作しているかどうかを示します。アプリケーションメトリックは、アップタイムや応答時間、応答性、レイテンシといった要素を含め、Kubernetesポッド内で実行されているアプリケーションのパフォーマンスと可用性を示します。
Kubernetes監視の課題
従来のアプリケーションをKubernetesに移行するには時間がかかる場合があります。Kubernetesは、コンテナー内やクラウド間でのアプリケーションのデプロイを簡素化できますが、その複雑さによって、独自の課題が生じます。
Kubernetesコンテナーオーケストレーションでは、動的な自動化が可能です。そのため、個々のコンポーネントを検査し、アラートを有効化するために、動的な監視システムも同様に必要です。動的なコンテナー環境で実行されているアプリケーションに特有の監視の課題の1つは、その複雑さです。数千ものコンテナーで数百個のマイクロサービスが、エフェメラルで使い捨てのポッドで動作している場合、どのように問題を診断し解決するのでしょうか。
Kubernetes監視のベストプラクティス
ノードが同じ場所にデプロイされているのか、クラウド全体にデプロイされているのか、ハイブリッドクラウドにデプロイされているのかに関係なく、Kubernetes監視のベストプラクティスは同じです。メトリック収集は、クラスター全体で同じ方法で実行されるようにしてください。次に、Kubernetes監視で考慮すべき有用なベストプラクティスをいくつか示します。
- 名前空間を使用して、クラスターを整理し、コンテナー管理を簡素化し、リスクを最小化します。
- 最新バージョンのKubernetesにアップグレードし、新しい機能、不具合修正、セキュリティパッチを導入します。
- 自動監視を設定し、Kubernetesアラートを解明します。
- ロールベースのアクセス制御(RBAC)を設定し、ユーザーおよびサービスアカウントへの権限とアクセスを管理します。
- クラスター管理者へのプッシュ通知を設定し、特定の問題の解決に対応するチームを定義します。
- ラベルを使用して、クラスターを整理し、オブジェクトを定義して管理します。
- 合理化されたGitベースのワークフローを設定し、エラーを削減します。
最も成功しているKubernetes監視ソリューションは次の要件を満たします。
- テクノロジースタックのすべての層を監視します。クラスター内のKubernetesコアコンポーネント、ノード、ポッド、コンテナーといったすべてのホストシステムのほかに、すべてのアプリケーションとサービスを追跡する必要があります。
- サービスが動的に出現すると、自動的に検知、監視されます。
- 関連するメトリック、ログ、トレース、その他のオブザーバビリティデータをグループ化して探索できるように、データを収集し相関させる方法を提供します。
- PrometheusやOpenTelemetryなどのオープン標準と統合し、その他のメトリックを収集します。
次に、ElasticsearchとOpenTelemetryを使用してKubernetesでアプリケーションとサービスのワークフローを監視し、セキュリティを確保するためのベストプラクティスについて説明します。
KubernetesとDocker
Kubernetesは、コンテナー化されたアプリケーションを大規模で運用するという点で、Dockerとは異なります。Dockerは、個々のコンテナーの構築、共有、実行を可能にするソフトウェア開発ツールの集合です。
Dockerは、シンプルなコマンドと、単一のAPIによる自動化が導入されたクライアントサーバーアーキテクチャーを採用しています。コンテナー化されたアプリケーションを簡単にパッケージ化し、配布できます。
Dockerで構築されたコンテナーイメージは、KubernetesやDocker Swarmなどのコンテナーをサポートするプラットフォームで実行できます。複数のサーバーやクラスターにまたがる膨大な量のコンテナーの実行、管理、スケジューリング、オーケストレーションでは、KubernetesはDockerよりも優れています。Kubernetesは、正常性を監視し、効率的に負荷を分散するために、ほとんどの大企業で採用されています。
重要な点は、KubernetesにはAPIとコマンドラインツールが付属しており、運用を自動化できることです。Kubectlはコンテナー管理を大幅に簡素化します。Kubernetesは、Dockerコンテナーランタイムといった多くのコンテナーランタイムからコンテナーを実行し、管理するためのプラットフォームです。さまざまな要素を自動的に管理できるため、Kubernetesは特に柔軟です。その信頼性により、IT部門の時間を節約し、全体的なワークフローを合理化できます。
Kubernetes監視ダッシュボード
WebベースのKubernetesにはわかりやすいダッシュボードがあり、リソースとノードの概要を個別に確認したり、クラスター全体で確認したりできます。コンテナー化されたアプリケーションのデプロイ、リソースの管理、トラブルシューティングを簡単に行うことができます。
次に示すElasticのすぐに使えるダッシュボードには、クラスターの名前空間と定義済みのストレージクラスがすべて含まれています。また、すべてのノード、名前空間、永続性記憶装置ボリュームの一覧を示す概要も表示されます。そして、詳細な、集約されたノードメトリックを完備しています。
クラスター化された各アプリケーションの永続的なボリュームクレームや、クラスターで実行中のすべてのKubernetesリソースを包括的に把握できます。また、選択した名前空間で実行されているすべてのアプリケーション、現在のポッドのメモリ使用率、デプロイまたはReplicaSetの準備ができているポッドの数が表示されます。
ElasticでのKubernetes監視
Elasticオブザーバビリティでは、Kubernetesクラスターと、そこで実行されるワークロードのログ、メトリック、トレースを1つの統合されたプラットフォームに取り込むことができます。これにより、アプリケーションサービスの問題を効果的に特定できます。KubernetesクラスターのメトリックやログをElasticの機械学習ベースの異常検知で利用することで、データ分析にかかる時間を短縮できます。
比類ない機能群を備えたElasticのKubernetes監視ソリューションでは、Kubernetesエコシステムをリアルタイムで可視化できます。Elastic Stack上に構築されたオブザーバビリティソリューションにより、Kubernetesアーキテクチャーのデプロイと運用をシームレスに行うことができます。大規模なログ、メトリクス、APMトレースを単一のビューに統合することで、広く分散されたクラウドネイティブアプリケーションの複雑さを効果的に統制できます。クラウドネイティブなテックスタックとクラウド監視に必要なアクショナブルなオブザーバビリティも得られます。このため、ますます複雑化するハイブリッドクラウドおよびマルチクラウドのエコシステム内で問題を予防的に検知し、解決します。
Kubernetes監視用語集
次に、参考として、主なKubernetesの用語をいくつか説明します。
クラスター
コンテナー化されたアプリケーションを実行する、ノードと呼ばれるワーカーマシンの集合。すべてのクラスターには1つ以上のワーカーノードがあります。
ノード
ノードはKubernetesのワーカーマシンです。
- マスター(ノード)
コントロールプレーンをホスティングするノードの同義語として使用されるレガシー用語。 - ワーカー(ノード)
ワーカーノードは、アプリケーションワークロードのコンポーネントであるポッドをホスティングします。
ポッド
最も小さく、最もシンプルなKubernetesオブジェクト。ポッドは、クラスターで実行中のコンテナーの集合です。
コンテナー
ソフトウェアとその依存関係をすべて含む、軽量で移植性の高い実行可能イメージ。
コントローラー
Kubernetesでは、コントローラーはクラスターの状態を監視し、必要に応じて変更を加えたり要求したりする制御ループです。各コントローラーは、現在のクラスターの状態を目的の状態に近づけようとします。
Kubelet
クラスターの各ノードで実行されるエージェント。コンテナーがポッドで実行されていることを確認します。
Kube-proxy
クラスターの各ノードで実行されているネットワークプロキシ。Kubernetesサービス概念の一部を実装します。
Etcd
すべてのクラスターデータのKubernetesのバッキングストアとして使用される、一貫性と可用性が高いキー値のストア。
Ingress
クラスターのサービスに対する外部からのアクセス(通常はHTTP)を管理するAPIオブジェクト。Ingressは、ロードバランシング、SSLターミネーション、名前ベースの仮想ホスティングを提供することができます。